![](https://img-blog.csdnimg.cn/98276661ce9b4a3cb398658f78549805.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入理解JVM虚拟机
文章平均质量分 92
学习JVM知识
白泽上树
Java程序员
展开
-
java常用垃圾回收器G1和CMS的区别
1 概述 从jdk1.8为界限,几种常用的垃圾回收器如下图所示:注意: 对于Serial-Serial Old 和Parallel Scavenge-Parallel Old这两种垃圾回收器,新生代都采用复制回收算法,老年代采用标记整理算法,区别在于回收时采用一个还是多个线程,缺点也都很一致,就是会产生STW。 虽然CMS垃圾回收器比其他两种好,但是java8之前还算是默认使用的是PS-PO回收器。2 ParNew-CMS(ConcurrentMarkSweep)回收器 与上图原创 2022-04-10 21:41:04 · 3825 阅读 · 0 评论 -
JVM垃圾回收器
1 HotSpot的算法实现1.1 枚举根节点 以可达性分析中从 GC Roots 节点找引用链这个操作为例,可作为 GC Roots 的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗很多时间。 另外,可达性分析对执行时间的敏感还体现在 GC 停顿上,因为这项分析工作必须不可以出现分析过程中对象引用关系还在不断变化的情况,否则分析结果准确性就无法得到保证。这点是导致 GC 进行时必原创 2022-04-05 21:39:35 · 1044 阅读 · 0 评论 -
JVM垃圾回收机制
1 垃圾回收区域 GC主要关注于堆中(重点关注堆)和方法区的垃圾收集 引申点:虚拟机栈,本地方法栈,程序计数器不用考虑GC;不会发生OOM的区域只有程序计数器。 Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结原创 2022-04-05 00:10:34 · 11078 阅读 · 0 评论 -
JVM的解释器和即时编译器JIT
参考网址 https://www.cnblogs.com/linghu-java/p/8589843.html.1 什么是Java编译器 Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe可以简单看成是Java编译器。2 JVM内的解释器和即时编译器器 什么是机器码? 机器码就是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。 而解释器和即时编.原创 2022-03-24 20:46:54 · 2422 阅读 · 3 评论 -
JVM1.8 内存模型(运行时数据区)
1 JVM内存模型图 根据JVM规范,JVM内存共分为五个部分。方法区、堆、虚拟机栈、本地方法栈、程序计数器。其中程序计数器、虚拟机栈、本地方法栈是线程私有的。方法区、堆是线程公有的。1.1 JDK1.8内存模型概览 1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本质和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是使用本地内存。2 运行时数据区2.1 程序计数器2.1.1 什么是程序计数器 程序计数器是一原创 2022-03-24 19:55:18 · 2338 阅读 · 0 评论 -
Java虚拟机之类加载机制原理详解
1 JVM基本概念1.1 概述 JVM是可运行Java代码的虚拟计算机,JVM是运行在操作系统之上的,它与硬件没有直接的交互。JVM说到底,其实就是在物理机上运行的程序,同时他依托物理机而拥有了完善的硬件架构和指令系统。1.2 运行过程 Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。也就是如下: • Java源文件—->编译器—->字节码文件 • 字节码文件原创 2022-03-22 19:24:09 · 1548 阅读 · 0 评论