![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM教程
文章平均质量分 87
JVM教程全面讲解,从入门到入土、从理论到实践、包括更多大厂JVM面试题等
编程小吉
莫问前程几许,只顾风雨兼程,既然选择了,那就努力做下去,加油 !
展开
-
JVM运行时参数详解
JVM运行时参数1.参数选项类型2.常用参数选项3.添加参数选项1.参数选项类型以-开头的参数选项也叫作标准参数选项,这些参数比较稳定,基本不会随着JDK版本的改变而变化可以使用java -help指令在CMD命令行查看都有哪些参数选项:以-X开头的参数选项也叫作非标准参数选项,这些参数相对也比较稳定,但是可能会随着JDK版本的改变而变化可以使用java -X指令在CMD命令行查看都有哪些参数选项:以-XX开头的参数选项也叫作非标准参数选项,这些参数比较不稳定,但原创 2021-11-24 12:12:36 · 1598 阅读 · 0 评论 -
JVM监控诊断之工具使用(下篇)
JVM监控诊断工具一、Eclipse MAT工具1.基本使用2.主要功能3.注意事项4.内存泄漏(扩展)5.OQL查询语言(扩展)二、JProfiler工具1.基本概述2.主要功能3.安装配置4.基本使用三、Arthas工具1.基本概述2.解决哪些问题3.安装使用4.基本指令5.JVM相关指令6.类加载相关指令7.方法监控指令一、Eclipse MAT工具????:Memory Analyzer Tool,一款基于Eclipse的内存分析工具( 插件形式 ),是一个快速、高效、功能丰富的Java堆内存原创 2021-11-19 12:23:16 · 1673 阅读 · 0 评论 -
JVM监控诊断之工具使用(上篇)
JVM监控诊断工具1.JConsole工具2.JVisualVM工具3.JMC工具使用CMD命令行工具存在以下缺陷:????无法获取方法级别的分析数据,比如:方法之间的调用关系、方法的调用次数、方法的调用时间等。????需要用户登录到目标Java应用程序所在的宿主机进行操作。????展示的数据不够直观,很难进行理解。1.JConsole工具????:JDK自带的,用于查看Java应用程序运行期间的一些有关内存、线程、类等的监控信息,是一款基于JMX的GUI性能监控工具。基本使用原创 2021-11-19 12:22:38 · 1557 阅读 · 0 评论 -
JVM监控诊断之命令行使用
JVM监控诊断1.jps命令2.jstat命令3.jinfo命令4.jmap命令5.jhat命令6.jstack命令7.jcmd命令8.jstatd命令在刚开始学习Java的时候,我们肯定对javac和java两个命令非常熟悉。但其实在JDK中,Oracle官方还给我们提供了许多辅助命令工具,也都在安装JDK的bin目录下,这些辅助命令工具大都是用来获取JVM不同方面、不同层次的信息,帮助开发人员能够更好的解决应用程序中出现的一些疑难杂症。1.jps命令jps(Java Process Sta原创 2021-11-19 12:21:46 · 1487 阅读 · 0 评论 -
JVM调优概述
JVM调优1.调优背景2.调优依据3.调优步骤4.调优指标1.调优背景生产中的问题生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载过高时该如何处理?生产环境应该给应用分配多少线程合适?如何确定请求是否执行了某一行代码?如何实时查看某个方法的入参与返回值?为什么要调优防止出现OOM溢出解决OOM溢出问题减少Full GC的频率2.调优依据运行日志异常堆栈GC日志线程快照堆转储快照原创 2021-11-19 12:21:00 · 1269 阅读 · 0 评论 -
JVM扩展之JDK9中有关类加载器的变动
JDK9中类加载器的变动一、变动①二、变动②三、变动③四、变动④五、变动⑤六、变动⑥为了保证兼容性,JDK9没有从根本上改变三层类加载器的架构和双亲委派模型,但为了模块化系统的顺利运行,仍然发生了一些值得被注意的变动。一、变动①由于引入了模块化概念,所以不同的类加载器回去加载属于不同模块的类启动类加载器平台类加载器应用类加载器二、变动②扩展机制被移除,但是扩展类加载器由于向后兼容性的原因被保留,然后被重命名为平台类加载器Platform ClassLoader,可以通过原创 2021-11-17 12:30:50 · 1935 阅读 · 0 评论 -
JVM进阶之沙箱安全模型
沙箱安全模型1.概述2.作用3.实现1.概述沙箱是一个限制程序运行的环境,Java安全模型的核心就是Java沙箱,所有的Java程序都可以指定沙箱来运行,而且可以自定制安全策略。沙箱机制就是将Java代码限定在Java虚拟机特定的运行范围中,并且严格限制代码对本地系统资源的访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。2.作用保证程序的安全保护原生的代码3.实现JDK1.0时期将程序代码分成本地代码和远程代码两种。本地代码默认视为可信任的,可以访问一切本原创 2021-11-17 12:29:47 · 1604 阅读 · 0 评论 -
JVM进阶之双亲委派机制
双亲委派机制1.概述2.本质3.实现4.优点5.弊端6.注意细节7.破坏示例8.热替换1.概述如果一个类加载器在接收到加载类的请求时,它首先不会自己尝试去加载这个类,而是把这个请求任务委托给父加载器去完成。依次递归,如果父加载器可以完成类加载任务,就成功返回。所以只有父加载器无法完成此加载任务时,才会由自己去加载。2.本质等同于规定了类加载的顺序是:引导类加载器先加载,扩展类加载器次加载,最后才会由系统类加载器加载。3.实现双亲委派机制在java.lang.ClassLoadelr.load原创 2021-11-17 12:29:07 · 1418 阅读 · 0 评论 -
JVM进阶之自定义类加载器
自定义类加载器1.作用2.场景3.注意4.实现1.作用隔离加载类在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。修改类加载的方式类的加载模型并非强制的,应该根据实际情况在某个时间点按需进行动态加载。扩展加载源可以从数据库、网络、甚至是电视机机顶盒进行加载。防止源码泄露可以对Java源码进行编译时的加密,还原时的解密。2.场景当实现类似进程内隔离效果时,类加载器可用作不同的命名空间,以提供类似容器、模块化的效果。当应用需要从不同的数据源获取类定义信息原创 2021-11-17 12:28:38 · 1330 阅读 · 0 评论 -
JVM进阶之类加载器详解
类加载器详解一、类加载器概述1.作用2.分类3.重要性4.命名空间5.特性二、类加载器分类1.基本概述2.引导类加载器3.扩展类加载器4.系统类加载器5.自定义类加载器三、类加载器测试1.获取类加载器方式2.获取类加载器示例四、类加载器解析1.ClassLoader关继承关系图2.ClassLoader中的核心方法3.Class.forName和ClassLoader.loadClass的区别一、类加载器概述1.作用类加载器是JVM执行类加载机制的前提,它是Java的核心组件,所有的类都是由类加载器原创 2021-11-12 11:50:11 · 1216 阅读 · 0 评论 -
JVM进阶之类加载过程详解(下篇)
类加载过程详解下篇一、类的初始化阶段1.初始化方法2.初始化过程3.类初始化方法的安全性4.类初始化的使用二、类的使用阶段三、类的卸载阶段1.类、类加载器、类的实例之间的关系2.类的生命周期3.类的卸载一、类的初始化阶段1.初始化方法类的初始化是类装载的最后一个阶段,如果前面的步骤都没有问题,那么表示类可以顺利装载到系统中,此时类才会开始执行Java字节码。初始化阶段的工作是执行类的初始化方法<clinit>(),完成类中静态成员变量或者静态代码块的显式赋值。public cl原创 2021-11-12 11:49:01 · 1141 阅读 · 0 评论 -
JVM进阶之类加载过程详解(上篇)
类加载过程详解上篇一、类的生命周期二、类的加载阶段三、类的链接阶段1.进行验证(Verification)2.进行准备(Preparation)3.进行解析(Resolution)一、类的生命周期在Java中数据类型分为基本数据类型和引用数据类型,其中基本数据类型是由虚拟机预先定义的,而引用数据类型则需要进行类的加载。依据Java虚拟机规范,从字节码文件到加载到内存中的类,再到类卸载出内存,它的整个生命周期大致有七个阶段:从一个类的加载和使用过程示例上来看二、类的加载阶段原创 2021-11-12 11:48:21 · 1182 阅读 · 0 评论 -
JVM垃圾回收篇(扩展知识)
扩展知识1.垃圾收集日志分析参数2.垃圾收集日志分析示例3.垃圾收集日志分析工具4.现代垃圾收集器发展1.垃圾收集日志分析参数-XX:+PrintGC用于输出简要的GC日志信息GC、Full GC代表GC的类型Allocation Failure代表GC触发的原因,这里是由于空间不足分配失败导致的GC15339K - > 13878K代表堆空间在GC前的大小和GC后的大小58880k代表当前堆空间的总大小0.0039300 secs代表本次GC耗费的时间-XX:+P原创 2021-11-08 21:03:46 · 1126 阅读 · 0 评论 -
JVM垃圾回收篇(经典垃圾回收器讲解)
经典垃圾回收器讲解1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel垃圾收集器4.CMS垃圾收集器5.G1垃圾收集器1.基本介绍2.四大特性3.不足之处4.参数设置5.适用场景6.什么是Region?7.什么是记忆集?8.G1回收过程9.G1回收详细步骤6.垃圾收集器总结1.Serial垃圾收集器概述Serial收集器是最基本、历史最悠久的垃圾收集器了Serial收集器作为HotSpot VM中Client模式下的默认新生代垃圾收集器Serial收集器采用复制算法、串原创 2021-11-08 21:02:26 · 1277 阅读 · 0 评论 -
JVM垃圾回收篇(垃圾回收器基本概述)
垃圾回收器基本概述1.垃圾回收器分类2.垃圾回收器的性能指标3.垃圾回收器的发展史4.经典的垃圾回收器1.垃圾回收器分类按线程数分串行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过并行回收器和并发回收器串行回收器默认被应用在JVM的Client模式中,只有在JDK32位的版本中能够开启Client模式并行垃圾回原创 2021-11-08 21:01:43 · 1184 阅读 · 0 评论 -
JVM垃圾回收篇(对象引用)
对象引用1.什么是对象引用?2.强引用3.软引用4.弱引用5.虚引用6.终结器引用1.什么是对象引用?在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference) 、弱引用(Weak Reference) 和虚引用(Phantom Reference) 4种类型,并且这4种引用的强度依次逐渐减弱除强引用外,其它的引用均可以在 java.lang.ref 包中找到它们的实现类,其中只有终结器引用FinalRefe原创 2021-11-07 19:43:32 · 1203 阅读 · 0 评论 -
JVM垃圾回收篇(对象终止机制)
对象终止机制1.什么是对象终止机制?2.对象终止的注意细节3.对象的三种生命状态4.对象的回收判定过程5.对象的回收程序演示6.什么是GC Roots?1.什么是对象终止机制?Java语言提供了对象终止( finalization )机制来允许开发人员提供对象被销毁之前的自定义处理逻辑处理当垃圾回收器发现没有任何引用指向某个对象时,那么就会在垃圾回收中清除这个对象,在垃圾回收器回收此对象之前,会先调用这个对象的 finalize() 方法我们发现 finalize() 方法允许在子类中被重写,所以原创 2021-11-07 19:42:58 · 1188 阅读 · 0 评论 -
JVM垃圾回收篇(重要概念解析)
重要概念解析1.System.gc方法2.内存溢出与泄露3.Stop The World4.垃圾回收的并行与并发5.安全点与安全区域1.System.gc方法基本概述默认情况下,通过调用 System.gc() 或者 Runtime.getRuntime().gc() 方法会显式触发 Full GC的回收,然后对堆空间、方法区进行回收,尝试释放被丢弃对象所占用的内存然而System.gc()方法无法保证对垃圾收集器的调用时间,也就是说方法执行后不能确保垃圾回收过程及时执行开发者可以在某些场景原创 2021-11-07 19:42:01 · 1157 阅读 · 0 评论 -
JVM进阶之字节码指令解析(下篇)
字节码指令解析下篇一、控制转移指令1.比较指令2.条件跳转指令3.比较条件跳转指令4.多条件分支跳转指令5.无条件跳转指令二、异常处理指令1.异常抛出指令2.异常处理指令三、同步控制指令1.方法级的同步2.方法内指令序列的同步一、控制转移指令1.比较指令比较指令的作用是比较栈顶两个元素的大小,并将比较结果入栈。对于double类型的数据,指令有dcmpg、dcmpl,由于double类型的数值有可能是NaN,所以需要两种处理方式。这两个指令都从栈中弹出两个操作数,并将它们做比较,然后将比较的结原创 2021-10-28 18:48:41 · 1093 阅读 · 0 评论 -
JVM进阶之字节码指令解析(中篇)
字节码指令解析中篇一、对象的创建与访问指令1.创建指令2.字段访问指令3.数组操作指令4.类型检查指令二、方法的调用与返回指令1.方法调用指令2.方法返回指令三、操作数栈管理指令1.基本概述2.指令分类3.程序举例一、对象的创建与访问指令Java是面向对象的程序设计语言,虚拟机平台从字节码层面就对面向对象做了深层次的支持,有一系列指令专门用于对象的相关操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。1.创建指令创建对象指令接收一个指向常量池的索引的操作数,表示要创建原创 2021-10-28 18:47:41 · 1061 阅读 · 0 评论 -
JVM进阶之字节码指令解析(上篇)
字节码指令解析上篇一、加载与存储指令1.作用2.常用指令3.操作数栈4.局部变量表5.压栈指令6.入栈指令7.出栈指令二、算术指令1.基本概述2.实际类型和运算类型对应关系3.指令分类4.注意细节5.相关问题三、类型转换指令1.基本概述2.宽化类型转换3.窄化类型转换一、加载与存储指令1.作用加载和存储指令,用于将数据从栈帧的局部变量表和操作数栈之间来回传递。2.常用指令局部变量入栈指令:将一个局部变量加载到操作数栈,比如iload、fload、iload_常量入栈指令:将一个常量加载到操作数原创 2021-10-28 18:46:36 · 1059 阅读 · 0 评论 -
JVM进阶之字节码指令概述
字节码指令概述1.基本介绍2.执行模型3.数据类型4.指令分类1.基本介绍Java字节码指令对于虚拟机,就好比汇编语言对于计算机,都属于基本执行指令。Java字节码指令由一个字节长度的、代表着某种特定操作含义的数字(也称为操作码)以及跟随其后的0个或多个代表此操作所需的参数(也称为操作数)共同构成。由于JVM采用面向操作数栈而不是寄存器的结构,所以我们发现大多数的字节码指令都不包含操作数,只有一个操作码。由于Java字节码指令中操作码的长度为一个字节,也就意味着指令集的操作码总数不可能超过256原创 2021-10-27 22:37:11 · 1124 阅读 · 0 评论 -
JVM进阶之字节码文件解析指令
字节码文件解析指令1.javac指令2.javap指令1.javac指令使用javac命令可以将源代码文件编译成字节码文件,然后就可以查看代码中的详细结构。对于命令行的方式而言,我们可以使用javac xx.java或者javac -g xx.java进行编译,只不过后者会比前者多生成局部变量表等信息,默认情况下Eclipse、IDEA等集成开发环境在编译时都采用的后者。2.javap指令通过对生成的字节码文件进行反编译,我们可以深入的了解Java代码的工作机制,Oracle官方也提供了工原创 2021-10-27 22:36:45 · 1372 阅读 · 0 评论 -
JVM垃圾回收篇(垃圾回收算法)
垃圾回收算法1.垃圾回收的两个阶段2.垃圾标记算法之引用计数算法3.垃圾标记算法之可达性分析法4.垃圾清除算法之标记清除算法5.垃圾清除算法之复制算法6.垃圾清除算法之标记压缩算法7.垃圾清除算法总结8.其它收集算法1.分代收集算法2.增量收集算法3.分区收集算法1.垃圾回收的两个阶段垃圾标记阶段在堆空间里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空原创 2021-10-11 10:13:39 · 1651 阅读 · 0 评论 -
JVM垃圾回收篇(基本概述)
基本概述1.什么是垃圾?2.什么是垃圾回收?3.常见的垃圾回收问题?4.为什么需要垃圾回收?5.什么是垃圾回收机制?1.什么是垃圾?垃圾是指在运行程序的过程中出现了没有任何指针指向的对象,这个对象就是需要被回收的垃圾如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占的内存空间会一直保留到应用程序结束,那么这些被保留的空间就无法被其他对象使用,甚至可能导致内存溢出垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生垃圾收集机制是Jav原创 2021-10-11 10:13:06 · 1001 阅读 · 0 评论 -
JVM进阶之字节码文件结构
字节码文件结构1.文件格式2.文件结构官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html1.文件格式任何一个Class文件都对应着唯一的一个类或一个接口的定义信息,Class文件是一组由8位字节为基本单位的二进制流。Class文件的格式不像XML等语言,它没有任何分隔符号。无论是字节的顺序还是数量,都是被严格限定的,也就是说哪个字节代表什么含义、长度是多少、先后顺序如何,都是不允许改变。Class文件的格式采原创 2021-10-10 23:25:43 · 1270 阅读 · 1 评论 -
JVM进阶之字节码文件概述
字节码文件概述1.字节码文件的跨平台性2.前端编译器与后端编译器3.从字节码角度分析程序4.字节码文件解读的方式1.字节码文件的跨平台性Java语言被称为跨平台的语言,当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译。但现如今很多语言,如:Python、PHP、 Perl、Ruby、 Lisp,几乎都具有跨平台的特性。Java虚拟机被称为跨语言的平台,它只与“.class”这种特定的二进制文件有所关联,所以无论使用何种语言进行开发,只要我们将源代码正确编译成虚拟机原创 2021-10-10 23:15:30 · 1039 阅读 · 0 评论 -
JVM字符串常量池篇(String进阶讲解)
String进阶讲解1.拼接操作2.拼接原理3.intern方法4.垃圾回收程序示例5.去重处理1.拼接操作如果是常量与常量的拼接,原理就是在编译器期间进行的public void test1(){ String s1 = "a" + "b" + "c"; String s2 = "abc"; System.out.println(s1 == s2); // true System.out.println(s1.equals(s2)); // true}原创 2021-10-05 11:17:31 · 1230 阅读 · 0 评论 -
JVM字符串常量池篇(String基础讲解)
String基础讲解1.相关介绍2.基本特性3.内存分配4.程序示例1.相关介绍通过字面量的方式( 不同于new的方式 )给一个字符串赋值,此时的字符串值声明在字符串常量池中字符串常量池中是不会存储相同内容的字符串的字符串常量池是一个固定大小的 Hashtable,默认值大小长度是1009。如果字符串常量池中的String非常多, 就会造成Hash冲突严重,从而导致链表会很长,而链表过长会直接影响String.intern方法的使用性能String.intern,就是判断当前字符串是原创 2021-10-05 11:17:01 · 1523 阅读 · 0 评论 -
JVM本地方法接口
本地方法接口1.本地方法2.本地接口3.为什么使用本地方法?4.当前发展现状1.本地方法Native Method就是一个Java调用非Java代码的接口Native Method方法的实现由非Java语言实现,而是由诸如C或C++语言实现Native Method方法的定义并不提供实现体,有些像Java中的抽象方法,因为其实现体是由非Java语言在外面实现的2.本地接口本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合 C/C++ 程序。3.为什么使用本地方法?Ja原创 2021-10-05 11:16:07 · 1018 阅读 · 0 评论 -
JVM执行引擎篇(解释器与编译器)
解释器与编译器1.编译和执行的过程2.编译器和解释器3.解释器详解4.编译器详解5.执行方式设置1.编译和执行的过程大部分的程序源代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经历如下步骤代码编译由Java源码编译器javac完成代码执行由Java虚拟机执行引擎完成2.编译器和解释器解释器当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行编译器就是虚拟机将源代码直接原创 2021-10-02 11:00:43 · 1067 阅读 · 0 评论 -
JVM执行引擎篇(基本概述)
基本概述1.什么是执行引擎?2.工作原理3.相关概念1.什么是执行引擎?执行引擎是Java虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价原创 2021-10-02 11:00:17 · 960 阅读 · 0 评论 -
JVM运行时数据区篇(有关对象的扩展知识)
有关对象的扩展知识1.对象的实例化2.对象的内存布局3.对象的访问定位4.什么是直接内存1.对象的实例化对象的创建方式使用new关键字:也是最常见的方式、包括单例模式创建的、工厂模式创建的、构造者模式创建的使用Class的newInstance方法:反射的方式,只能调用空参的构造器,权限必须是public使用Constructor的newInstance方法: 反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone:不调用任何构造器,当前类需要实现Cloneable接口使用反原创 2021-10-02 10:59:44 · 891 阅读 · 0 评论 -
JVM运行时数据区篇(方法区进阶掌握)
方法区进阶掌握1.方法区的内部结构1.类型信息2.域信息3.方法信息4.静态变量5.常量池6.运行时常量池2.方法区的调用过程示例3.方法区的演进细节4.方法区的垃圾回收1.方法区的内部结构1.类型信息JVM必须在方法区保存类的信息,类型种类包括( 类class、接口interface、枚举enum、注解annotation )类型的完整有效名称类型的直接父类的完整有效名称类型的修饰符类型的接口有序列表2.域信息JVM必须在方法区中保存类型的所有域的相关信息以及域的声明顺序原创 2021-09-15 13:30:53 · 964 阅读 · 0 评论 -
JVM运行时数据区篇(方法区基本概述)
方法区基本概述1.堆、栈、方法区之间的关系2.什么是方法区?3.方法区的演进4.方法区内存大小设置5.方法区溢出过程示例1.堆、栈、方法区之间的关系从线程共享与否的角度来看从三者交互关系的角度来看2.什么是方法区?JVM规范中表明:尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。对于 HotSpot VM 而言,方法区还有一个别名叫做Non-heap( 非堆 ),目的就是要和堆分开。所以方法区可以看作是一块独立于Java堆的一块原创 2021-09-15 13:30:24 · 928 阅读 · 0 评论 -
JVM运行时数据区篇(堆空间扩展知识)
堆空间扩展知识1.堆空间常见参数设置2.堆空间私有缓存区域TLAB3.堆空间是分配对象的唯一选择吗?4.什么是逃逸分析?5.基于逃逸分析进行的优化策略1.栈上分配2.同步省略3.标量替换6.逃逸分析总结1.堆空间常见参数设置参数名参数含义-XX:PrintFlagsInitial查看所有可设置参数的默认初始值-XX:PrintFlagsFinal查看所有可设置参数的最终值( 显示修改后的 )-Xms设置堆空间内存的初始值-Xmx设置堆空间内存的最大值-原创 2021-09-13 22:44:58 · 1305 阅读 · 0 评论 -
JVM运行时数据区篇(堆空间进阶掌握)
堆空间进阶掌握1.堆中对象分配的一般过程2.堆中对象分配代码示例3.堆中垃圾回收器常见种类4.堆中垃圾回收器触发机制5.堆中垃圾回收代码示例6.堆中对象分代的思想7.堆中对象分配的策略1.堆中对象分配的一般过程为新对象分配内存是件非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配的问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收后是否会在内存空间中产生内存碎片。首先把新生成的对象放在伊甸园区当伊甸园的空间满时,就会触发JVM的垃原创 2021-09-13 22:44:25 · 929 阅读 · 0 评论 -
JVM运行时数据区篇(堆空间基本概述)
堆空间基本概述1.什么是堆空间?2.堆存储程序示例3.堆的内存结构4.堆的内存设置5.堆空间的分代1.什么是堆空间?一个Java程序进程对应一个JVM实例、一个运行时数据区( Runtime类 ),同时又包含多个线程,这些线程共享唯一的方法区和堆空间,每个线程又包含了程序计数器、本地方法栈和虚拟机栈每一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域堆区在JVM启动的时候就被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间堆内存的大小是可以调节的JVM规范表明,堆可以原创 2021-09-13 22:43:49 · 958 阅读 · 0 评论 -
JVM运行时数据区篇(本地方法栈)
JVM运行时数据区篇1.什么是本地方法栈?2.有什么作用?3.扩展知识1.什么是本地方法栈?本地方法栈是线程私有的本地方法栈和JVM栈相同,也是允许栈的内存大小可以是固定的或者是可动态拓展的,在内存溢出方面是相同的本地方法栈中记录使用到的本地方法,本地方法是使用C语言实现的,在执行引擎执行时加载本地方法库,调用对应的本地方法2.有什么作用?Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用3.扩展知识当某个线程调用一个本地方法时,它就进入了一个全新的并且不再原创 2021-09-02 15:58:23 · 990 阅读 · 0 评论 -
JVM运行时数据区篇(虚拟机栈帧结构)
JVM运行时数据区篇一、局部变量表1.什么是局部变量表?2.注意细节3.程序演示4.什么是变量槽?5.变量有哪些分类?二、操作数栈1.什么是操作数栈?2.有什么作用?3.注意细节4.过程举例5.涉及的问题6.涉及的技术三、动态链接1.什么是动态链接?2.方法调用机制3.方法调用指令4.invokedynamic指令详解5.什么是虚方法和非虚方法?6.什么是动态类型语言和静态类型语言?7.什么是虚方法表?8.了解方法重写的本质四、本地返回地址1.有什么作用?2.方法退出的方式3.方法正常退出4.方法异常退出五原创 2021-08-25 19:36:26 · 1075 阅读 · 0 评论