版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34122324/article/details/84898129
一块 Java 堆空间一般分成三部分,这三部分用来存储三类数据:新生代、老年代、永久代。
1. 刚刚创建的对象
在代码运行时会持续不断地创造新的对象,这些新创建的对象会被统一放在一起。因为有很多局部变量等在新创建后很快会变成 不可达 的对象,快速死去 ,因此这块区域的特点是 存活对象少,垃圾多 。形象点描述这块区域为: 新生代;
2. 存活了一段时间的对象
这些对象早早就被创建了,而且一直活了下来。我们把这些 存活时间较长 的对象放在一起,它们的特点是 存活对象多,垃圾少 。形象点描述这块区域为: 老年代;下面是一些老年代的判断方式:
- 需要大量连续空间的Java对象
- 长期存活的对象(默认15次Minor GC后还存活的对象)
- 动态对象年龄判断(在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代)
3. 永久存在的对象
比如一些静态文件,这些对象的特点是 不需要垃圾回收,永远存活 。形象点描述这块区域为:永久代 。(不过在 Java 8 里已经把 永久代 删除了,把这块内存空间给了 元空间)