JVM基础知识学习
weixin_43125854
这个作者很懒,什么都没留下…
展开
-
类加载机制和双亲委派机制
类的生命周期:1 加载 -> 2 链接 {(1)准备 (2)验证 (3)解析}-> 3初始化 -> 4 使用 ->5卸载**1加载:**加载阶段虚拟机需要完成以下 3 件事情:1)通过一个类的全限定名来获取定义此类的二进制字节流。2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3)在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个 类的各种数据的访问入口。2验证:文件格式验证,元数据验证,字节码验原创 2020-07-31 15:40:20 · 136 阅读 · 0 评论 -
JVM三色标记
在CMS和G1并发标记的过程中会采用三色标记算法,它是用来解决 GC 运行时程序长时间挂起的问题,最大的好处是可以异步执行,从而可以以中断时间极少的代价或者完全没有中断来进行整个 GC。三色标记法很简单。首先将对象用三种颜色表示,分别是白色、灰色和黑色。首先会把所有的对象都至为白色,然后根据跟可达性算法开始扫描,把扫过的对象变成灰色,然后继续扫描他的子对象,这个时候把子对象变成灰色,把这个对象变成黑色。等到扫描完成的时候把子对象也变成黑色。没有扫到的对象就还是白色了,那么白色的对象就是需要清理的对象。原创 2020-07-27 10:45:09 · 305 阅读 · 0 评论 -
JVM垃圾回收机制及算法
栈:栈中的生命周期是跟随线程,所以不是关注的重点堆:堆中的对象是共享的,也是存活时间比较长的,所以是重点。新生代采用是复制回收算法,老年代采用的标记清除,标记整理算法。复制算法(Copying)就是将from区和to区分成1:1,然后当发生新生代GC(Minor GC/Young GC两者叫法不一样,其实意思都是年轻代的GC)的时候,会把from区的数据复制到to区去,然后格式化from区的对象。再发生Minor GC/Young的时候重新把to区的对象又复制到from区去,然..原创 2020-07-24 11:19:55 · 140 阅读 · 0 评论 -
JVM对象的知识
虚拟机遇到一条 new 指令时,是如何创建对象呢?可以用一个流程图来解答类加载就是把 class 加载到 JVM 的运行时数据区的过程,后面会细说。(1)检查加载:检查这个指令的参数能否在常量池定位到一个符号引用,并且检查当前类是否已经被初始化,解析,初始化过。(2)分配内存:分配内存有两种方式: 一:是指针碰撞,我们都知道对象都是首先在Eden区分配的,如果那个区的内存空间是连续的整齐的,就会用一个指针来当作已经被分配...原创 2020-07-22 11:15:55 · 73 阅读 · 0 评论 -
深入理解运行时数据区
1 向操作系统申请分配内存空间2 获取内存空间后,会根据配置参数分配堆 栈以及方法区的大小3 类加载把 class 放入方法区、还有 class 中的静态变量和常量也要放入方法区4执行方法及创建对象总结一下 JVM 运行内存的整体流程JVM 在操作系统上启动,申请内存,先进行运行时数据区的初始化,然后把类加载到方法区,最后执行方法。 方法的执行和退出过程在内存上的体现上就是虚拟机栈中栈帧的入栈和出栈。 同时在方法的执行过程中创建的对象一般情况下都是放在堆中,最后堆中的对象也..原创 2020-07-21 09:23:15 · 168 阅读 · 0 评论 -
JVM学习之路笔记
JVM 的内存区域 运行时数据区域就是上面的图,先说共享区,就是可以被所有线程访问的(1)方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在jdk1.7以前被称为永久代,1.8以后被称为元空间JVM 在执行某个类的时候,必须先加载,class文件中除了方法接口类信息外还有一个常量池,它里面有字面量和符合引用字面量就是字符串(String a=“b”)、基本类型的常量(final 修饰的变量)符合引用就是假如一个类比如说是Test类吧,它引用了一原创 2020-07-17 10:59:06 · 88 阅读 · 0 评论