我有一個Java應用程序的形式,我從數據庫訪問記錄,處理它,並再次更新數據庫。 我這樣做是通過將我的java應用程序轉換爲JAR並從命令提示符執行它。測試期間,每個表在數據庫中只有20條記錄 。爲此,我執行如下的jar以避免內存不足錯誤,Java增加堆大小
java -jar -Xmx512m MyApp.jar
如果數據庫包含很多記錄(50,000),如何在執行罐子或如何動態增加基於需求的同時,執行罐子堆的大小增加堆大小。
感謝
我有一個Java應用程序的形式,我從數據庫訪問記錄,處理它,並再次更新數據庫。 我這樣做是通過將我的java應用程序轉換爲JAR並從命令提示符執行它。測試期間,每個表在數據庫中只有20條記錄 。爲此,我執行如下的jar以避免內存不足錯誤,Java增加堆大小
java -jar -Xmx512m MyApp.jar
如果數據庫包含很多記錄(50,000),如何在執行罐子或如何動態增加基於需求的同時,執行罐子堆的大小增加堆大小。
感謝
最大的是你需要永遠不多少會實際使用的最大堆。這是您寧可應用程序崩潰而不是繼續運行的一點。 JVM將動態管理到目前爲止使用的內存。
如何在執行jar時根據需要動態增加堆大小。
所以,如果你想JVM使用256 MB,但是你想讓它動態增長高達30 GB,你會設置這樣的
java -ms256m -mx30g -jar MyApp.jar
即使是最小的,但不保證使用。 JVM將盡最大努力將內存使用量保持在這個水平。無論您設置的最小值爲多少,Hello World程序都不會使用256 MB的堆。
-Xmx2048m -XX:-UseGCOverheadLimit
設置這在你的虛擬機Arguement。 您可以設置更少的內存大小來代替2048
看到這個鏈接http://stackoverflow.com/questions/2073869/how-to-increase-java-heap-size-programmatically –
在使用您已使用的-Xmx選項運行程序之前設置最大堆大小。根據這些信息,JVM將根據需要使用盡可能多的堆大小,達到給定的數量。所以如果你的程序只需要1MB的內存,那麼JVM將只使用這個數量,如果它需要1G而你只給它512M,你會得到一個OutOfMemoryError。
因此,基本上,如果需要,您可以爲程序提供更多堆空間,並且JVM將根據其需要動態調整已用堆大小。
有時這不是預期的行爲,堆大小的下限可以用-Xms來設置。然後JVM將始終預留一個Xms和Xmx之間大小的堆。
這會將您的最大堆大小增加到1Gb。
java -Xms256m -Xmx1024m -jar MyApp.jar
其中-Xms指定初始Java堆大小,-Xmx指定最大Java堆大小。
JVM的參數必須在-jar部分之前傳遞。其原因可當我們執行「Java的版本」中可以看出:
用法:
java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
可能的重複[如何以編程方式增加java堆大小](http://stackoverflow.com/questions/2073869/how-to-increase-java-heap-size-programmatically) –
你應該看看垃圾收集策略除了通過更好的gc策略來設置最小/最大堆大小(在分析應用程序之後)之後,您可以通過更少的內存獲得更多的價值。可用選項取決於您使用的Java版本。 Jconsole是你的朋友。 – ramsinb