java - 为什么年轻代需要3个区域来进行垃圾收集?

标签 java garbage-collection jvm

我知道年轻代分为Eden区、From区、To区。 但有人可以向我解释一下,如果我们只有 2 个区域,比如第一个区域、第二个区域,那可以吗?

我认为我们仍然可以只用 2 个区域来复制垃圾收集,如下所示。

  1. 新物体出现 => 将它们放在第一
  2. 当 1st 已满时,将 Activity 的复制到 2nd,并删除 1st 上的所有内容
  3. 新物体再次出现 => 将它们放在第二位
  4. 当 2nd 已满时,将 Activity 的复制到 1st 并在 2nd 上删除它们 等等

那么,为什么我们还需要一个额外的(伊甸园)区域?

这对性能更好吗? 提前致谢。

最佳答案

在你的方案中,对象不能占用超过一半的 Young Gen,因此 50% 的 Young Gen 内存总是被浪费。

单独的“往返”空间通常比“伊甸园”小。这有助于减少内存开销,同时保留快速复制收集器的优点。

关于java - 为什么年轻代需要3个区域来进行垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49869589/

相关文章:

java - 使用 -Xmx 标志时,如果给定的参数超出物理内存,会发生什么情况?

java - ValueEventListener.onDataChange() 不会被调用

java - Spring 启动: create configuration properties bean in runtime

Java 8 兼容性问题 : How to convert Object array to Subtype List in Java 8?

java - 有没有办法在 Java 中安排完整的垃圾收集?

java - 如果Java有垃圾回收,那为什么会出现OutOfMemoryError呢?

C# WebClient - 下载文件后 LOH 大幅增加

java - 将 JVM/JRE 设置为自动使用 Windows 代理

java - JVM 最大堆大小 := 0 - what does this mean?

JavaScript 到 Java Applet 使用 Deploy Java.js 运行命令行