![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
文章平均质量分 87
HotSpot VM
root_zhb
这个作者很懒,什么都没留下…
展开
-
中篇_3_双亲委派
三次双亲委派机制的破坏以及简单热部署代码原创 2022-03-04 16:01:58 · 412 阅读 · 0 评论 -
中篇_2_class文件结构
class文件结构、IDEA集成jclasslib说明Class文件信息原创 2022-02-07 16:17:15 · 153 阅读 · 0 评论 -
中篇_1_字节码文件的跨平台性、前端编译器、字节码指令(代码、概念、解读)
class文件结构概述1、字节码文件的跨平台性2、前端编译器 VS 后端编译器3、字节码指令3.1、三个案例①、整数范围②、字符串拼接创建几个变量③、类的继承3.2、基本概念①、什么是字节码文件?②、什么是字节码指令(byte code)?3.3、如何解读1、字节码文件的跨平台性Java语言:跨平台的语言当Java源代码成功编译为字节码后,如果想在不同的平台上运行,则无须再次编译这个优势不再那么吸引人了。Python PHP perl ruby lisp等有强大的解释器跨平台似乎已经快成为一门原创 2022-01-04 16:53:16 · 2519 阅读 · 0 评论 -
17_3_垃圾回收器_日志分析和垃圾回收器的发展
GC日志分析1、常用参数详解2、GC 日志补充说明3、常用日志分析工具4、垃圾回收器的发展1、常用参数详解通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略。内存分配与垃圾回收的参数列表-XX:+PrintGC :输出GC日志。类似:-verbose:gc-XX:+PrintGCDetails :输出GC的详细日志-XX:+PrintGCTimestamps :输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDatestamps :输出GC的时间戳(以日期的形式,如2原创 2021-09-10 13:27:24 · 102 阅读 · 0 评论 -
17_2_垃圾收集器_简介G1回收器:区域化分代式
简介G1回收器1、什么是G1垃圾收集器2、为什么名字叫Garbage First呢?3、G1垃圾收集器的优点、缺点4、参数设置5、G1调优操作步骤6、分区 Region(掌握)7、记忆集与写屏障(一个对象被不同区域引用的问题)8、G1回收过程8.1、年轻代8.2、并发标记过程8.3、混合回收8.4、FUll GC9、优化建议1、什么是G1垃圾收集器G1是区域化的分代式垃圾收集器,为需要低GC延迟,并具有大堆的应用程序提供解决方案。G1主要是面向服务端应用,针对配备多核CPU及大容量内存的机器,以极高原创 2021-09-10 09:49:46 · 270 阅读 · 0 评论 -
17_1_垃圾回收器_GC分类与性能指标、概述、Serial、ParNew、Parallel、CMS、面试
垃圾回收器1、GC分类与性能指标1.1、GC分类1.2、评估GC的性能指标2、不同的垃圾回收器概述2.1、垃圾回收器的发展2.2、7款经典的垃圾收集器及其与垃圾分代的关系2.3、垃圾收集器的组合关系2.4、查看默认的垃圾回收器3、Serial、SerialOld 回收器:串行回收(了解)4、ParNew回收器:并行回收(了解)5、Parallel、ParallelOld:吞吐量优先6、CMS回收器:低延迟 1、GC分类与性能指标1.1、GC分类按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和原创 2021-09-08 14:29:46 · 556 阅读 · 0 评论 -
16_垃圾回收相关概念
垃圾回收相关概念1、System.gc()的理解2、内存溢出与内存泄漏3、Stop The World4、垃圾回收的并行与并发5、安全点和安全区域6、引用6.1、强引用:不回收6.2、软引用:内存不足即回收6.3、弱引用:发现即回收6.4、虚引用:对象回收跟踪6.5、终结器引用1、System.gc()的理解在默认情况下,通过System.gc() 或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然原创 2021-09-06 11:25:27 · 123 阅读 · 0 评论 -
14_15_概述及垃圾回收相关算法
概述及垃圾回收相关算法1、概述2、标记阶段:引用计数法3、标记阶段:可达性分析算法4、finalization机制4.1、finalization机制说明4.2、不主动调用 finalize() 方法的三点原因4.3、虚拟机中对象可能的三种状态4.4、判定对象是否可回收的两次标记过程4.5、代码演示5、MAT与JProfiler的GC Roots溯源6、清除阶段:标记-清除算法7、清除阶段:复制算法8、清除阶段:标记-压缩算法9、小结(三种清除算法对比)10、分代收集算法11、增量收集算法12、分区算法1原创 2021-08-30 14:44:58 · 113 阅读 · 0 评论 -
13_StringTable
StringTable1、String的基本特性1.1、存储结构变更,从 char[] 到 byte[]1.2、不可变性1.3、字符串常量池中不会存储相同内容的字符串2、String的内存分配(从JDK6方法区到JDK7堆中)3、String的基本操作3.1、程序1——字符串常量池中不允许放相同的字符串3.2、程序2——栈帧、堆、字符串常量池4、字符串的拼接操作5、intern()的使用5.1、new String("ab")会创建几个对象?5.2、new String("a") + new String(原创 2021-08-26 19:45:57 · 107 阅读 · 0 评论 -
12_执行引擎
java是半解释半编译型语言橙色部分:javac编译器(前端编译器)完成,最终形成线性的字节码指令流(此部分和JVM无关)。绿色部分:半解释蓝色部分:半编译解释器:编译器:原创 2021-08-25 10:13:40 · 107 阅读 · 0 评论 -
11_直接内存
直接内存1、概述2、代码3、OOM与内存大小设置4、优缺点1、概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域直接内存是Java堆外的、直接向系统申请的内存区间来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高.因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区2、代码/** * IO原创 2021-08-21 23:47:01 · 369 阅读 · 2 评论 -
10_对象的实例化内存布局与访问定位
对象的实例化内存布局与访问定位1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤(字节码角度)1.3、创建对象的步骤(执行角度)2、对象的内存布局3、对象的访问定位3.1、句柄访问3.2、直接指针3.3、优缺点总结1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤(字节码角度)1.3、创建对象的步骤(执行角度)2、对象的内存布局3、对象的访问定位3.1、句柄访问3.2、直接指针3.3、优缺点总结...原创 2021-08-21 19:49:35 · 81 阅读 · 0 评论 -
9_方法区
方法区1、方法区概述2、方法区内部结构3、方法区的演进细节4、设置方法区的大小5、常量池和运行时常量池6、如何证明静态变量的存在7、方法区的垃圾回收1、方法区概述2、方法区内部结构3、方法区的演进细节4、设置方法区的大小5、常量池和运行时常量池6、如何证明静态变量的存在7、方法区的垃圾回收...原创 2021-08-08 19:19:02 · 133 阅读 · 0 评论 -
8_堆
堆1、堆的核心概述2、设置堆内存大小与OOM3、年轻代与老年代4、图解对象分配过程5、Minor GC、Major GC、Full GC6、堆空间分代思想7、内存分配策略8、为对象分配内存:TLAB9、小结堆空间的参数设置10、堆是分配对象的唯一选择吗1、堆的核心概述2、设置堆内存大小与OOM3、年轻代与老年代4、图解对象分配过程5、Minor GC、Major GC、Full GC6、堆空间分代思想7、内存分配策略8、为对象分配内存:TLAB9、小结堆空间的参数设置10、堆是分配对象的原创 2021-07-14 23:18:54 · 115 阅读 · 0 评论 -
6_7_本地方法接口、本地方法栈
目录1、本地方法接口1.1、什么是本地方法1.2、为什么要用1.3、现状2、本地方法栈1、本地方法接口1.1、什么是本地方法一个Native Method 就是一个java调用非Java代码接口 。“A native method is a Java Method whose implementation is provided by non-java code.”标识符native可以与所有其它的java标识符连用,但abstract除外。1.2、为什么要用与java环境外交互有时候Ja原创 2021-06-26 20:27:20 · 76 阅读 · 1 评论 -
5_虚拟机栈
虚拟机栈1、概述2、栈的存储单位3、局部变量表4、操作数栈5、代码追踪6、栈顶缓存技术7、动态链接8、方法的调用:解析与分派9、方法返回地址10、一些附加信息11、栈的相关面试题1、概述2、栈的存储单位3、局部变量表4、操作数栈5、代码追踪6、栈顶缓存技术7、动态链接8、方法的调用:解析与分派9、方法返回地址10、一些附加信息11、栈的相关面试题...原创 2021-06-13 18:25:07 · 185 阅读 · 0 评论 -
4_程序计数器
程序计数器(PC寄存、程序钩子)1、简介2、面试问题3、CPU时间片1、简介JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用 :存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令如果执行的是一个Native方法,那这个计数器是undefined线程私有;无GC;无OOM2、面试问题使用PC寄存器存储字节码指令地址有什么用呢? 为什么使用PC寄存器记录当前线程的执行地址呢?因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继原创 2021-06-13 18:14:43 · 82 阅读 · 0 评论 -
3_运行时数据区概述
运行时数据区1、概述+目录2、共享或私有3、GC和OOM4、两个问题1、概述+目录内存是硬盘和CPU的中间仓库和桥梁。不同的JVM对于内存的划分方式和管理机制存在部分差异(典型:方法区)一份JVM对应一个Runtime类实例,对应一份运行时数据区。2、共享或私有多线程共享:方法区和堆单个线程私有:PC寄存器(程序计数器)、虚拟机栈、本地方法栈3、GC和OOMPC寄存器既无GC,也无OOM栈无GC,可能OOM堆、方法区有GC,可能OOM4、两个问题为什么栈不用垃圾回原创 2021-06-12 23:32:30 · 77 阅读 · 0 评论 -
2_类加载子系统
文章目录类加载过程类加载器及其分类和测试ClassLoader源码剖析双亲委派机制沙箱安全机制1、类加载过程在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载加载(Loading)通过类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中(堆)生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口 类将.class文件加载原创 2021-06-12 00:00:22 · 1165 阅读 · 2 评论 -
1_整体概述
文章目录整体结构详细结构架构模型JVM生命周期1、整体结构Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。jvm是运行在操作系统之上的,与硬件没有直接交互。方法区和堆,多线程共享的java栈、本地方法栈、程序计数器,每个线程独一份2、详细结构3、架构模型4、JVM生命周期启动通过引导类加载器(Bootstrap class loader)创建一个初始类(initial class)完成。初始类由虚拟机的具体实原创 2021-06-11 16:31:23 · 1074 阅读 · 2 评论