JVM中的对象创建

原创 2005年05月17日 15:35:00

你认为java虚拟机什么时候会创建一个对象?如果能回答出下面的问题,你就可以不用继续向下看了

class A{
   static final int a = 10;

    static{
        System.out.println( "initializing A" );
    }

}

class B{
    public static void main(String[] args){
        System.out.println(A.a);
    }

    static{
        System.out.println( "initializing B" );
    }
}

我们调用B的main函数,会得到什么输出?

经过考虑后,你是不是认为应该得到
"initializing B"
"initializing A"
10

这个结果?不对,其实结果是
"initializing B"
10

嗯?A没有被实例化?

其实,java虚拟机会在6种情况下创建一个对象,分别是:

  1. 创建类的新实例
  2. 调用类中声明的静态方法
  3. 操作类或接口中声明的非常量静态字段
  4. 调用Java API中特定的反射方法
  5. 初始化一个类的子类
  6. 制定一个类作为Java虚拟机启动时的初始化类

java虚拟机只有在第一次主动使用一个类的情况下才会初始化该类。在以上6种情况下,虚拟机认为正在主动使用该类,所以会对其进行初始化,记住这6条,SCJP可能会出现(只是如果,可能考试不会涉及到虚拟机一层)

顺便说一下,任何一个类的初始化都要求它的所有祖先类(非祖先接口)预先被初始化,而接口的初始化则不需要祖先接口预先被初始化

深入理解JVM : Java堆中对象创建、布局、访问全过程

一、对象的创建new Animal();1.类加载检查:检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的...
  • sc313121000
  • sc313121000
  • 2016年03月07日 15:32
  • 1217

JVM中Java对象的创建

1. JVM中对象的创建过程在语言层面上创建对象通常仅仅是一个new关键字,而在虚拟机中,对象(普通对象,不包括数组和Class对象)的创建时怎样的过程呢?当JVM遇到一个new指令时, 首先,检查这...
  • u010297957
  • u010297957
  • 2016年04月17日 17:06
  • 876

jvm对象的创建过程

1检查这个指令的参数是否在changlchi
  • fkyyly
  • fkyyly
  • 2014年04月30日 10:04
  • 797

Java对象的创建 —— new之后JVM都做了什么?

Java对象创建过程1. 类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有则...
  • Rainnnbow
  • Rainnnbow
  • 2016年08月08日 10:26
  • 2187

深入理解JVM(二)——揭开HotSpot对象创建的奥秘

对象的创建过程当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作: 检查常量池中是否有即将要创建的这个对象所属的类的符号引用;若常量池中没有这个类的符号引用,说明这个类还没有被定义!抛出C...
  • u010425776
  • u010425776
  • 2016年04月19日 15:19
  • 1944

Java对象与JVM(一) Java对象在Java虚拟机中的创建过程

下面我们详细了解Java程序中new一个普通对象时,HotSpot虚拟机是怎么样创建这个对象的,包括5个步骤:相应类加载检查过程、在Java堆中为对象分配内存、分配后内存初始化为零、对对象进行必要的设...
  • tjiyu
  • tjiyu
  • 2016年12月29日 07:47
  • 3516

JAVA对象创建的过程

JVM对象创建的过程     对于java程序员来说,我们无时无刻不在创建和使用对象。使用new关键字即可快速创建一个对象,其实在new的背后,JVM为我们完成了很多事情。     JVM的字节码...
  • u011208987
  • u011208987
  • 2018年01月21日 18:19
  • 49

JVM 如何创建Java对象

在Java程序中,创建一个对象通常需要一个new关键字就够了,但是在虚拟机中,这个过程却有点复杂,这里面包括了类加载、内存分配、初始化零值等等一系列的步骤。 下面来看看JVM如何创建一个对象(这里面...
  • u010723709
  • u010723709
  • 2015年08月04日 20:38
  • 1444

JVM中对象的创建过程

为什么要内存对齐对于CPU从内存读取数据,并不是我们想象的那样,直接前去读取对应的大小,为了提升效率和速度,CPU会按照内存读取粒度的大小来读取内从中的数据,比如说如果内存读取粒度是4个字节,那么CP...
  • u012760183
  • u012760183
  • 2016年07月21日 07:07
  • 1089

【深入理解JVM】:Java对象的创建、内存布局、访问定位

对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如...
  • u011080472
  • u011080472
  • 2016年05月05日 12:06
  • 5242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JVM中的对象创建
举报原因:
原因补充:

(最多只允许输入30个字)