JVM系列
文章平均质量分 76
jvm相关学习,卷起来吧
EShaooo
这个作者很懒,什么都没留下…
展开
-
JVM(一) - 基础
Java8官方文档:https://docs.oracle.com/javase/8/docs/JDK(Java Development Kit):Java开发工具包。JDK是整个 Java 开发的核心,它集成了JRE 和一些好用的小工具(如Javac、JConsole、VisualVM等)。提供用户开发Java程序,内部Javac编译Java文件到Class文件、JConsole调试、VisualVM分析工具、javadoc文档。需要编写、编译Java程序需要用到JDK。JRE(Java Runtime原创 2022-06-23 17:13:54 · 368 阅读 · 0 评论 -
JVM(二) - 字节码详解
~~~~原创 2022-06-23 19:55:39 · 148 阅读 · 1 评论 -
JVM(三) - 类加载
类的加载过程包括了加载、验证、准备、解析、初始化五个阶段,其中验证、准备、解析又合称为连接阶段。在加载的5个阶段加载、验证、准备和初始化这四个阶段发生是按顺序开始的(而不是按顺序进行或完成,因为这些阶段通常都是交叉混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段),而解析阶段则不一定,在某种情况下可以在初始化阶段之后开始,为了支持Java语言的运行时绑定(即动态绑定或晚期绑定)。结束类生命周期的几种场景:虚拟机的类加载机制:Java使用某个未加载的类时,JVM会通过加载class文件、连接(验证、原创 2022-06-23 17:45:32 · 271 阅读 · 0 评论 -
JVM(四) - 执行引擎
JVM架构模型图: 机器码用二进制编码方式表示的指令(010101...等等),叫做机器指令码,也叫硬编码。最初人们采用它编写程序,这就是机器语言。指令指令集不同的硬件平台,各自支持的指令是有差别的。因此每个平台所支持的指令,称之为对应平台的指令集。汇编语言(硬件级别的语言,不能跨平台)高级语言JVM主要负责装载字节码到其内部,但字节码并不能够运行在操作系统之上,因为字节码指令并非机器码,且只能JVM识别,所以为了让Java程序运行起来,JVM中的执行引擎扮演将高级语言翻译为机器语言的角色,以及对字节码优化原创 2022-06-23 18:49:56 · 1021 阅读 · 0 评论 -
JVM(五) - 模版解释器
模版解释器待补充~~~~原创 2022-06-23 18:52:07 · 95 阅读 · 0 评论 -
JVM(六) - JIT的逃逸分析
由于解释器在设计和实现上非常简单,且相当低效。为了解决这个问题,JVM提供了即时编译技术:即时编译可以将整个函数体编译成为机器码,有效到避免函数体被解释执行,而是重复执行时(即热点代码)直接执行编译后的机器码即可,大大提示了执行效率。逃逸分析是一种代码分析手段,动态分析创建对象的使用范围。如果一个在方法中创建的对象 ,除了在方法体中还有方法外部的引用,那么在方法执行完之后,由于对象仍有被引用,所以 GC 有可能是无法立即回收的,此现象则是对象发生了逃逸。可以简单理解一个对象并不只存活在一个方法的作用域内。逸原创 2022-06-23 19:00:30 · 693 阅读 · 0 评论 -
JVM(七) - Jvm内存模型
JVM = 类加载器(classloader) + 运行时数据区域(runtime data area) + 执行引擎(execution engine)类加载器:通过过全限定名加载二进制数据class文件到Jvm内存中,具体原理见类加载文章。Jvm虚拟机在Java程序执行时,会把Jvm内存划分为若干不同区域。这些区域各有用途,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。JDK1.8 中,永久代(方法区)已完全被元数据区(Meatspace)所取代。直接内存/本地内存原创 2022-06-23 19:17:45 · 1585 阅读 · 0 评论 -
JVM(八) - 虚拟机栈中的栈帧
Jvm内存中栈分两种:本地方法栈 和 虚拟机栈。两者没有本质上的区别,区别在于服务的对象不同。本地方法栈服务于JVM虚拟机的native方法,如JDK安装目录下很多C的文件实现的方法,这些就是native方法。虚拟机栈服务于虚拟机执行的Java方法。栈帧其实就是栈里面的元素,用于支持Java虚拟机进行方法调用和方法执行背后的数据结构。了解它就可以更好地理解Java虚拟机执行引擎是如何运行的。虚拟机栈和栈帧的结构如图: 栈帧的部分信息,如局部变量表、操作数栈、运行时常量池可以通过JVM字节码查看:局部变原创 2022-06-23 19:26:55 · 2078 阅读 · 0 评论 -
JVM(九) - 垃圾回收机制
各语言内存操作对比: 语言申请内存释放内存CmallocfreeC++newdeleteJavanew自动释放Java语言的自动内存管理设计最终可以归结为自动化地解决了两个问题:即对象内存的分配和回收。了解JVM是垃圾回收机制,如何有效防止内存泄露、保证内存的有效使用,需要思考三个方向的问题:进行垃圾回收的第一步:什么是垃圾? 没有引用指向的一个对象或多个对象(循环引用)。定位垃圾的方法有两种:引用计数法和可达性分析。Java中将数据类型分为两大类:基本类型和引用类型。如果reference类型数据中存储的原创 2022-06-23 19:54:51 · 729 阅读 · 0 评论 -
JVM(十) - 性能调优
性能调优包含多个方面:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。其中架构调优和代码调优是基础,架构的调优对系统影响最大。性能调优基本步骤:JVM调优是一种手段,但并不一定所有问题都需要通过JVM调优解决,最有效的优化手段是架构和代码层面的优化。所以JVM优化是最后不得已的手段,在架构调优和代码调优后对服务器配置的最后一次"压榨"。所以JVM调优应遵守的原则:官方Java参数文档:https://docs.oracle.com/javase/8/docs/technotes/tools/un原创 2022-06-23 20:09:26 · 8527 阅读 · 0 评论