
JVM
文章平均质量分 93
纵横千里,捭阖四方
弱小,是最大的罪过;没有行动,梦想终究是想一想
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一文搞定垃圾回收的三色标记法
我们之前介绍了各种常见垃圾回收器的基本原理,本小节我们讨论一个更深入的问题——垃圾回收器的底层是如何做的。在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。这就好比你在拖地,但是你的孩子却在跑来跑去,结果你一直拖不干净。主流的垃圾收集器基本上都是基于可达性分析算法来判定对象是否存活的,也就是”三色标记法“。根据对象是否被垃圾收集器扫描过而用白、灰、黑三种颜色来标记对象的状态的一种方法。而其中白色:表示对象尚未被垃圾收集器访问过。原创 2023-01-01 10:06:28 · 1158 阅读 · 0 评论 -
一文搞懂G1垃圾回收器
G1是从JDK9之后的默认垃圾回收器,其功能强大,性能优异,不过目前市面的材料不算多,很多都是抄来抄去,讲得也不太清楚。经过仔细阅读oracle官网以及相关的材料,从整体上梳理了G1的过程,希望这一文能帮你真正搞懂G1垃圾回收器。原创 2022-12-31 18:13:52 · 4227 阅读 · 2 评论 -
谈谈Java对象的生命周期
经过前面的分析 ,我们现在来看一下创建的对象到底是什么东西,并且完整的总结一下一个对象从创建到回收到底经过了哪些阶段。原创 2022-10-30 16:07:59 · 781 阅读 · 0 评论 -
JVM的堆工作过程原来就是收拾房间
当Eden的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对Eden区进行垃圾回收(MinorGC),Eden区中不再被其他对象引用的对象就是要被清理的,但是此时仍然有仍然在使用的,此时会将活的对象整理都移动到Survivor0区,之后Eden区就完全清空,可以继续存放新的对象了。另外,虽然不同对象的周期不同,但是70%-99%的对象是临时对象,也就是很多对象都是朝生夕死的,如果分代的话,把新创建的对象放到某一地方,当GC的时候先把这块存储“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。原创 2022-10-30 15:01:35 · 304 阅读 · 0 评论 -
一文理解JVM的方法区
常量池可以看做是一张表,常量池内部的内容比较多,例如数量值、字符串值、类引用、字段引用、方法引用等等,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型。域的相关信息包括:域名称,域类型,域修饰符例如public,private,protected,static,final,volatile,transient等等。方法的修饰符(public,private,protected,static,final,synchronized,native,abstract的一个子集)原创 2022-10-30 11:41:29 · 339 阅读 · 1 评论 -
一文理解虚拟机栈
在JVM中,将符号转换为调用方法的直接引用与方法的绑定机制相关。绑定时参考的一个重要信息来源就是常量池,根据常量池的信息将这些内容转换为实际的地址。//一个方法对应一块栈帧内存区域int a = 1;int b = 2;return c;}}}我们通过javap -v Math.class 查看其字节码中main()方法的内容根据上图的信息我们可以推断出,new对应的就是new Math()原创 2022-10-30 11:29:13 · 746 阅读 · 0 评论 -
一文理解JVM的程序计数器(PC)
本文我们将介绍PC计数器是如何工作的,如何表示跳转和循环等操作的,以及线程安全相关的问题。JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的信息。CPU只有把数据装载到寄存器才能够运行。但是这里并非是广义上所指的物理寄存器,在JVM中只是对PC寄存器的一种模拟,用来处理当前线程相关指令的计数器。有一点与CPU的寄存器是类似的,那就是占用空间小,但运行速度最快。原创 2022-10-30 11:10:41 · 1758 阅读 · 0 评论 -
从源码理解双亲委派机制,原来如此简单
Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式。简单来说,双亲委派机制,就是app加载器先向上交由父类加载器进行加载,父类中找不到,再由子类加载器自行加载。具体来说:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;原创 2022-10-26 20:12:39 · 750 阅读 · 0 评论 -
从源码透彻理解JVM类加载机制
接下来,我们就逐个介绍一下几种类加载器。第一种:启动类加载器启动类加载器(引导类加载器,Bootstrap ClassLoader)这个类加载使用C/C++语言实现的,嵌套在JVM内部它用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),用于提供JVM自身需要的类万物之祖,不继承其他类,没有父加载器加载扩展类和应用程序类加载器,并作为他们的父类加载器。原创 2022-10-26 20:02:54 · 782 阅读 · 0 评论 -
一文理解JVM的类加载系统
}该类是如何一步步被加载的呢?加载的过程如下所示:第一步:加载阶段,字节码文件会以文件流的形式输入,JVM会读取并加载这些字节码文件。第二步:链接阶段,对字节码进行验证、初步的处理,并将常量池内的符号引用转换为直接引用等等。第三步:初始化阶段,这一阶段主要是创建对象了。每个阶段又有更具体的功能,如下图所示:接下来,我们先介绍每个组件的功能,然后再从源码等角度来看整个系统是如何工作的。原创 2022-10-26 19:53:38 · 407 阅读 · 0 评论