JVM
nev1Mor
On My Way
展开
-
JVM运行时栈帧结构
栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态链接、方法返回地址等信息。局部变量表:一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。局部变量表的容量以变量槽(variable slot)为最小单位。操作数栈:iadd表示两个int值相加动态链接:运行期间转原创 2016-03-15 21:09:56 · 2125 阅读 · 0 评论 -
JVM初篇
JVM的毕竟是个虚拟机,是一种规范,虽说符合冯诺依曼的计算机设计理念,但是他并不是实体计算机,所以他的组成也不是什么存储器,控制器,运算器,输入输出设备。在我看来,JVM放在运行在真实的操作系统中表现的更像应用或者说是进程,他的组成可以理解为JVM这个进程有哪些功能模块,而这些功能模块的运作可以看做是JVM的运行原理。JVM有多种实现,例如Oracle的JVM,HP的JVM和IBM的JVM等,而在原创 2016-02-29 23:42:55 · 293 阅读 · 0 评论 -
JVM学习笔记-对象探秘
对象的创建:当虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类是符号引用,并且检验这个符号引用代表的类是否已被加载过。对象的内存布局:(具体的见深入解析JVM一书)1.对象头 ①:HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳 ②:类型指针(即对象指向它类元数据的指针)2.实例数据 :各种类型的字段内容3.对齐填原创 2016-02-29 00:08:18 · 267 阅读 · 0 评论 -
JVM之字节码指令简介
java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字以及跟随其后的零至多个代表此操作所需的参数而构成的。字节码与数据类型加载和存储指令:将数据在栈帧中的局部变量表和操作数栈直间来回传输。运算指令:对两个操作数栈上的值进行某种特定运算,并把结果重新存入操作栈顶。类型转换指令:将两种不同的数值类型进行互相转换。对象创建与访问指令:new***操作数栈管原创 2016-03-13 20:55:47 · 334 阅读 · 0 评论 -
JVM学习笔记-运行时数据区域
JVM 运行时数据区域 主要分为两大部分:1.线程私有 (即所谓的线程安全) :①程序计数器:当前线程所执行的字节码(即.class文件,因为所有.java文件都需要编辑成.class文件才能运行。当然不一定就是.java文件,这里泛指所有能够在JVM上跑的程序。如)的行号指示器。JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。这个计数器就是为了线程切换后能恢复到正确原创 2016-02-27 21:11:18 · 462 阅读 · 0 评论 -
JVM类文件结构
魔数与Class文件的版本:确定这个文件是否为一个能被虚拟机接受的Class文件常量池:字面量与符号引用访问标志:标识类或者接口的访问信息。(public、abstract等)类索引、父类索引与接口索引集合:确定类的继承关系字段表集合:描述类或者接口中声明的变量方法表集合:这里并不包括代码code,而是存放在code属性中属性表集合原创 2016-03-10 21:48:23 · 226 阅读 · 0 评论 -
JVM内存回收与分配
JVM内存回收与分配策略①对象优先在Eden区分配②大对象直接进入老年代:所谓大对象就是需要大量连续的内存空间的java对象长期存活的对象将进入老年代:每发生一次GC,存活的对象的年龄+1,当对象的年龄增加到一定程度(默认15)就会进入老年代③动态对象年龄判断:如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于等于该年龄的对象就可以直原创 2016-03-08 22:39:40 · 289 阅读 · 0 评论 -
JVM之垃圾回收算法
标记-清除算法:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。缺点:①效率低:标记和清除两个过程效率都不高。②空间碎片:会产生大量不连续的内存碎片,导致以后分配大对象时,无法找到足够的连续空间而不得不提前触发一次垃圾回收。复制算法:将可用内存按容量分为大小相等的两块,每次只使用其中一块。垃圾回收之后,将还存活的对象复制到另外一块,再把使用过的内存空间一次清理掉。解决了标记原创 2016-03-06 18:57:23 · 264 阅读 · 0 评论 -
JVM之对象生死
一、引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加一,当引用失效时,计数器就减一。任何时刻计数器为0的对象就是不能再被使用。引用计数法实现简单,效率高。但是存在一个循环引用问题。例:objA.inc = objB; objB.inc = objA; objA = null; objB = null;二、可达性分析算法:通过一系列称为"GC Roots"的原创 2016-03-06 17:12:27 · 225 阅读 · 0 评论 -
JVM之java内存模型
java内存模型规定了所有的变量都存储在主内存中,每个线程还有自己的工作内存(类似于高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方的工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。8种原子操作:lock、unlock、read、load、use、ass原创 2016-03-16 23:42:42 · 191 阅读 · 0 评论 -
jvm虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。加载:①通过一个类的全限定名来获取定义此类的二进制字节流②将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构③在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。验证:确保Clas原创 2016-03-14 21:53:11 · 288 阅读 · 0 评论