我试图理解Java堆术语中的年轻永久世代的概念,更具体地说,这三代人之间的相互作用.

我的问题是:

  • 什么是年轻一代?
  • 什么是老一代?
  • 什么是永久的一代?
  • 这三代人之间是如何互动/联系的呢?

推荐答案

这似乎是一个常见的误解.在Oracle的JVM中,永久生成不是堆的一部分.它是一个单独的空间,用于存储类定义和相关数据.在Java6和更早版本中,插入的字符串也存储在永久生成中.在Java7中,插入的字符串存储在主对象堆中.

这是一篇关于permanent generation的好帖子.

我喜欢甲骨文guide on JConsole中每个空间的描述:

对于HotSpot Java VM,内存

  • Eden Space(堆):最初分配内存的池
  • 幸存空间(堆):包含幸存对象的池 伊甸园的垃圾收集 太空.
  • 永久生成(堆):包含已存在对象的池
  • 永久生成(非堆):包含所有反射
  • 代码缓存(非堆):HotSpot Java VM还包括一个代码缓存,

Java使用分代垃圾收集.这意味着如果您有一个对象foo(它是某个类的实例),它存活的垃圾收集事件越多(如果仍然有对它的引用),它就会得到进一步提升.它开始于年轻一代(它本身被分成多个空间-伊甸园和幸存者),如果它存活足够长的时间,最终将在终生一代结束.

Java相关问答推荐

如何从片段请求数据到活动?在主要活动中单击按钮请求数据?

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

Android视图覆盖不阻止点击它后面的控件

Apache POI:使用反射获取zoom 级别

根据对象和值的参数将映射<;T、值&>转换为列表<;T&>

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

在springboot 3中,当我调用api endpoint时,会出现404

如何在Java中从XML中获取特定的 node ,然后将其删除?

自定义批注的外推属性值

Jolt变换JSON数组问题

用OSQL创建索引

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

在向WebSphere中的文档添加元素时iText挂起

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

插入中的JOOQ序列,设置为VS值

将java.util.Date(01.01.0001)转换为java.time.LocalDate将返回29.12.0000

不能在 map 上移除折线

如何将RESTAssured';S的Http标题转换为<;字符串、字符串和>的映射?

控制器建议异常处理

AspectJ编织外部依赖代码,重新打包jar并强制依赖用户使用它