java - 为什么FullGC无法释放物理内存(RES)?

标签 java garbage-collection

下面是RES增长曲线: enter image description here

然后是老一代入住比例: enter image description here

通过jmap强制Full GC,Old gen确实减少了,但是RES一直在增长...

pmap结果:

enter image description here

anon是什么意思,非堆内存?

编辑:

enter image description here

enter image description here

enter image description here

enter image description here

堆使用了大约500MB,但是RSS超过15GB,pmap显示许多匿名大约65MB。

我的问题是什么可能消耗堆外的内存?谢谢!

最佳答案

Oracle的JVM有多种管理内存的算法。 其中一些可以将未使用的内存页返回给操作系统,其他则不能。

默认算法(并行收集器)永远不会将内存返回给操作系统。

以下两种算法可以将内存归还给操作系统

  • 串行 GC(单线程标记清除紧凑型)
  • G1

您已找到可用算法和相关 JVM 选项的摘要 here .

关于java - 为什么FullGC无法释放物理内存(RES)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962755/

相关文章:

java - 如何从类名创建类对象并将其用于方法重载

garbage-collection - 比较和交换有无垃圾收集器

Java GC 开销超出限制

java - 在 EJB 3 (SLSB) 中处理 JDBC 连接的正确方法

java - 在运行时在 netbeans 中启用断言

java - Dropwizard @QueryParam 返回 null 而不是读取参数

java - Android VM 是否可以在不终止整个 Android 应用程序的情况下垃圾收集静态变量?

java - java堆分配多少物理内存是怎么决定的?

java - 任何人都可以在Java中共享垃圾收集器算法

java - 对Integer对象进行加操作,从目录中读取多个文件以在Java中创建词袋