java - JVM内存管理

标签 java memory garbage-collection jvm

在我的 MPI 程序中发生 JVM 内存分配崩溃后,我试图了解内存管理是如何工作的。为了做到这一点,我添加了如下所示的行。

public static void main(String[] args) throws MPIException {
    System.out.println("memory upon initialisation: " + (Runtime.getRuntime().totalMemory() >> 20) + "MB");
    //run some with some loops and a lot of variables...
    System.out.println("memory when finished: " + (Runtime.getRuntime().totalMemory() >> 20) + "MB");
}

我运行了这段代码,可以看到堆大小如何增加,但是当我将 System.gc(); 行添加到我的代码中时,堆大小不再扩大。

我的问题是:为什么 JVM 似乎更喜欢扩展堆而不是进行一些垃圾收集?我希望 JVM 在进一步分配内存之前首先尝试垃圾收集。

提前致谢

最佳答案

JVM 假定您可以分配 -Xmx 所允许的尽可能多的堆。更多的堆余量意味着更高的 GC 吞吐量和更少的 GC 暂停频率。您可以决定愿意投入多少 RAM 来帮助您的 JVM 良好运行。至少这是默认的推理;您可以通过大量可配置选项来影响 JVM 的选择。

关于java - JVM内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184520/

相关文章:

java - 迁移到 Java 8 后运行 jnlp 文件

mongodb - Mongod 常驻内存使用率低

python - 在 Python 中计算内存碎片

java - 读取大型文本文件、垃圾收集器和 Scanner 对象的问题

java - 如何使用 Selenium WebDriver 处理 Windows 文件上传?

java - 为什么我在浏览器中得到 java.lang.reflect.InitationTargetException 而在 Eclipse Applet 查看器中却没有?

java - 如何检查日期是否超过 30 天?

Python脚本在不同的行停止并且不抛出异常

performance - 从 gc.log/replay gc.log 重新创建内存情况

javascript - blob 垃圾收集问题