![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
JVM 学习笔记
Orcas阿晨
咸鱼的挣扎
展开
-
字节码与类的加载——(四)再谈类的加载器
文章目录4_再谈类的加载器4.1_概述4.1.1_类加载的分类4.1.2_类加载器的必要性4.1.3_命名空间4.1.4_类加载价值的基本特征4.2_类的加载器分类4.2.1_引导类加载器4.2.2_扩展类加载器4.2.3_系统类加载器4.2.4_用户自定义类加载器4.2.5_JDK 1.9 后的类加载器4.3_测试不同的类加载器4.4_ClassLoader源码解析4.4.1_ClassLoader 的主要方法4.4.2_SecureClassLoader 与 URLClassLoader(Builtin原创 2020-11-26 17:15:19 · 635 阅读 · 3 评论 -
字节码与类的加载——(三)类的加载过程(生命周期)详解
文章目录3_类的加载过程(生命周期)详解3.1_概述3.2_① Loading(加载)阶段3.2.1_加载完成的操作3.2.2_二进制流的获取方式3.2.3_类模型与 Class 实例的位置3.2.4_数组类的加载3.3_② Linking(链接)阶段3.3.1_环节1:链接阶段之 Verification(验证)3.3.2_环节2:链接阶段之 Preparation(准备)3.3.3_环节3:链接阶段之 Resolution(解析)3.4_③ Initialization(初始化)阶段3.4.1_stat原创 2020-11-13 18:15:49 · 702 阅读 · 0 评论 -
字节码与类的加载——(二)字节码指令集与解析举例
文章目录2_字节码指令集与解析举例2.1_概述2.1.1_执行模型2.1.2_字节码与数据类型2.1.3_指令分类2.2_加载与存储指令2.2.0_再谈操作数栈与局部变量表操作数栈(Operand Stacks)局部变量表(Local Variables)2.2.1_局部变量压栈指令2.2.2_常量入栈指令2.2.3_出栈装入局部变量表指令2.3_算术指令2.3.1_所有算术指令2.3.2_比较指令的说明2.4_类型转换指令2.4.1_宽化类型转换2.4.2_窄化类型转换2.5_对象的创建与访问指令2.5.原创 2020-11-08 16:46:48 · 585 阅读 · 0 评论 -
字节码与类的加载——(一)Class 文件结构
文章目录1_Class 文件结构1.1_字节码文件概述1.1.1_字节码文件的跨平台性1.1.2_Java 的前端编译器1.1.3透过字节码指令看代码细节BAT 面试题代码举例1.2_虚拟机的基石:Class 文件1.3_Class 文件结构1.3.1_魔术:Class 文件的标志1.3.2_Class 文件版本号1.3.3_常量池:存放所有常量常量池计数器常量池表字面量和符号引用常量类型和结构总结1.3.4_访问标识1.3.5_类索引、父类索引、接口索引集合this_class(类索引)super_cla原创 2020-10-30 17:02:32 · 767 阅读 · 3 评论 -
内存与垃圾回收——(十三)垃圾回收器展望
文章目录13_垃圾回收器展望13.1_垃圾回收器的新发展13.2_JDK 11 起增加的 GC13.3_其他垃圾回收器 AliGC13_垃圾回收器展望13.1_垃圾回收器的新发展GC 仍然处于飞速发展之中,目前的默认选项 G1 GC 在不断的进行改进。很多我们原来认为的缺点,例如串行的 Full GC、Card Table 扫描的低效等,都已经被大幅改进。例如,JDK 10 以后,Full GC 已经是并行运行,在很多场景下,其表现还略优于 Parallel GC 的并行 Full GC 实现。原创 2020-10-31 12:43:11 · 183 阅读 · 0 评论 -
内存与垃圾回收——(十二)GC 日志分析
文章目录12_GC 日志分析12.1_GC 常用参数12.2_日志补充说明12.3_举例解读日志中堆空间数据12.4_日志分析工具12_GC 日志分析12.1_GC 常用参数通过阅读 GC 日志,我们可以了解 Java 虛拟机内存分配与回收策略。内存分配与垃圾回收的参数列表-XX:+PrintGC 输出 GC 日志 (-Xlog:gc*)。类似: -verbose:gc-XX:+PrintGCDetails 输出 GC 的详细日志-XX:+PrintGCTimeStamps 输出 GC 的时间原创 2020-10-31 12:42:48 · 358 阅读 · 0 评论 -
内存与垃圾回收——(十一)垃圾回收器
文章目录11_垃圾回收器11.1_GC 分类与性能指标垃圾回收期的分类评估 GC 的性能指标11.2_不同垃圾回收器概述垃圾回收器发展史七款经典的垃圾收集器七款经典的垃圾收集器与垃圾分代之间的关系垃圾回收器的组合关系查看默认的垃圾收集器11.3_Serial 回收器:串行回收11.4_ParNew 回收器:并行回收11.5_Parallel 回收器:吞吐量优先11.6_CMS 回收器:低延迟11.7_G1回收器:区域化分代式 ☆G1 基本介绍G1 垃圾回收器的优缺点G1 参数设置G1 回收器的常见操作步骤G原创 2020-10-31 12:42:25 · 261 阅读 · 0 评论 -
内存与垃圾回收——(十)垃圾回收相关算法
文章目录10_垃圾回收相关算法10.1_标记阶段引用计数算法可达性分析算法10.2_对象的 finalization 机制10.3_MAT 与 JProfiler 的 GC Roots 溯源10.4_清除阶段标记 - 清除算法复制算法标记-压缩(整理)算法三种算法对比分代收集算法增量收集算法分区算法(G1 回收器)10_垃圾回收相关算法10.1_标记阶段对象存活判断在堆里存放着几乎所有的 Java 对象实例,在 GC 执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象原创 2020-10-31 12:42:12 · 154 阅读 · 0 评论 -
内存与垃圾回收——(九)垃圾回收相关概念
文章目录9_垃圾回收相关概念9.1_垃圾回收概述9.2_System.gc() 的理解9.3_内存溢出与内存泄露内存溢出(Out Of Memory)内存泄露(Memory Leak)9.4_Stop The World9.5_垃圾回收的并行与并发程序中并发(Concurrent)程序的并行(Parallel)垃圾回收的并行与并发9.6_安全点与安全区域9.7_引用(强、软、弱、虚)强引用:不回收弱引用:内存不足即回收弱引用: 发现即回收虚引用: 对象回收跟踪终结器引用9_垃圾回收相关概念9.1_垃圾原创 2020-10-30 17:42:00 · 346 阅读 · 1 评论 -
内存与垃圾回收——(八)字符串常量池 StringTable
文章目录8_字符串常量池 StringTable8.1_String 的基本特性8.2_String 的内存分配8.3_String 的拼接操作拼接操作与 append 的效率对比8.4_intern() 的使用new String("ab")会创建几个对象?new String("a") + new String("b")呢?intern()intern() 的空间效率测试8.5_StringTable 的垃圾回收8.6_G1 的 String 去重操作8_字符串常量池 StringTable8.1_原创 2020-10-30 17:40:28 · 1421 阅读 · 0 评论 -
内存与垃圾回收——(七)本地方法接口
文章目录7_本地方法接口7.1_简介7.2_使用Native Method的原因7_本地方法接口7.1_简介一个Native Method就是一个Java调用非Java代码的接口。本地方法接口:该方法的底层实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern "C" 告知C++ 编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是原创 2020-10-30 17:38:13 · 147 阅读 · 0 评论 -
内存与垃圾回收——(六)执行引擎
文章目录6_执行引擎6.1_概述6.2_机器码、指令、汇编6.4_解释器 Interpreter6.5_即时编译器 JIT Compiler6.6_热点代码及探测方式6.7_解释器仍存在的意义6.8_HotSpot VM 设置程序执行方式6.9_HotSpot VM 中的JIT分类6_执行引擎6.1_概述执行引擎是 Java 虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的。原创 2020-10-30 17:35:40 · 114 阅读 · 0 评论 -
内存与垃圾回收——(五)直接内存
文章目录5_直接内存5.1_概述5.2_非直接缓冲区与直接缓冲区5.3_直接内存异常OOM5.4_参数设置5_直接内存元空间使用的是直接内存(Direct Memory)。5.1_概述直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是 Java 堆外的、直接向系统申请的内存区间。直接内存来源于 NIO,通过存在堆中的 DirectByteBuffer 操作Native 内存。通常,访问直接内存的速度会优于Java堆,即读写性能高原创 2020-10-30 17:34:23 · 230 阅读 · 0 评论 -
内存与垃圾回收——(四)对象的实例化内存布局与访问定位
文章目录4_对象的实例化内存布局与访问定位4.1_ 对象的实例化4.2_对象的内存布局4.3_对象的访问定位4_对象的实例化内存布局与访问定位4.1_ 对象的实例化创建对象的步骤1.判断对象对应的类是否加载、链接、初始化虚拟机遇到一条 new 指令,首先去检查这个指令的参数能否在 Metaspace 的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以 ClassLoad原创 2020-10-30 17:32:54 · 142 阅读 · 1 评论 -
内存与垃圾回收——(三)运行时数据区
文章目录3_运行时数据区3.1_运行时数据区内部结构3.2_JVM中的线程3.3_程序计数器(PC寄存器)√3.4_Java虚拟机栈 √虚拟机栈的特点栈中常见异常设置栈的大小`-Xss`3.4.2_栈的存储单位与结构3.5_栈帧3.5.1_栈帧的内部结构3.5.2_局部变量表 ☆(Local Variables)Slot变量槽补充3.5.3_操作数栈 ☆(Operand Stack)3.5.4_栈顶缓存技术(Top-of-Stack Cashing)3.5.5_动态链接(Dynamic Linking)虚方原创 2020-10-30 17:30:38 · 465 阅读 · 1 评论 -
内存与垃圾回收——(二)类加载器子系统
2_类加载器子系统2.1_类的生命周期类的生命周期会经历如图 7 个阶段。2.2_类的加载过程类的加载过程有 3 个阶段:加载、连接、初始化。加载:通过一个类的全限定名获取定义此类的二进制字节流;将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构;在内存中生成一个代表这个类的java.lang.Class对象(反射),作为方法区这个类的各种数据的访问入口。链接:验证:确保 Class 文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的原创 2020-10-30 17:26:01 · 537 阅读 · 1 评论 -
内存与垃圾回收——(一)JVM 与 Java 体系结构
1_JVM 与 Java 体系结构HotSpot虚拟机JIT 编译器通过计数器找到最具编译价值的代码(即热点代码),触发及时编译,编译成本地机器指令并缓存到方法区,或进行或栈上替换,提升效率。可以与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡。解释器负责程序响应时间,编译器负责性能。其它虚拟机:Graal VM 是基于 HotSpot 的跨语言全栈虚拟机。JRockit 专注于服务器端应用,只有编译器,是最快的JVM。J9 类似 HotSpot原创 2020-10-30 17:23:29 · 913 阅读 · 0 评论