一、Java虚拟机里面有什么东西
1.类加载子系统,方法区,Java堆,直接内存,垃圾回收器,执行引擎,Java栈,本地方法栈,PC寄存器。
(1)类加载子系统:从网络或者文件系统中加载Class文件。
(2)方法区:存字符串,类的信息,静态方法,静态常量等。
(3)Java堆:存Java对象(重点讲)
(4)直接内存:执行NIO库操作需要大量读写,在直接内存里执行效率更快。
(5)垃圾回收器:对垃圾回收算法的实现。(重点讲)
(6)执行引擎:比如Hotspot(热点探测)。执行引擎是将Class文件编译成本地的机器码文件,热点探测就是频繁将有些Class文件转换成本地机器码文件的Class文件转换成本地机器码文件缓存在本地,后面就直接读取缓存。在JDK1.3开始测试,JDK1.5开始Hotspot开始商用。
(7)Java栈:存局部变量,参数,方法调用,方法返回等
(8)本地方法栈:存系统方法调用,系统方法返回等
(9)PC寄存器:主要功能就是区别执行的方法是Java方法还是本地方法,如果是本地方法PC寄存器里存的undefined。
二、Java堆
注意点:JDK1.7以前Java堆分为新生代,老年代,持久代。JDK1.7开始就测试取消持久代,因为持久代存的是常量,类的信息,静态常量等,可以发现和方法区存的东西基本一致。JDK1.8就已经取消持久代。
1.新生代:
(1)新生代里分为三个区域:eden,s0,s1。刚产生的对象是出生在eden区里(大对象是直接放在老年代里),当eden区快满时,调用minor gc采用复制算法(后面说)将存活的对象放到是s1中,如果s0中也有则也采用复制算法,把存活对象放在s1中。然后清空s0和eden区,然后s0和s1交换位置。
2.老年代:
(1)新生代里的对象每经历一次Minor GC后,如果存活它的年龄加一。如果年龄到达15(JVM里默认15,可以修改),则放到老年代中。老年代中的垃圾回收器叫Full GC(Minnor GC和Full GC都是对新生代及老年代里垃圾回收器的总称,其下还能细分,后面讲)。
三、垃圾回收器
1.垃圾回收算法
垃圾回收器是对垃圾回收算法的实现,我们先看看有哪些垃圾回收算法。
(1)引用记数法:Java堆里的对象,每有一个它的引用,它的计数就加一,每减少一个它的引用,它的计数就减一。GC就回收计数为0的对象。
(2)复制算法:eden和s0区的对象在没被清除掉并且年龄没到15,则复制对象按顺序存放到s1中。
(3)标记清除算法:从对象的跟引用开始做标记,如果没被标记就清除。缺点:产生碎片,工作时候用户进程停止工作。
(4)标记整理算法:从对象的跟引用开始做标记,如果没被标记就清除。标记的对象则压缩对象,放在按顺序放在堆里的一块里。缺点:工作时候用户进程停止工作。
2.7个垃圾回收器
seral,parNew,parille scavege属于新生代,CMS(CounConrrent make sweep),seral Old,parille Old属于老年代。G1(gebarge first)新生代,老年代通吃。
(1)seral垃圾回收器(串行收集器):
1)运用算法:复制算法
2)缺点:需要两倍空间,工作时候用户进程停止。
(2)parNew垃圾回收器(并行收集器):
1)运用算法:复制算法
2)缺点:需要两倍空间,工作时候用户进程停止, 停止时间比seral垃圾回收器的停止时间短。
3)单核CPU运用此回收器不一定比用seral回收器 好,CPU逻辑数越多,此回收器越好用
(3)parille scavege垃圾回收器(并行收集器):
1)运用算法:复制算法
2)它关注的是系统吞吐量,系统吞吐量 = 运行用户 程序时间/(运行用户时间+JVM运行时间),开 发Java桌面级 应用,大量科学计算用它比较好。
(4)CMS(counConrrent make sweep并发收集器):
1)并发与并行的区别是,并发是用户工作线程与 JVM线程同时运行(实质上也是交替进行,因为 CPU的调度机制),而并行不包含用户工作线 程。
2)运用算法:标记整理算法
(5)seral Old垃圾回收器(串行收集器):
1)运用算法:标记整理算法
2)缺点:工作时候用户进程停止。
(6)parille Old垃圾回收器(并行收集器):
1)运用算法:标记整理算法
2)缺点:工作时候用户进程停止,但是比使用seral Old垃圾回收器停止时间短。
(7)G1垃圾回收器(Gebarge first)
1)运用算法:标记清除算法
3.新生代及老年代垃圾回收器匹配关系
1.CMS垃圾回收器可以和所有新生代的垃圾回收器配合工作
2.seral Old垃圾回收器可以和所有新生代的垃圾回收器配合工作
3.parille Old垃圾回收器只能和parille scavege垃圾回收器配合工作
4.G1垃圾回收器能和所有新生代及老年代的垃圾回收器配合工作,甚至新生代及老年代都是它也可以