Java增加堆大小

时间:2012-12-20 07:31:50

标签: java database

我有一个java应用程序表单,我从数据库访问记录,处理它并再次更新数据库。 我这样做是通过将我的java应用程序转换为JAR并从命令提示符执行它。在测试期间,只有20条记录 数据库中的每个表。为了我执行jar如下,以避免内存不足错误,

java -jar -Xmx512m MyApp.jar

如果数据库包含大量记录(50,000),如何在执行jar时增加堆大小或如何在执行jar时根据需要动态增加堆大小。

由于

4 个答案:

答案 0 :(得分:1)

在使用您已使用的-Xmx选项运行程序之前设置最大堆大小。根据这些信息,JVM将根据需要使用尽可能多的堆大小,直到达到给定的数量。因此,如果您的程序只需要1 MB的RAM,那么JVM将只使用该数量,如果它需要1G并且您只给它512M,那么您将获得OutOfMemoryError。

因此,基本上,如果需要,可以为程序提供更多的堆空间,JVM将根据需要动态调整使用的堆大小。

有时这不是预期的行为,可以使用-Xms设置堆大小的下限。然后JVM将始终保留一个大小介于Xms和Xmx之间的堆。

答案 1 :(得分:0)

-Xmx2048m -XX:-UseGCOverheadLimit

在VM参数中设置此项。 您可以设置较少的内存大小来代替2048

答案 2 :(得分:0)

这会将max 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)

答案 3 :(得分:0)

最大值是您需要的最大堆 ,而不是它实际使用的数量。这是你应该比应用程序崩溃而不是继续运行的点。 JVM将动态管理到目前为止使用的内存。

  

如何在执行jar时根据需要动态增加堆大小。

因此,如果您希望JVM使用256 MB,但您希望它能够动态增长到30 GB,那么您可以像这样设置它

java -ms256m -mx30g -jar MyApp.jar

即使是最低限也不能保证使用。 JVM将尽可能少地将内存使用率保持在这个水平。无论您将最小值设置为什么,Hello World程序都不会使用256 MB的堆。