![](https://img-blog.csdnimg.cn/0f259f36826447799e115c27f7202e8f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM系列
文章平均质量分 93
JVM相关的知识点
后端技术那点事
这个作者很懒,什么都没留下…
展开
-
java垃圾回收机制
java垃圾回收机制:1、内存泄漏和内存溢出的区别:内存溢出:本质是指内存不足,内存泄漏:是指内存充足,但使用之后,并没有及时的去释放资源。2、gc线程关闭的方式(1)、进程关闭(2)、system.exit()(3)、程序中断(4)、程序代码执行完毕注意:gc线程关闭后,并不会立即消失3、垃圾回收机制算法(1)、引用计数法 给对象添加一个引用计数器,每当有一个地方引用...原创 2019-08-25 20:48:39 · 107 阅读 · 0 评论 -
JVM系列之故障排查与性能调优(重点)
JVM性能排查原创 2022-05-17 13:45:08 · 1672 阅读 · 0 评论 -
JVM系列之Class文件结构、字节码指令集
1、Class文件结构Java语言:跨平台的语言(write once,run anywhere),当Java源代码成功编译成字节码后,如果想在不同的平台上面运行, 则无须再次编译,这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的解释器,跨平台似乎已经快成为一门语言必选的特性Java虚拟机:跨语言的平台Java虚拟机不和包括Java在内的任何语言绑定,它只与.class文件这种特定的二进制文件格式所关联,无论使用何种语言进行软件开发, 只要能将源文件编译为正确的.原创 2022-05-16 16:33:32 · 623 阅读 · 0 评论 -
JVM系列之垃圾回收器
1、垃圾回收器如果说垃圾收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者1.1、GC分类与性能指标1.1.1、垃圾回收器分类1.1.1.1、按垃圾回收线程数(串行和并行)串行垃圾回收器:串行回收指同一个时间段内,只允许一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直到垃圾收集工作结束,在单CPU处理器或者较小应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的client模式下的JVM中,在并发能力比较强的原创 2022-05-16 14:12:40 · 508 阅读 · 0 评论 -
JVM系列之垃圾回收算法
1、JVM垃圾回收1.1、垃圾回收概述Java和c++在内存方面的区别(内存动态分配、垃圾自动回收)1.1.1、垃圾回收技术需要考虑的三个基本问题哪些内存需要回收?什么时候需要回收内存?如何回收内存?1.1.2、什么是垃圾垃圾是指运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾,如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占用的内存空间会一直保留直到应用程序结束,被保留的空间无法被其他对象使用,最终甚至可能导致内存溢出。1.1.3、需要回收的内存区域回收的区域原创 2022-05-16 00:52:54 · 1769 阅读 · 0 评论 -
JVM系列之HotSpot虚拟机对象、字节码执行引擎、StringTable
1、对象的实例化、内存布局与对象的访问定位1.1、对象的实例化1.1.1、创建对象的方式new :最常见的方式,变形:Xxx的静态方法,XxxBuilder/XxxFactory的静态方法Class的newInstance:JDK9标记过时,反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance:反射的方式,可以调用空参,带参的构造器,权限没有要求使用clone:不调用任何构造器,当前类需要实现Cloneable接口,实现clone()方法使用原创 2022-05-15 14:50:42 · 443 阅读 · 0 评论 -
JVM系列之运行时数据区
1、运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域虚拟机栈、堆内存、程序计数器、方法区、本地方法栈虚拟机栈、本地方法栈、程序计数器为线程私有方法区、堆内存为线程共享1.1、程序计数器(Program Counter R原创 2022-05-14 23:47:21 · 1233 阅读 · 0 评论 -
JVM系列之类加载子系统
1、类加载器与类的加载过程1.1、类加载器1.1.1、类加载器子系统的作用负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识,魔术,CA FA BA BEClassloader只负责class文件的加载,至于是否可运行,则由执行引擎决定加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射),常量池运行时加载到内存中,即运行时常量池原创 2022-05-14 13:44:47 · 220 阅读 · 0 评论 -
JVM系列之性能调优案例
1、调优基本问题1.1、为什么要调优?删除线格式 防止出现OOM,进行JM规划和预调优解决程序运行中各种OOM减少Full GC出现的频率,解决运行慢、卡顿问题1.2、调优的大方向合理地编写代码充分并合理的使用硬件资源合理地进行JVM调优1.3、不同阶段的考虑上线前项目运行阶段线上出现OOM1.4、调优监控的依据运行日志异常堆栈GC日志线程快照堆转储快照1.5、性能优化的步骤1.5.1、第1步:熟悉业务场景1.5.2、第2步(发现问题)︰性能监控一原创 2022-04-13 23:39:46 · 1068 阅读 · 1 评论 -
程序计数器(PC寄存器)
1、程序计数器的介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对屋里PC寄存器的一种抽象模拟。2、程序计数器的作用PC寄存器是用来存储指向下一条指令的地址,也即将将要执行的指令代码。由执行引擎读取下一条指令。它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域在jvm规范中,每个线程都有它自己的程序计数器,是原创 2021-05-19 23:12:45 · 3205 阅读 · 0 评论 -
JVM之类加载器与类加载子系统
1、JVM的架构图2、类加载子系统2.1、类加载子系统的作用类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识;ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)2.2、类加载子系统的流程类加载子系统的原创 2021-05-19 21:37:54 · 281 阅读 · 4 评论 -
AQS 源码详解
AQS 源码详解1、可重入锁可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的的内层方法会自动获取锁(前提是锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。可重入锁的种类:隐式锁:在使用的时候不需要去手动释放锁(即synchronized关键字使用的锁)默认是可重入锁。显式锁:使用的时候需要去释放锁(即Lock)也有ReentrantLock原创 2021-04-09 22:43:01 · 986 阅读 · 0 评论 -
JVM知识详解
JVM1、JVM内存结构1.1、JVM体系概述1.2、常见的垃圾回收算法引用计数法顾名思义,此种算法会在每一个对象上记录这个对象被引用的次数,只要有任何一个对象引用了次对象,这个对象的计数器就+1,取消对这个对象的引用时,计数器就-1。任何一个时刻,如果该对象的计数器为0,那么这个对象就是可以回收的。优点:引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。缺点:无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,原创 2021-04-08 19:00:42 · 351 阅读 · 0 评论