![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM原理
文章平均质量分 68
JVM原理
Elephant_King
github:https://github.com/Elephant-King9
平时写的代码会上传到github,欢迎学习交流
展开
-
【JVM】JVM为什么要分代
为什么要分代分代的垃圾回收策略,是基于这样一个事实:**不同的对象的生命周期是不一样的。**因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用转载 2022-02-22 16:30:46 · 443 阅读 · 0 评论 -
【JVM】JVM垃圾收集器
Serial收集器(复制算法)新生代单线程收集器,标记和清理都是单线程,有点事简单高效,是client级别默认的GC方式Serial Old收集器(标记整理算法)老年代单线程收集器,Serial收集器的老年代版本ParNew收集器(复制算法)新生代收集器,可以认为是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现Parallel Scavenge收集器(复制算法)并行收集器,追求高吞吐量,高效利用CPU,吞吐量一般为99%。适合后台应.原创 2022-02-07 21:31:31 · 206 阅读 · 0 评论 -
【JVM】JVM client模式和Server模式
JVM Server模式和client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,新能会有很大提升JVM不显式的指定时Server模式还是client模式,JVM能够自动判断推荐在服务器上以Server模式运行,客户端或者GUI模式下可以用Client模式运行...原创 2022-02-07 21:18:05 · 1406 阅读 · 0 评论 -
【JVM】CMS垃圾回收器概念与问题
于GC的区别首先CMS不是重GC也不是轻GC,在新生区满后,会出发轻GC,将不能删除的数据放入到幸存区,幸存区会通过复制算法清理完成后再加入轻GC后的数据CMS垃圾回收器主要针对的是老年代的垃圾回收,但是他并不是重GC,和重GC无关CMS垃圾回收特点 1.CMS只会回收老年代和永久代,不会回收年轻代 2.CMS是一种预处理垃圾回收器,不能等到老年去内存用尽时回收,需要在内存用尽前,完成回收操作,否则会导致并发回收失败,所以CMS垃圾回收器开始执行回收操...原创 2022-02-07 18:49:18 · 1656 阅读 · 0 评论 -
【JVM】四种引用类型
强引用(StrongReference)最常见的引用方式A a = new A();这就是强引用,如果一个对象是一个强引用,那么JVM在这个对象在虚拟机栈中的时候绝对不会回收这个对象,就算抛出OOM挂掉程序,也不会进行回收但是这种情况public class Test { public static void main(String[] args) { new Test().fun1(); } public void fun1() { .原创 2022-01-09 18:59:01 · 585 阅读 · 0 评论 -
【JVM】GC如何判断对象可以被回收
引用计数法概念每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,当计数为0的时候就说明这个对象可以被回收何时引用计数器会加一new一个对象,代表在堆中创建一个对象,在虚拟机栈中会增加一个引用,引用计数器也会增加一个引用 当被其他对象调用的时候,引用计数器也会增加一个引用优点 1.可即刻回收垃圾 当引用值为0的时候,对象会在变成垃圾的同时被回收,内存空间不会被垃...原创 2022-01-09 18:22:36 · 454 阅读 · 0 评论 -
【JVM】类加载器分类
关于类加载器的分类,可以看这篇文章这里主要对面试题有一个理解首先我们知道JDK自带的类加载器有三个1.BootStrapClassLoader2.ExtClassLoader3.AppClassLoader三者不是简单的继承关系,而是通过getParents方法来向上获取的BootStrapClassLoader是ExtClassLoader的父类,负责加载%JAVA_HOME%lib下的jar包和class文件ExtCl...原创 2022-01-09 15:00:27 · 399 阅读 · 0 评论 -
【JVM】字节码
什么是字节码概念Java源代码经过虚拟机编译器编译(javac)后产生的文件(即扩展为.class的文件),他不面向任何处理器,只面向虚拟机 对于解释型语言和编译型语言的描述,可以看这篇文章Java不同于普通的解释性语言与编译型语言 对于普通的解释性语言来讲,Java不是执行一句编译一句,而是将所有执行的源代码编译成class文件,提高了效率 对于普通的编译型语言来讲,由于有虚拟机的存在,Java的跨平台性大大提高了流...原创 2022-01-09 14:10:15 · 360 阅读 · 0 评论 -
【JVM】四种GC算法(分代收集+三种标记算法)
参考文章JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法Java堆内存又溢出了!教你一招必杀技【附源码】_李振良_阿良_51CTO博客JVM分代收集理论与三种标记算法_u011277123的博客-CSDN博客_分代理论JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法四种GC算法四种算法为:标记清除法...原创 2021-12-24 15:05:17 · 1121 阅读 · 0 评论 -
【JVM】使用JProfiler工具分析OOM原因
参考文章long_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主JProfiler的安装和使用_vicky_pyh的博客-CSDN博客_jprofilerlong_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主安装与配置首先进入Jpofiler官网下载安装包后安装安装后输入许可证和密钥——节选自这位朋友A-J12-pedoc#455172-msk2a0m2ucvtr#48b4b7在I...原创 2021-12-24 10:56:21 · 1330 阅读 · 0 评论 -
【JVM】详解HotSpot、堆与OOM的原理并实现
目录参考文章三种JVM1.Sun HotSpot 2.BEA JRockit3.IBM J9 VM堆(Heap)堆内存的划分永久代的演变方法区与永久代/元空间Minor GC和Full GC的触发条件OOM(Out Of Memory)JVM堆常用配置参数JVM堆初始内存大小参考文章JVM系列-05-方法区-永久带VS元空间_hylexus的博客-CSDN博客_jvm方法区和元空间...原创 2021-12-23 18:26:25 · 689 阅读 · 0 评论 -
【JVM】详解虚拟机栈与栈帧
目录目录参考文章概念运行原理与栈帧组成栈帧的基本结构1.局部变量表(存储八大数据类型和对象实例的引用)2.操作数栈3.方法返回地址4.动态链接(指向运行时常量池的引用)参考文章JVM中的栈帧结构_reachwang的博客-CSDN博客_jvm栈帧结构JVM基础之栈、栈帧_JustryDeng-CSDN博客_jvm栈帧概念栈(栈内存): 作用:主管程序的运行 生命周期:和线程同步,线程结束(m...原创 2021-12-23 12:39:58 · 1415 阅读 · 0 评论 -
【JVM】Native、PC寄存器和方法区
Java Native Interface(jni)和本地方法栈这里简单提一下native我们可以看到,在Object源码中,hashCode方法的前面有一个native 出现了native关键字的,说明java的作用范围达不到了,作用是调用非Java代码的接口,比如用C或者C++实现的再回到我们的JVM体系结构我们的本地方法接口就是JNI(java native interface) 而任何本地方法接...原创 2021-12-22 19:06:42 · 300 阅读 · 0 评论 -
【JVM】类加载器与双亲委派机制
类加载器作用:加载Class文件原理:类加载器读取.class字节码文件,并将其转换成java.lang.Class类的一个实例 类加载器不是car.class,而是car.class.getClassLoader其中实例化(new)出的实例(对象),它的名字(?)是放在Java栈里的,但是具体的数据是地方在堆中的两者的地址相等,通过地址来通过引用从栈中找到对应的数据类加载器分类 1.启动类(根)加载器 Bootst...原创 2021-12-22 16:26:05 · 350 阅读 · 0 评论 -
【JVM】JVM的位置与体系结构
JVM的位置JVM本质上就是个软件, JVM上面运行的都是Java程序,JVM底层也是用C、C++写的关于JVM,JRE,JDK三者的区别和联系,在自己的文章中有详述【Java基础】详解JVM、JRE、JDK三者的区别和联系_Elephant_King的博客-CSDN博客JVM的体系结构首先要注意的是,栈里面是不可能会存在垃圾的,Java栈就是程序执行的过程,程序一开始将main方法压入栈底,然后一个方法从执行到结束,代表着他在栈中的进栈与出栈,如果在栈中出现垃圾,也就..原创 2021-12-22 11:40:42 · 591 阅读 · 0 评论