首页 > 其他 > 详细

JVM

时间:2019-06-30 11:12:08      阅读:103      评论:0      收藏:0      [点我收藏+]

内存模型

堆、栈、方法区、本地方法栈、程序计数器

栈:线程私有。局部变量表,操作栈,动态链接,方法出口,执行java方法

本地方法栈:线程私有。执行Native方法

程序计数器:线程私有。当前线程执行的字节码位置,为执行java方法服务

堆:内存中最大,线程共享。存放对象实例,分代管理。

方法区:线程共享。已被虚拟机加载的类信息,常量和静态变量。

类加载机制

类的加载:将编译好的class文件中的字节码读入到内存中,将其放在方法区并创建对应的class对象。

加载过程:加载(文件到内存)—链接(验证【文件内容验证:文件格式,元数据,字节码,符号引用验证,要符合规范】、准备【内存分配】、解析)—初始化(静态变量赋值)

类初始化的触发条件:

1.     创建类的实例

2.     访问类的静态方法或者静态变量

3.     Class.forname()反射类

4.     子类被初始化

双亲委派加载机制

常用类加载器

GC

为什么要回收?

回收垃圾,释放内存

什么时候回收?

新生代内存慢时,会出发minorGC

收回哪些对象?

1.     引用计数法

2.     引用可达法

GCRoots开始搜索—对象到GCRoots没有引用链相连,进行第一次标记—是否执行了finalize()

怎么回收?

分代垃圾回收机制。作用:优化GC性能。不同的对象处于不同的生命状态,及时对无用对象进行回收。

技术分享图片

扩展:为什么需要两个survivor?

1.     如果没有两个,每一次GC,对象被送到老年代,老年代很快会被填满,会触发MajorGC,消耗时间

2.     S区保证经历16次minorGC,还在新生区存活的对象,才送到老年代。

3.     减少碎片化。保留一个不用,用于复制另一个和eden中存活的对象。

 不同垃圾回收算法适用场景:

 

 

JVM

原文:https://www.cnblogs.com/NeverGiveUp0/p/11108926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!