我有一个java应用程序表单,我从数据库访问记录,处理它并再次更新数据库。 我这样做是通过将我的java应用程序转换为JAR并从命令提示符执行它。在测试期间,只有20条记录 数据库中的每个表。为了我执行jar如下,以避免内存不足错误,
java -jar -Xmx512m MyApp.jar
如果数据库包含大量记录(50,000),如何在执行jar时增加堆大小或如何在执行jar时根据需要动态增加堆大小。
由于
答案 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的堆。