Java内存管理之Java堆结构是怎么样的?里面有什么东西?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34122324/article/details/84898129


一块 Java 堆空间一般分成三部分,这三部分用来存储三类数据:新生代、老年代、永久代。


1. 刚刚创建的对象

在代码运行时会持续不断地创造新的对象,这些新创建的对象会被统一放在一起。因为有很多局部变量等在新创建后很快会变成 不可达 的对象,快速死去 ,因此这块区域的特点是 存活对象少,垃圾多 。形象点描述这块区域为: 新生代;


2. 存活了一段时间的对象

这些对象早早就被创建了,而且一直活了下来。我们把这些 存活时间较长 的对象放在一起,它们的特点是 存活对象多,垃圾少 。形象点描述这块区域为: 老年代;下面是一些老年代的判断方式:

  1. 需要大量连续空间的Java对象
  2. 长期存活的对象(默认15次Minor GC后还存活的对象)
  3. 动态对象年龄判断(在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代)

3. 永久存在的对象

比如一些静态文件,这些对象的特点是 不需要垃圾回收,永远存活 。形象点描述这块区域为:永久代 。(不过在 Java 8 里已经把 永久代 删除了,把这块内存空间给了 元空间)

猜你喜欢

转载自blog.csdn.net/baidu_34122324/article/details/84898129