簡體   English   中英

Java增加堆大小

[英]Java Increase Heap size

我有一個Java應用程序表單,我正在從數據庫訪問記錄,對其進行處理,然后再次更新數據庫。 我是通過將Java應用程序轉換為JAR並在命令提示符下執行它來完成此操作的。在測試過程中,數據庫中每個表只有20條記錄。為此,我按以下方式執行jar以避免內存不足錯誤,

java -jar -Xmx512m MyApp.jar

如果數據庫包含大量記錄(50,000),則如何在執行jar時增加堆大小,或者如何在執行jar時根據需要動態增加堆大小。

謝謝

在運行程序之前,通過使用已經使用的-Xmx選項來設置最大堆大小。 根據此信息,JVM將使用所需的堆大小,直到給定的數量。 因此,如果您的程序僅需要1 MB的RAM,則JVM將僅使用該數量,如果需要1G且您僅給它512M,則將收到OutOfMemoryError。

因此,基本上,可以根據需要為程序提供更多的堆空間,並且JVM將根據其需要動態調整使用的堆大小。

有時這不是預期的行為,可以使用-Xms設置堆大小的下限。 然后,JVM將始終保留Xms和Xmx之間大小的堆。

-Xmx2048m -XX:-UseGCOverheadLimit

在虛擬機參數中設置此設置。 您可以設置較少的內存大小來代替2048

這會將您的最大heapSize增加到1Gb。

java -Xms256m -Xmx1024m -jar MyApp.jar

其中-Xms指定初始Java堆大小,而-Xmx指定最大Java堆大小。

必須在-jar部分之前傳遞JVM的參數。 當我們執行“ java -version”時,可以看到原因:

用法:

java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

最大的是你需要永遠沒有多少將實際使用的最大堆。 這是您不希望應用程序崩潰而不是繼續運行的點。 JVM將動態管理到目前為止使用的內存。

執行jar時如何根據需要動態增加堆大小。

因此,如果您希望JVM使用256 MB,但您希望它動態增長到30 GB,則可以這樣設置

java -ms256m -mx30g -jar MyApp.jar

即使是最小值也不能保證被使用。 JVM將盡最大努力將內存使用率保持在此水平。 無論您將最小值設置為多少,Hello World程序都不會使用256 MB的堆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM