JVM虚拟机
2018-04-27 15:08:37 75 举报
AI智能生成
jvm 虚拟机
作者其他创作
大纲/内容
内存区域划分
pc寄存器
方法区
本地方法区
常量池
java栈
栈帧
堆
垃圾收集器
Serial收集器
Serial收集器是一个单线程收集器,它进行垃圾收集时,必须暂停其他所有的工作线程(Stop the world),直到它垃圾收集结束 client模式。
ParNew收集器
其实就是Serial收集器的多线程版本,在运行在Server模式下的虚拟机中,ParNew收集器是首选的新生代收集器。
CMS收集器
一款并发收集器(用户线程与垃圾收集线程同时执行),是一种以获取最短回收停顿时间为目标的收集器,它是基于标记-清除算法实现的初始标记、重新标记仍然需要"Stop the World",但是它们的速度都很快。初始标记只是标记一下GC Roots能直接关联到的对象,重新标记是为了修正并发标记期间因为用户线程继续运作而导致标记产生变动的那一部分对象的标记记录。(初始标记→并发标记→重新标记→并发清除)
内存回收
方式
计数法
可达性分析
条件
对应的classLoader没有被其他对象引用
对应的Class对象没有其他对象引用
类对象没有其他对象引用
总之:到gc root的路径断开,就会被回收
回收算法
标记清除(容易产生碎片)
复制算法(浪费空间)
标记整理算法
分代收集算法
新生代
复制算法
区域划分
Eden区
所有新创建的对象都分配在Eden区域中,当Eden区域满后会触发minor GC 将Eden区仍然存活的对象复制到其中一个Survivor区域中,另外一个Survivor区中的存活对象也复制到这个Survivor区域中,并始终保持一个Survivor区时空的。
Survivor 1
Survivor 2
老生代
算法
标记整理算法
标记清除
区域划分
就一个Old区域
Old区存放Young区Survivor满后触发minor GC后仍然存活的对象,当Eden区满后会将存活的对象放入Survivor区域,如果Survivor区存不下这些对象,GC收集器就会将这些对象直接存放到Old区中,如果Survivor区中的对象足够老,也直接存放到Old区中。如果Old区满了,将会触发Full GC回收整个堆内存。
Perm区
主要存放类的Class对象和常量,如果类不停地动态加载,也会导致Perm区满。Perm区地垃圾回收也是有Full GC触发地。
ClassLoader类加载器
原理
加载类的顺序使用双亲委托方式,也就是说当加载一个类的时候,首先调用父级
分类
BootstrapClassLoader
加载java_home的jre下的lib等相关文件
ExtClassLoader
加载java_home的jre的lib的ext下相关的文件
AppClassLoader
加载classpath下的类和配置文件
CustomerClassLoader
凡是java开头的类都是由BootstrapClassLoader加载的,所以比如自己加载一个string说不可能的
继承ClassLoader,复写findClass类,还有defindClass是什么鬼??
0 条评论
下一页