JVM,类加载

JVM的五个组成部分:

1.本地方法栈:与JVM栈类似,本地方法栈是为本地方法(C/C++)所服务;
2.程序计数器:用来记录从线程执行的行号;
3.JVM栈(java虚拟机栈,先进后出):
a)局部变量表:八大基本数据类型,对象的引用;
b)操作栈:每个方法都会对应一个操作栈;
c)动态链接:执行常量池的方法引用;
d)方法返回地址:pc寄存器的地址;
4.堆:new Object()所有的对象都是存在此区域,此区域也是JVM最大的一块区域,垃圾回收就是针对这一区域;
5.元数据区:在jdk1.7的时候,这片区域叫做方法区,jdk1.8的时候元数据区代替了方法区,将自己的内容(类元信息,静态属性,常量池)放入本地内存,jdk1.8时将字符串常量池也放入了堆中;
在这里插入图片描述

堆里的数据划分:

**新生代:**新创建的数据会在新生代,在一定次数的GC后依然存活下来的对象会被放入到老年代(HotSpot默认的垃圾回收次数是15);
老年代:存放的是存活了一定次数的对象和大对象;
新生代又有三个区域:Eden,S0,S1;
大对象为什么会被放入到老年代:
因为大对象的创建和销毁,时间较长,消耗资源大,频繁的创建和销毁会导致JVM的整个执行效率下降,所以就直接将大对象存放在老年代;

JVM的类加载过程:

1.加载:通过完整的类路径找到相应的二进制字节流文件,将静态的字节流转换为方法数据,在内存中生成方法入口;
2.校验:用来确定文件格式和字节码等的正确性,文件格式验证、元数据验证、字节码验证和符号引用验证;
3.准备:为类中的静态能量变量分配内存空间;
4.解析:将符号引用转换为直接引用;
5.初始化:这是类加载的最后一部,这个阶段才开始执行用户定义的java程序,对静态变量,静态代码块进行初始化工作;
6.使用
7.卸载

JVM双亲委派模型:

JVM加载子类不会直接进行加载,而是将任务传递给父类,一层一层的进行传递,如果找不到父类或者说父类中没有找到子类,才会自己尝试进行加载;
优势:
1.安全性;
2.唯一性;
三次破坏双亲委派模型的场景;
1.jdk1.2首次引入双亲委派模型,为了兼容以前的老代码第一次出现了破环双亲委派模型;
2.双亲委派模型的自身缺点导致了第二次破坏双亲委派模型;
3.人们对热更新和热加载的追求,导致了第三次破坏双亲委派模型;

JVM垃圾回收器:

1.判断死亡对象:

1)引用计数器算法:为每个对象生成一个计数器,每次被引用的时候计数器+1,如果撤销引用计数器-1,当计数器为0的时候,GC根据计数器的值来判断对象是否为死亡对象;
缺点:不能解决循环引用的问题;
2)可达性分析算法(目前JVM判断对象生死的方法):
jdk1.2之后有四种引用类型:
①强引用:xx = new Object(),即使OOM,也不会回收;
②软引用:当发生OOM,才会回收;
③弱用用:每次GC时,都会被回收;
④虚引用:创建即回收,它的价值只是在垃圾回收是时触发一个回调算法;

2.垃圾回收算法:

a)标记清除算法(可达性分析算法):会产生内存碎片;
在这里插入图片描述

b)复制算法:先将存活的对象复制到另一个没用使用的内存中 ,然后将此内存清空,(性能不比较快)新生代的垃圾回收算法,内存利用率不高;
c)标记整理算法:可以解决内存碎片问题;
在这里插入图片描述

3.垃圾回收器:

CMS:CMS (Concurrent Mark Sweep))收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网站或者BIS系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求

执行过程:
1.初始标记: 初始标记仅仅是标记一下GC Roots能关联到的对象,速度很快,需要Stop The World;
2.并发标记:并发标记阶段就是进行GC Roots Tracing的过程。
3.重新标记:重新标记阶段是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短,仍然需要"Stop The World"。
4.并发清除:并发清除阶段会清除对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值