首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记忆管理:年轻一代的澄清

记忆管理:年轻一代的澄清
EN

Stack Overflow用户
提问于 2016-08-18 11:16:00
回答 2查看 164关注 0票数 0

堆内存分为年轻一代、老世代和PermGem。

在年轻一代中,分配一个伊甸园空间和两个幸存者空间。根据我们机器中的GC,一个幸存者空间应该总是可用的,这样当GC标记年轻的gen (eden空间+1个幸存者空间)中已经存在的引用(扫描)并将它们升级到旧的gen时,下一个活动节点引用就可以存储在那里。

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

如果是的话,在任何时候,年轻一代的一部分都将以1名幸存者空间的形式空缺/可用。那么,如何在GC日志中看到年轻的gen已满(即GC被触发)或这是误导性的?这意味着只有可用的年轻一代内存显示在GC日志中。

如何分析堆内存是满的,即OutOfMemory,当年轻一代的某些部分总是有一些空空间时,因此堆的所有内存。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 11:32:24

有两种GC集合。

  1. 小GC -这发生在年轻一代被填满时
  2. 完全GC -这发生在终身或老一代填补。 当堆上没有空间将对象移动到旧代时,就会发生OutOfMemory。 您应该阅读更多关于Java过程的内容。你可以从- http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html开始

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

票数 0
EN

Stack Overflow用户

发布于 2016-08-18 18:40:11

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39016802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档