JVM专题
JVM的基础学习和项目实践
KingdomCoder
技术发烧友
展开
-
彻底理解JVM垃圾回收-经典垃圾收集器(十)
垃圾收集器的整体概述 经典垃圾收集器之间的关系图如下: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用,图中收集器所在的区域,则表示它是属于新生代收集器或是老年代收集器。 Serial收集器 Seria收集器是最基础、最悠久的收集器。该收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅是说明它只会用一个处理器或者一个条收集线程去完成垃...原创 2020-04-16 10:37:38 · 363 阅读 · 0 评论 -
彻底理解JVM垃圾回收-重要概念理解(九)
根节点枚举 固定可作为GC Roots的节点主要存在全局性引用(例如常量或者类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标比较明确但是要高效查找这些节点并非易事。迄今为止,所有收集器的根节点枚举这一步都需要暂停用户线程的,毫无疑问枚举根节点需要面临”Stop the world“的困扰。现在可达性分析算法耗时最长的查找引用链的过程已经可以做到与用户线程一起并发(CMS),但根节...原创 2020-04-08 13:43:47 · 444 阅读 · 2 评论 -
彻底理解JVM垃圾回收-垃圾收集算法(八)
分代收集理论 当前商业虚拟机的垃圾收集器大多数遵循了”分代收集“的理论进行设计的。遵循分代收集理论,Java的堆空间被划分为新生代(Yong Generation)和老年代(Old Generation)两个区域。在新生代中,每次垃圾收集时都能发现有大批的对象死去,而每次回收后存活的少量对象,将会逐步晋升到老年代中存放。 标记-清除算法 该算法分为两个阶段,”标记阶段“和”清除字段“:首先...原创 2020-04-03 19:01:12 · 221 阅读 · 0 评论 -
彻底理解JVM垃圾回收-基础概念理解(七)
引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器引用就减1;任何时刻计数器都为0的对象就是不可能再被使用的对象。客观的说引用计数算法实现简单,判定效率也很高,在大部分去情况下它都是一个不错的算法,但是在Java语言中没有选用引用计数法来管理内存,最主要的原因是它很难解决对象之间的相互循环引用的问题。如图: 说明: 图例中,Object0到O...原创 2020-03-31 17:12:09 · 164 阅读 · 0 评论 -
HotSpot虚拟机对象探秘(六)
对象的创建 虚拟机遇到一条new指令时,受检检查这个指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有那么首先执行相应的类的加载过程。 在类加载检查通过之后,接下来虚拟机需要为新生的对象分配内存。对象所需的内存大小在类加载完成之后便可完全确定,为对象分配内存的任务等同于把一块确定大小的内存从java堆中划分出来。假设Ja...原创 2020-03-29 16:48:19 · 218 阅读 · 0 评论 -
JVM内存模型(五)
JVM的运行时数据区内存结构模型 程序计数器 程序计数器(Program Counter Register),也有称作为PC寄存器。在汇编语言中,程序计数器是指CPU中的寄存器,它保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,...原创 2020-03-26 22:19:54 · 123 阅读 · 0 评论 -
Java字节码文件结构剖析-从JVM角度读字节码(四)
代码案例: public class MyTest1 { private int a = 1; public MyTest1() { } public int getA() { return this.a; } public void setA(int a) { this.a = a; } } 执行命令...原创 2020-03-14 16:40:03 · 238 阅读 · 0 评论 -
类加载器的深入解析及重要特性剖析(三)
1.类加载器 类加载器用来把类加载到Java虚拟机当中。从JDK1.2版本开始,类的加载过程采用双委托机制,这种机制能更好的保证Java平台的安全。在此委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且仅有一个父加载器。当Java程序请求加载器Loader1加载类Sample,首先委托父类加载器加载,如果能加载则返回,否则由Loader1加载器加载Sample。 2.类...原创 2020-02-27 11:54:00 · 222 阅读 · 0 评论 -
类加载器深入解析与阶段分解(二)
1.类加载 在java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 提供了更大的灵活性,增加了更多的可能性。 2.Java虚拟机与程序的生命周期 如下几种情况,虚拟机将结束生命周期: 执行了System.exist() 程序正常执行结束 程序执行过程中遇到了异常或错误而异常终止 由于操作系统出现错误而导致java虚拟机进程终止 3.对象的生命周期 (1) 加...原创 2020-02-18 12:34:41 · 133 阅读 · 0 评论 -
类的生命周期详解(一)
类的加载: 类的加载的最终产品是位于堆区中的Class对象 Class对象封装了类在方法区内的数据结构,并且向JAVA程序员提供了访问方法区内的数据结构的接口 类加载器的种类: java虚拟机自带的加载器 (1)根类加载器(Bootstrap),由C++编写,无法在java代码中获取该类 (2)扩展类加载器(Extension),使用Java代码实现 (3)系统(或者应用)类加载器(Syste...原创 2020-01-17 13:42:24 · 291 阅读 · 0 评论