b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c 类 static 函数 “类加载机制”详解(6)

电脑杂谈  发布时间:2018-02-16 16:47:30  来源:网络整理

A:组件就是多维数组去掉一维之后的类型。比如,一维数组“MyParent4[]”的组件就是“MyParent”类型,即“MyParent[]”由多个MyParent类型构成;而二维数组“MyParent[][]”的组件就是“MyParent[]”,即“MyParent[][]”由多个“MyParent[]”数组构成。

目的

为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

从执行性能的角度上讲,验证阶段的工作量在虚拟机的类加载子系统中又占了相当大的一部分。

流程

验证阶段大致上会完成下面4个阶段的检验动作:

① 文件格式验证;

第一阶段要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理。

目的:保证输入的字节流能正确地解析并存储于方法区之内,格式上符合描述一个Java类型信息的要求。这阶段的验证是基于二进制字节流进行的,只有通过了这个阶段的验证后,字节流才会进入内存的方法区中进行存储,所以后面的3个验证阶段全部是基于方法区的存储结构进行的,不会再直接操作字节流。

② 元数据验证;

③ 字节码验证;

④ 符号引用验证

对于虚拟机的类加载机制来说,验证阶段是一个非常重要的、但不是一定必要(因为对程序运行期没有影响)的阶段。如果所运行的全部代码(包括自己编写的及第三方包中的代码)都已经被反复使用和验证过,那么在实施阶段就可以考虑使用-Xverify:none参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。

目的

为类的静态变量分配内存,并将其初始化为默认值。

但也存在着一些特殊情况:

如果类字段的字段属性表中存在ConstantValue属性,那在准备阶段变量value就会被初始化为ConstantValue属性所指定的值,假设类变量value的定义变为:

public static final int value = 123;

编译时Javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据ConstantValue的设置将value赋值为123。c 类 static 函数

示例

public class MyTest6 {

    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();

        System.out.println("counter1: " + Singleton.counter1);
        System.out.println("counter2: " + Singleton.counter2);
    }
}

class Singleton {

    public static int counter1;

    public static int counter2 = 0;

    private static Singleton singleton = new Singleton();

    private Singleton() {
        counter1++;
        counter2++;
    }

    public static Singleton getInstance() {
        return singleton;
    }
}

结果:

counter1: 1
counter2: 1
修改:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-80669-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 刘胡兰
      刘胡兰

      其实我作为大陆人十分理解台胞和香港人的关切

    热点图片
    拼命载入中...