2010-06-21 71 views
1

當通過JDBC從11g Oracle數據庫讀取時,得到java.lang.OutOfMemoryError:Java堆空間消息。我將defaultRowPrefetch設置爲10000,將其降低到2000似乎可以解決問題。但是,向JVM添加額外內存(-xmx)不能解決問題。這個問題似乎只發生在64位的Java 1.6中 - 我在32位java中沒有看到這個問題。java.lang.OutOfMemoryError:從Oracle讀JDBC時的Java堆空間

我的問題是,我可以更改哪些設置以允許我的應用程序使用較大的defaultRowPrefetch運行?

+0

部屋基思,默認defaultRowPrefetch北京時間10日,我將其設置爲250得到顯着進步,我認爲,即使2000非常高相比默認。 – reto 2012-01-05 13:37:03

回答

2

您正在編輯正確的設置(雖然它是-Xmx,而不是-xmx),但聽起來您需要進一步增加它,例如,

-Xmx256m

至於64位的事情而言,你會發現,一個64位JVM使用了堆比32位JVM多快(這是有道理的,指針是規模的兩倍) ,所以64位JVM無論如何都需要更多的堆。

+2

-XX:+ UseCompressedOops有助於減少64位JVM上的堆大小,並略微降低性能。 – rhu 2010-06-21 23:05:46

+1

+ XX:+ UseCompressedOops做到了! – Keith 2010-06-22 21:27:40

1

不能失憶也會形成缺乏PermGen?更多的內存不僅僅是堆

-XX:MaxPermSize=128m 
+0

它可以。但是,如果它確實'OOME的錯誤信息將*告訴你*你已經超出了超時空間。如果它不告訴你,你會明智的*不*旋轉那個特定的旋鈕!此外,permgen空間不太可能與讀取JDBC結果集相關。 – 2010-06-21 23:31:00