1

加载过程
image.png

image.png

结构
class文件主要包含一般信息,接口,字段,方法,属性,常量池。
一般信息中主要包含次版本号,主版本号,访问标志,本类索引,父类索引,以及接口数量、字段数量、方法数量、属性数量、常量池常量个数
类中用到的信息一般都会放到类的常量池中。
每个方法都会包含一个行号表LineNumberTable和一个本地变量表LocalVariableTable
每个类都会有一个属性SourceFile会包含索引名字和字节码java源文件名称。

常量池的分类:
字符串常量池Spring Pool:在堆中,被jvm共享。
class文件常量池class constant pool:用于存放各种字面量和符号引用 编译阶段
运行时常量池 runtime constant pool:类加载完毕之后,把class常量池中的符号引用转存到运行时常量池,也就是说每个class都有一个运行时常量池,类解析时候,直接将符号引用替换为直接引用,与全局常量池的引用保持一致。

image.png

程序打印了什么

      private static class T {
            private static T t = new T();
            private static int temp = get();
            private static int count = 2;
            public T() {
                count++;
            }
            private static int get() {
                System.out.println(count);
                return count;
            }
        }
        public static void main(String[] args) {
            System.out.println(T.count);
        }

main函数调用了T.count,调用了静态变量,所以会加载了。加载、连接、初始化。
准备阶段count=0,然后执行初始化,首先执行new T(),count++ count=1,所以接下来调用get方法返回1。
最后执行count=2,所以最后count=2。
所以打印结果是1 2。


一只鱼
49 声望1 粉丝

« 上一篇
jvm参数
下一篇 »
内存屏障

引用和评论

0 条评论