
JVM
文章平均质量分 88
dandesy
这个作者很懒,什么都没留下…
展开
-
深入理解JVM2-对象访问的两种方式
Java语言中,对象访问实现:Object obj = new Object(); 假设该句代码出现在方法体中, “Object obj”反映到Java栈的本地变量表中,作为一个reference类型数据出现。 “new Object()”反映到Java堆中,形成一块存储了Object类型所有实例数据值的结构化内存。 另外,在Java堆中必须包含能查找到此对象类型数据(如对象类型、父类、实现原创 2017-11-30 22:18:15 · 271 阅读 · 0 评论 -
深入理解JVM3-自动内存管理
1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用java的线程是映射到操作系统的内核线程上的。垃圾回收:垃圾回收针对的区域:Java堆和方法区程序计数器,虚拟机栈,本地方法栈 线程私有区域,方法...原创 2019-05-14 11:08:22 · 124 阅读 · 0 评论 -
深入理解JVM4-Class文件结构
Class文件结构:平台无关,语言无关jdk/bin目录下的javap命令可以输出class文件的字节码内容class文件以字节为单位的二进制流,中间没有分隔符。字节序为Big-Endian(高位在前).class文件中只有两种数据类型:无符号数,表。表是由多个无符号数或其他表作为数据项构成的复合数据类型。表习惯性以“_info"结尾。无论是符号数还是表,当同一类型但数量不定的多个数据时...原创 2019-05-14 11:10:29 · 174 阅读 · 0 评论 -
深入理解JVM1-JVM运行时数据区
#深入理解Java虚拟机(1)-JVM运行时数据区Java虚拟机所管理的内存包括的运行时数据区: 注:此图片来源于http://chenzhou123520.iteye.com/blog/1585224 程序计数器:线程私有每个线程有一个独立的程序计数器(一块小的内存空间)线程执行Java方法,程序计数器=正执行的虚拟机字节码指令的地址 线程执行native方法,程序计数器=空(Undef原创 2017-11-30 21:54:49 · 350 阅读 · 0 评论 -
深入理解JVM5-虚拟机类加载机制
虚拟机类加载机制Java中类型的加载、连接和初始化过程在运行期间完成的。一. 类加载的时机类的生命周期从类被加载、连接和初始化开始,到类被卸载结束。类的生命周期包括:加载、连接、初始化、使用、卸载。连接阶段包括验证、准备、解析过程。其中加载、验证、准备、初始化、卸载这5个阶段顺序是确定的。解析阶段在有些情况下可以在初始化之后再开始(动态绑定)。JVM规定这5种情况必须立即对类进行初始化:...原创 2019-05-20 21:51:15 · 152 阅读 · 0 评论 -
深入理解JVM6-虚拟机字节码执行引擎
虚拟机字节码执行引擎:不同的虚拟机实现里,可能会有解释执行(边解释边执行)和编译执行(通过即时编译器产生本地代码执行)的混合模式或单独的某种模式。一、运行时栈帧结构编译时,栈帧中需要多大的局部变量表,多深的操作数栈就已经确定,存储在方法表的Code属性中。因此一个栈帧需要分配的内存大小,不会受到程序运行期间变量数据的影响,而仅仅取决于具体的虚拟机实现。栈帧存储了方法的局部变量表、操作数栈...原创 2019-06-13 17:19:06 · 176 阅读 · 0 评论 -
深入理解JVM7-JVM优化技术
JVM优化一、JVM早期(编译期)优化javac编译器编译过程分为三个过程:解析(词法分析与语法分析)与填充符号表过程;插入式注解处理器的注解处理过程;语义分析与字节码生成过程。解析与填充符号表过程词法分析将源代码的字符流转变为标记集合;语法分析将标记序列构造成抽象语法树。完成词法分析和语法分析后,下一步是填充符号表。符号表是由一组符号地址和符号信息构成的表格(类似于哈希表),用于后...原创 2019-06-13 17:20:43 · 245 阅读 · 0 评论