javaJVM

JVM-分代模型

2021-01-06  本文已影响0人  terry蒋

一、对象生命周期

1. 对象生命周期

二、JVM分代模型

1. 年轻代老年代

1.1 什么是新老年代

堆内存分为年轻代老年代

(1) 年轻代

年轻代也叫新生代。存放创建和使用完后很快就要被回收的对象。

年轻代划分

(2) 老年代

存放长期存在的对象

(3) 新老年代示例:
image.png

Kafka的静态变量"fetcher"引用了ReplicaFetcher对象,这个对象先在年轻代停留一段时间,最终会进入老年代。

而loadReplicasFromDisk方法中的replicaManager引用的实例对象在一次方法调用结束后,方法的栈帧出栈,实例对象会很快被回收。

1.2 为什么分为年轻代和老年代

因为不同存活时长的对象需要不同的垃圾回收算法,这样回收更高效。

1.3 为什么要有survivor区

1.4 为什么要设置两个survivor区

每次minor gc,通过将eden和一个survivor的内容复制到另一个survivor, 避免碎片化问题

2. 永久代

JDK1.8以前有永久代,JDK1.8开始,已经取消了永久代。但是方法区作为概念上的区域仍然存在,但是我们不再叫方法区了,而是叫元数据区(metaspace)。

原先永久代中类的元信息会被放入本地内存(元数据区metaspace),将类的静态变量和内部字符串放入到java堆中。

上一篇 下一篇

猜你喜欢

热点阅读