记忆管理:年轻的澄清

时间:2016-08-18 11:16:01

标签: java memory memory-management memory-leaks garbage-collection

堆内存分为Young Gen,Old Gen和PermGem。

在年轻人中,分配了一个伊甸园空间和两个幸存者空间。根据我们机器中的GC,一个幸存者空间应始终可用,以便当GC标记年轻一代(伊甸园空间+ 1幸存者空间)中已存在的参考(扫描)并升级它们时,可以存储下一个活动节点参考。老一代。

第一个问题是,这种理解是否正确?

如果是,在所有时间,Young Gen的某些部分将以1个幸存者空间的形式空置/可用。那么如何在GC Logs中看到年轻人已经满了(即GC被触发)或者是误导?这意味着GC日志中只显示可用的年轻内存。

如何分析堆内存已满,即OutOfMemory,当Young Gen的某些部分将始终具有一些空闲空间时,因此堆内存全存。

提前致谢。

2 个答案:

答案 0 :(得分:0)

有两种GC集合

  1. 次要GC - 当年轻一代填满时会发生这种情况
  2. 完整GC - 当终身或老一代填满时会发生这种情况 当堆上没有剩余空间将对象移动到旧代时,就会发生OutOfMemory。
    您应该阅读有关Java GC过程的更多信息。您可以从 - http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
  3. 开始

    要阅读和分析GC日志,您可以参考How to read a verbose:GC output?

答案 1 :(得分:0)

假设您正在使用热点,那么使用-XX:+PrintGCDetails -XX:+PrintHeapAtGC进行记录应该足够详细,以涵盖您感兴趣的所有内容。