java - 如何指示 JVM 尽可能减少内存占用?

标签 java jvm

我有一个执行 5 个不同任务的 java 程序。当我使用 -Xmx512m 内存参数运行程序时,任务 1-4 运行正常,但任务 5 内存不足。当我使用 -Xmx1024m 运行程序时,所有 5 个任务都运行良好,但之前使用 512m 堆运行良好的任务 1-4 现在几乎用完了所有 1024m 堆。如果我使用 -Xms128m -Xmx1024m,也会发生同样的事情。

指示 JVM 保持低内存利用率(例如任务 1-4 为 512m)并且仅在实际需要时使用更多内存(例如任务 5)的内存参数是什么?

也许我需要一种比默认设置更频繁地激活垃圾收集器的方法?

最佳答案

这两个参数提示jvm何时需要调整其堆大小:

-XX:MaxHeapFreeRatio=10
-XX:MinHeapFreeRatio=10

这几乎意味着如果在 gc 之后,超过 10% 的堆是空闲的,它会尝试将内存还给操作系统。并且只有在 gc 之后使用了超过 90% 的堆时,它才会增长堆。

这可能会减慢您的程序,因为 gc 会不断更改分配的内存大小。如果您的程序在短时间内分配大量内存,它可能根本没有效果。

关于java - 如何指示 JVM 尽可能减少内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123268/

相关文章:

java - Java的SecureRandom循环

java - 如何从 Java 创建 Meteor 密码?

java - 用窗口求和

java - 类作为静态变量的容器

java - 在clojure中制作一个插件系统

hadoop - 在Hadoop中,如何在数据节点上查看任务的类路径

java - @ManyToMany 映射不会更新相应的表

java - 创建Java虚拟机失败

java - JUnit测试时出现运行时错误

java - Spark 驱动程序的 RMI 库导致 Full GC 暂停(System.gc())