JVM
_Kim
1261895547@qq.com
展开
-
Java内存区域与内存溢出异常
JVM常量池、运行时常量池、字符串常量池 在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代 在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代 在JDK1.8 hotspot移除...原创 2019-07-15 11:10:04 · 169 阅读 · 0 评论 -
垃圾收集器与内存分配策略
GC要完成的事情哪些内存需要回收? 什么时候回收? 如何回收?对象存活/死去1、引用计数算法为每一个对象添加一个引用计数器,每当有一个地方持有对其的一个引用时,该计数器加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象是不可能再被使用的。引用计数算法(Reference Counting)实现简单,判断效率高。但是主流的Java虚拟机实现中并没有使用这个算法,主要原因...原创 2019-07-16 19:36:14 · 152 阅读 · 0 评论 -
类文件结构
1、无关性的基石语言无关性 平台无关性各种不同的虚拟机与所有平台统一使用的程序存储格式----字节码(ByteCode),这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的一次编写,到处运行。实现语言无关性的基础是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,只与Class文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟...原创 2019-09-06 11:15:06 · 172 阅读 · 0 评论 -
虚拟机类加载机制
1、概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译器进行连接工作的语言不同,Java 中,类的加载一直到初始化过程都是在运行期间完成的,虽然会损失一点性能,但是却使Java 应用程序具有高度灵活的特性,Java 可以动态扩展的特性就是依赖于运行期动态加载和动态连接这个...原创 2019-09-06 18:07:21 · 136 阅读 · 0 评论 -
虚拟机字节码执行引擎
1、概述执行引擎是Java虚拟机最核心的组成部分之一。虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中指定了虚拟机字节码执行引擎的概念模型,这个概念模型成为...原创 2019-09-07 18:08:11 · 143 阅读 · 0 评论 -
早期(编译期)优化
1、概述JVM的编译器可以分为三个编译器:前端编译器:把*.java文件转变为*.class文件的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。2、javac编译器编译的大致过程:...原创 2019-09-07 20:47:55 · 208 阅读 · 0 评论 -
晚期(运行期)优化
目录1、概述2、HotSpot虚拟机内的即时编译器1、解释器与编译器2、编译对象和触发条件方法调用计数器回边计数器3、编译过程Client CompilerServer Complier3、编译优化技术公共表达式消除数组边界检查消除方法内联逃逸分析Java与C/C++编译器的对比1、概述在部分的商用虚拟机中,Java程序最初是通过...原创 2019-09-08 13:13:42 · 236 阅读 · 0 评论