2012-05-02 9 views
0

私は多くの処理とオブジェクトのリストの検索をしています。私のアプリケーションは結果をレンダリングする間にメモリ不足になります。効率的にオブジェクトのリストを処理/処理するためのAPIはありますか?それを最適化しようとしています。リストを扱うためのJava API

もう1つ、私は新しいArrayListですべてのリストを初期化しています。私は別のものを使うべきですか?

私は、レコードを表示し、これらのレコードを検索する必要がある画面があります。私はAPIを使用しています(私はDBにアクセスできないため、SQLクエリを実行できません)画面上に表示される特定の基準が検索され、同じ検索APIが使用されています。私はコードをデバッグしていて、例外はその検索メソッドによってスローされることがわかりました。私は、あなたがApacheのCollectionUilsパッケージを見てみることができ、エラーログに

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLException: [OWLS][SQLServer JDBC Driver][SQLServer]There is insufficient system memory in resource pool 'internal' to run this query. 
Error Code: 701 
Call: SELECT DISTINCT t0.PRIMARY_KEY, t0.TOTAL_ACCRUAL, t0.TOTAL_ALLOCATED, t0.ALLOC_LIMIT, t0.APPL_END_ON, t0.APPL_EXPENSE_PERCENT, t0.APPL_NON_US_TAX_PERCENT, t0.APPL_INVD_EXPENSE_PERCENT, t0.APPL_INVD_TASK_PERCENT, t0.APPL_START_ON, t0.APPL_TASK_PERCENT, t0.INVOLVED_APPL_TYPE_IID, t0.PROJECT_APPL_TYPE_IID, t0.VENDOR_APPL_TYPE_IID, t0.TOTAL_BG_AVAILABLE, t0.CREATED_ON, t0.STATUS_IID, t0.APPL_EXPENSE, t0.APPL_INVC_ACCRUAL, t0.APPL_INVC_CREDIT_NOTE, t0.APPL_NON_US_TAX, t0.APPL_INVC_SHADOW, t0.APPL_INVC_STANDARD, t0.APPL_INVD_EXPENSE, t0.APPL_INVD_TASK, t0.APPL_TASK, t0.AUTO_POST, t0.MODIFIED_ON, t0.NAME, t0.OVERDRAFT_TYPE_IID, t0.POSTED_TYPE_IID, t0.SECURITY_TYPE_IID, t0.TREE_KEY, t0.TYPE_IID, t0.TOTAL_USED, t0.VERSION, t0.APPL_EXPENSE_CATEGORY_ID, t0.APPL_NON_US_TAX_TYPE, t0.APPL_INVOLVED_ID, t0.APPL_INVD_EXP_CATEGORY_ID, t0.APPL_INVD_TASK_CATEGORY_ID, t0.APPL_PROJECT_CATEGORY_ID, t0.APPL_PROJ_DETAIL_FIELD_ID, t0.PROJECT_ID, t0.APPL_TASK_CATEGORY_ID, t0.APPL_VENDOR_ID, t0.APPROVAL_STATUS_ID, t0.CREATED_BY_ID, t0.CREATED_ON_BEHALF_OF_ID, t0.DEFAULT_CATEGORY_ID, t0.DOCUMENT_FOLDER_ID, t0.FORUM_ID, t0.MODIFIED_BY_ID, t0.NOTE_ID, t0.PARENT_ACCOUNT_ID FROM T_ACCOUNT_SECURITY_FILTER t5, Y_OBJ_CATEGORY t4, T_PROJECT t3, E_ACCT t2, T_CONTACT t1, T_ACCOUNT t0 WHERE ((((((((((t0.VENDOR_APPL_TYPE_IID = 2) AND (t1.PRIMARY_KEY = 2004)) AND (t2."YEARACCT" = N'2012')) AND (t0.PROJECT_APPL_TYPE_IID = 2)) AND (t3.PRIMARY_KEY = 46537)) AND (t4.TREE_POSITION = N'ACCT_ACTL_CCSP_VNDR_MONT')) AND (t0.NAME = N'Actuals - Cost Center 10 - LA2012000250 - Singla, Ashima - 2012 - October')) AND (t2."PERIODACCT" = N'M9')) AND (t5.USER_ID = 1504)) AND (((((t1.PRIMARY_KEY = t0.APPL_VENDOR_ID) AND (t2.ACCOUNT_ID$ = t0.PRIMARY_KEY)) AND (t3.PRIMARY_KEY = t0.PROJECT_ID)) AND (t4.PRIMARY_KEY = t0.DEFAULT_CATEGORY_ID)) AND (t5.ENTERPRISE_OBJECT_ID = t0.PRIMARY_KEY))) 
Query: ReadAllQuery(referenceClass=TFAccount sql="SELECT DISTINCT t0.PRIMARY_KEY, t0.TOTAL_ACCRUAL, t0.TOTAL_ALLOCATED, t0.ALLOC_LIMIT, t0.APPL_END_ON, t0.APPL_EXPENSE_PERCENT, t0.APPL_NON_US_TAX_PERCENT, t0.APPL_INVD_EXPENSE_PERCENT, t0.APPL_INVD_TASK_PERCENT, t0.APPL_START_ON, t0.APPL_TASK_PERCENT, t0.INVOLVED_APPL_TYPE_IID, t0.PROJECT_APPL_TYPE_IID, t0.VENDOR_APPL_TYPE_IID, t0.TOTAL_BG_AVAILABLE, t0.CREATED_ON, t0.STATUS_IID, t0.APPL_EXPENSE, t0.APPL_INVC_ACCRUAL, t0.APPL_INVC_CREDIT_NOTE, t0.APPL_NON_US_TAX, t0.APPL_INVC_SHADOW, t0.APPL_INVC_STANDARD, t0.APPL_INVD_EXPENSE, t0.APPL_INVD_TASK, t0.APPL_TASK, t0.AUTO_POST, t0.MODIFIED_ON, t0.NAME, t0.OVERDRAFT_TYPE_IID, t0.POSTED_TYPE_IID, t0.SECURITY_TYPE_IID, t0.TREE_KEY, t0.TYPE_IID, t0.TOTAL_USED, t0.VERSION, t0.APPL_EXPENSE_CATEGORY_ID, t0.APPL_NON_US_TAX_TYPE, t0.APPL_INVOLVED_ID, t0.APPL_INVD_EXP_CATEGORY_ID, t0.APPL_INVD_TASK_CATEGORY_ID, t0.APPL_PROJECT_CATEGORY_ID, t0.APPL_PROJ_DETAIL_FIELD_ID, t0.PROJECT_ID, t0.APPL_TASK_CATEGORY_ID, t0.APPL_VENDOR_ID, t0.APPROVAL_STATUS_ID, t0.CREATED_BY_ID, t0.CREATED_ON_BEHALF_OF_ID, t0.DEFAULT_CATEGORY_ID, t0.DOCUMENT_FOLDER_ID, t0.FORUM_ID, t0.MODIFIED_BY_ID, t0.NOTE_ID, t0.PARENT_ACCOUNT_ID FROM T_ACCOUNT_SECURITY_FILTER t5, Y_OBJ_CATEGORY t4, T_PROJECT t3, E_ACCT t2, T_CONTACT t1, T_ACCOUNT t0 WHERE ((((((((((t0.VENDOR_APPL_TYPE_IID = ?) AND (t1.PRIMARY_KEY = ?)) AND (t2."YEARACCT" = ?)) AND (t0.PROJECT_APPL_TYPE_IID = ?)) AND (t3.PRIMARY_KEY = ?)) AND (t4.TREE_POSITION = ?)) AND (t0.NAME = ?)) AND (t2."PERIODACCT" = ?)) AND (t5.USER_ID = ?)) AND (((((t1.PRIMARY_KEY = t0.APPL_VENDOR_ID) AND (t2.ACCOUNT_ID$ = t0.PRIMARY_KEY)) AND (t3.PRIMARY_KEY = t0.PROJECT_ID)) AND (t4.PRIMARY_KEY = t0.DEFAULT_CATEGORY_ID)) AND (t5.ENTERPRISE_OBJECT_ID = t0.PRIMARY_KEY)))") 
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) 
    at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529) 

おかげ ラヴィクマール

+3

コードを投稿できますか?それはあなたの問題を理解するのに役立ちます。 –

+0

このコードは、特定のAPIを使用しており、そのアプリケーション専用にビルドされており、皆さんが理解することは難しいでしょう。単なるコレクションではないので、リスト。 –

+0

問題が解決しました。これは、DBのスペースが不足しているためです。みなさん、ありがとうございます。ベストレビュアーラビクマール –

答えて

2

を貼り付けています。 APIはあなたがすでに行っているかもしれないいくつかの機能を提供するかもしれませんが、APIはより効率的にそれを行うかもしれません。それは、あなたが実際に何をしているのかを私たちに伝えることなく、推測することしかできないと言われています。

+0

ええ、そうです。私は非開示契約(NDA)のもとで働いています。私は何も投稿できません。そのことについて謝ります。 –

+0

@ Ravi.Kumar:あなたが達成しようとしているアイデアを概説した例を提供する必要があります。 – home

+0

私は、レコードを表示し、これらのレコードを検索する必要がある画面を持っている、私はAPIを使用している(私は自分のDBにアクセスすることができないと私はSQLクエリを実行することはできません)特定の基準が検索され、同じ検索APIが使用されています。私はコードをデバッグしていて、例外はその検索メソッドによってスローされることがわかりました。私は私の質問にエラーログを貼り付けています。 –

0

いくつかのレイジーローディング手法を検討しましたか?

たとえば、コレクションの実際の反復中にコレクションオブジェクトをロードします。

または、コレクションに格納されている実際のオブジェクトの軽量表現(たとえば、オブジェクトのDBキーのみ)を持つ。

効率的な検索が必要な場合は、Luceneなどの検索エンジンライブラリを検討する必要があります。

+0

問題は解決しました。これは、DBのスペースが不足しているためです。みなさん、ありがとうございました。最高のおじいさんRavi Kumar –

関連する問題