JVM系列2:HotSpot虚拟机对象】的更多相关文章

本节以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 1. 对象的创建 Java是一门面向对象的编程语言.在语言层面上,创建对象(例如克隆.反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 对象创建过程如下: 1.1 类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个…
前言 上篇文章介绍了Java虚拟机的运行时数据区域,大致明白了Java虚拟机内存模型的概况,下面就基于实用优先的原则,以最常用的虚拟机HotSpot和最常用的内存区域Java堆为例,升入探讨一下HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 对象的创建 Java是一门面向对象的编程语言,在Java程序的运行过程中每时每刻都有对象被创建出来,那么在虚拟机中,对象的创建是怎样的一个过程呢? 当Java虚拟机遇到一条字节码new指令时,首先检查这个指令的参数是否能定位到一个类的符号引…
一.对象的创建 1.类加载检查 普通对象的创建过程:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那么必须先执行相应的类加载过程. 2.分配内存 分配内存时主要注意两个问题:1.如何分配空间.2.修改指针时如何实现线程安全. 如果内存是规整的,就使用“指针碰撞”的方式,即将空闲部分的指针移动对象内存大小相等的距离.如果内存不是规整的,虚拟机必须维护一个表,记录那些内存块可用,然后从…
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的Java虚拟机:         · Class文件格式:         · Java API类库:         · 来自商业机构或开源社区的第三方Java类库.     JDK,即Java开发工具包,包括Java程序设计语言.Java虚拟机.Java API类库,是用于支持Java程序开发的…
1.对象创建过程: ①.类加载检查:当java虚拟机遇到一条new指令时,首先会去检查该指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析.初始化过,如果没有,则必须先执行相应的类加载过程. ②.分配内存:类加载检查完成后,虚拟机将为新对象分配内存空间,且对象所需内存空间大小在其完成类加载检查后即可确定,该过程其实就是在堆中划分一小部分的确定大小的空间,用于存储对象信息.其中分配方式有以下两种: 内存分配的并发问题: 在创建对象时存在线程安全问题,虚拟…
对象的创建 java是一门面向对象的语言.在Java程序执行过程中无时无刻有Java对象被创建出来.在语言层面上,创建对象(克隆.反序列化)一般是一个newkeyword而已,而在虚拟机中,对象的创建步骤例如以下: 1.当虚拟机遇到new指令时.首先将去检查这个指令參数能否在常量池中定位到一个类的引用符号,而且检查这个符号引用代表的类是否被载入.解析和初始化过.假设没有.那必须先执行相应的类载入过程. 2.在类载入检查通过以后.接下来虚拟机将为新生对象分配内存.对象所需的内存大小在类载入后便确定…
都知道Java是一门面向对象的编程语言,在Java程序运行过程中,无时无刻不在创建对象,所以这节来总结一下HotSpot虚拟机中的Java对象. 一.Java虚拟机对象的创建过程. 在语义层面创建一个对象就是new的过程,但是在虚拟机里面,对象(这里的对象指的是普通对象,不包括数组和class对象等)又是怎么被创建的呢? 1.当Java虚拟机收到一个new指令时,它首先会去常量池中检查是否存在这个类的符号引用.如果存在则会执行下一步,否则会创建一个符号引用放在常量池中(待考察): 2.当在常量池…
对象的内存布局 在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 对象头 对象头记录了对象在运行过程中所需要使用的一些数据: 哈希码 GC 分代年龄 锁状态标志 线程持有的锁 偏向线程 ID 偏向时间戳 对象头可能包含类型指针,通过该指针能确定对象属于哪个类.如果对象是一个数组,那么对象头还会包括数组长度. 实例数据 实例数据部分就是成员变量的值,其中包括父类成员变量和本类成员变量. 对…
对象的创建 Java 对象的创建过程, ①类加载检查: 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过.解析和初始化过.如果没有,那必须先执行相应的类加载过程. ②分配内存: 在类加载检查通过后,接下来虚拟机将为新生对象分配内存.对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来.分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择那种分…
jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程.显示信息包括虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID). jps [-q] [-mlvV] [<hostid>] 选项 作用 -q 只输出 LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类 main() 函数的参数 -l 输出主类的名称,如果进程执行的是 jar 包,输出 jar 路径…