深入理解java虚拟机
文章平均质量分 85
owen1190
这个作者很懒,什么都没留下…
展开
-
深入理解Java虚拟机之java内存
1.程序计数器字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 每个线程都需要有一个独立的程序计数器,是线程私有的。 线程执行java方法,计数器记录指令的地址。线程执行native方法,计数器则为空。 计数器是唯一没有规定任何OutOfMemoryError的区域。2.虚拟机栈线程私有的。原创 2016-08-05 14:36:29 · 382 阅读 · 0 评论 -
深入理解java虚拟机之HotSpot虚拟机探秘
一、对象的创建 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,则先执行相应的类加载过程。接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。 假设java堆内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作原创 2016-08-07 11:45:36 · 1874 阅读 · 0 评论 -
深入理解Java虚拟机之类加载机制
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类型的加载、连接和初始化都是在运行期间完成的。类加载的时机整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析统称为连接。 加载、验证、准备、初始化、卸载这5部分顺序是确定的。而解析可以在初始化后执行,为了支持j原创 2016-08-18 09:16:38 · 1097 阅读 · 0 评论 -
深入理解Java虚拟机之虚拟机字节码执行引擎
运行时栈帧结构栈帧是用于支持虚拟机进行防腐调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。执行引擎运行的所有字节码指令只对当前栈帧进行原创 2016-08-21 09:13:27 · 385 阅读 · 0 评论 -
深入理解Java虚拟机之Class类文件的结构
Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前(最高位字节在地址最低位,最低位字节在地址最高位的顺序)方式分割成若干个8位字节进行存储。Class文件格式采原创 2016-08-12 10:22:27 · 675 阅读 · 0 评论 -
深入Java虚拟机之基于栈指令的解释器执行引擎
解释执行Java被人定位于“解释执行”的语言。在jdk1.0时,定义还算准确,但后来当主流虚拟机中都包含了即使编译器后,Class文件中的代码 大部分的程序代码到物理机的目标代码或虚拟机能执行的指令集之前,都需要经过以下过程:如今,基于物理机、Java虚拟机,或者非Java的其他高级语言虚拟机的语言,大多数都会遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法分析和语法分析处理,把源原创 2016-08-26 15:15:05 · 1927 阅读 · 0 评论 -
深入理解Java虚拟机之早期编译器优化
Javac编译器Javac编译器是一个由Java语言编写的程序Javac的源码与调试从Sun Javac的代码来看,编译器大致分为3个过程: 解析与填充符号表的过程 插入式注解处理器的注解处理过程 分析与字节码生成的过程 Javac编译动作的入口为com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()原创 2016-09-07 09:54:40 · 715 阅读 · 0 评论