【Java 它 JVM】对象的创建过程】的更多相关文章

简要说明的话,Java对象的创建过程分为下面几步: 1.执行相关检查: 2.为对象分配内存,将分配到的内存空间都初始化为零值: 3.进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1.执行相关检查 虚拟机遇到一条new指令时,将会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载.解析和初试化过,如果没有,那必须先执行相应的类加载过程: 例:Person p = new Person() 当有这么一条new指令时,我们先去检查p这个符号…
前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能真正看明白).经常有人问我为什么这么喜欢钻研底层的东西,首先,因为我以前的做硬件的和嵌入式的,兴趣使然:其次,我个人感觉,如果不把上下打通,心里老是有一堵墙过不去,说白了,这是个人因素,与好坏无关(当然,经常有人说,懂底层原理是成为高手的必经之路). 现在来说一下我当初学习JVM的原因,在学习JAV…
JVM中对象的创建过程如以下流程图中所示: 对其主要步骤进行详细阐述: 为新生对象分配内存: 内存的分配方式: 指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边,中间放着一个指针作为分界的指示器,那么当分配内存时仅需移动指针即可. 空闲列表:维护一个列表,记录那些内存可用,分配时找出一块足够大的空间进行划分,并更新列表记录. 选择:分配方式的选择依赖于内存大小是否规整,内存大小的规整,依赖于垃圾收集器是否带有压缩整理功能. 并发情况下保证线程安全: 方法一:…
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化.在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化.本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程. 版权声明: 本文原创作者:书呆子Rico 作者博客地址:http://blog.cs…
参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化.在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化.本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机…
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象,这种方式在Java规范中被称为 : 由执行类实例创建表达式而引起的对象创建.除此之外,我们还可以使用反射机制(Class类的newInstance方法.使用Constructor类的newInstance方法).使用Clone方法.使用反序列化等方式创建对象. 1). 使用new关键字创建对象 这…
JAVA中创建对象直接new创建一个对象,对么对象的创建过程是怎样的呢? 程序运行过程中有许多的对象被创建出来.那么对象是如何创建的呢? 一 对象创建的步骤 1 遇到new指令时,检查这个指令的参数是否能在常量池中找到一个符号引用 2 如果找到符号引用,就检查这个符号引用是否已经被加载,解析和初始化过 3 如果没有加载过,则执行类加载过程 4 为对象分配内存(对象所需的内存在类加载的时候就可以确定) 指针碰撞法 : 假设java堆中的内存是规整的,所有用过的内存放在一边,空闲的内存放在另一边中间…
public class Test1 { public static void main(String[] args) { new B(); System.out.println("------------"); new B(); B b=new B(); System.out.println(b.v5); } } class A{ int v1=1; int v5=5; static int v2=2; static{ System.out.println("A的静态块&q…
一.对象的创建过程 1.首次创建对象时或该类静态方法/静态域首次被访问时,JAVA解释器查找该类的路径,定位该类的class文件 2.载入该类的class文件,有关静态初始化的所有动作执行,但是只执行一次. 3.当用new方法创建对象时,在堆上为对象分配足够的存储空间 4.清零分类的存储空间使该类的基本类型设置成为默认值,引用为null 5.执行所有出现于字段定义出的初始化动作 6.执行构造器 注意 初始化顺序是先静态对象后非静态对象,然后构造器初始化. 静态对象初始化只进行一次,(1)在首次生…
1.对象的创建过程 1.1 . 给对象分配内存 对象的内存分配有两种方式,一种是指针碰撞另外一种是空闲列表的方式,堆是否规整由我们垃圾回收器来决定的 ,如果垃圾回收带有我们的压缩算法,那么他会规整的分配我们的对象. 1.1.1 指针碰撞 我们内存分配为规整的,每次分配依靠指针位移来分配对象,如果在多线程创建对象的情况下是通过在CPU硬件层面上加锁CAS锁来保证数据安全,如图下所示 1.1.2 空闲列表 堆内部有一个列表来存储我们堆中空闲的地方.我们创建对象则去找列表中对应的空闲区域去创建我们的对…