摘要: 一、解释器与编译器 当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码” 。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT 编译器)。 即时编译器并不是虚拟机必需的部分 阅读全文
posted @ 2018-07-29 14:32 湮天霸神666 阅读(349) 评论(0) 推荐(0) 编辑
摘要: Java 语言的 “编译期”其实可以分为3类编译过程: 前端编译器:把*.java文件转变成*.class文件的过程。 后端运行期编译器(JIT编译器):把字节码转变成机器码的过程。 静态提前编译器(AOT编译器):直接把*.java文件编译成本地机器代码的过程。 Javac这类编译器对代码的运行效 阅读全文
posted @ 2018-07-29 14:31 湮天霸神666 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 以下是从网上整理出的资料,不同作者对某些具体描述有略微差别,有的具体描述可能会存在不准确的情况,但结论是一致的。 一、String equals比较值,==比较引用,我们主要关注引用的比较。 1、两种方式创建String的过程 对于 String s1="abc"; 这种方式,如果常量池中已经存在字 阅读全文
posted @ 2018-07-29 14:30 湮天霸神666 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 一、类变量、成员变量、局部变量的内存分布 结合前文,对类变量、成员变量、局部变量三种变量的内存分布进行总结 1)类变量:方法区。静态变量随类加载到方法区中。方法区中存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。线程共享。 2)成员变量:堆。从父类继承下来或在子类中定义的 阅读全文
posted @ 2018-07-29 14:29 湮天霸神666 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 一、类与类加载器 允许类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作可以让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载 阅读全文
posted @ 2018-07-29 14:28 湮天霸神666 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 前文已经讲了Class文件的存储格式、方法的调用过程、字节码的执行过程。但是虚拟机是如何加载这些Class文件的呢?Class文件中的信息进入到虚拟机后会发生什么变化? 虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这 阅读全文
posted @ 2018-07-29 14:27 湮天霸神666 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 本文主要总结虚拟机调用方法的过程是怎样的,JAVA虚拟机里面提供了5条方法调用的字节码指令。分别如下: invokestatic:调用静态方法 invokespecial:调用实例构造器<init>方法、私有方法和父类方法。 invokevirtual:调用所有的虚方法。 invokeinterfa 阅读全文
posted @ 2018-07-29 14:25 湮天霸神666 阅读(208) 评论(0) 推荐(1) 编辑
摘要: 一、栈帧结构 讲栈帧结构有必要回顾一下前文Class文件中的Code属性结构,如下图。 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机栈的栈元素。每一个方法从调用开始到执行完成,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法 阅读全文
posted @ 2018-07-29 14:23 湮天霸神666 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 回顾一下前文,知道了属性表的Code属性存着Java程序方法体的代码经过Javac编译器处理后,最终变为字节码指令。还知道了Code属性表中的code是一个u1类型的单字节,取值范围是0x00~0xFF,也就是一共最多能表达256条指令。 由于Java虚拟机采用面向操作数栈而并非寄存器的架构,所以大 阅读全文
posted @ 2018-07-29 14:22 湮天霸神666 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 各种不同平台的虚拟机,与所有平台都统一使用的程序存储格式——字节码,是构成平台无关性与语言无关性的基石。 Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 阅读全文
posted @ 2018-07-29 14:21 湮天霸神666 阅读(233) 评论(0) 推荐(0) 编辑