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中的对象创建、内存布局和访问定位

探究JVM中的对象创建、对象的内存布局以及对象的访问定位

jvm对象创建以及类的加载

当虚拟机遇到一个new命令时,首先将会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载,解析和初始化过。如果没有就必须先执行类加载过程。 类从被加...

深入理解JVM02--深入理解对象的创建、内存布局、访问定位

对象的创建   Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:克隆、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(本...

JVM学习02——对象的创建与访问

本文将简单介绍HotSpot虚拟机在Java堆中对象的创建和访问。一、对象的创建public class Test{ public static void main(String[] a...
  • xu__cg
  • xu__cg
  • 2016年10月24日 16:44
  • 411

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

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

JVM(二)—堆内存分析及对象的创建过程

JVM(二)—堆内存分析及对象的创建过程 1 堆内存 堆内存(Java Heap)是Java虚拟机管理的内存中最大的一块,被所有线程所共享。虚拟机启动时创建,存放对象实例和数组。  Java堆...

jvm读书笔记-2.3内存对象的创建、布局和访问

一背景介绍 本文属于深入理解java虚拟机读书笔记系列(周志明)。第二章java内存区域与内存溢出异常。主要分为三节介绍:运行时数据区域,参见之前的整理(运行时数据区)Hotspot虚拟机对象(本文...
  • bohu83
  • bohu83
  • 2016年06月05日 18:19
  • 282

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

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

JVM里java对象的创建及内存分配和访问定位

对象的创建 Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文...

JVM系列二(虚拟机对象创建、布局、定位)

** 一 对象创建 ** Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(如克隆、反序列化)通常仅仅是一个new关键字而已,而在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JVM中的对象创建
举报原因:
原因补充:

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