JVM学习笔记6:常量的本质含义与反编译及注记符详解

一、虚拟机参数:

1、 -XX:+TraceClassLoding 用于追踪类的加载信息并打印出来 同理还有一个unLoading

保存、运行可以看到如下的信息

[Loaded java.lang.Object from C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar]  第二行就是我们常见的Object父类

会发先父类和子类都加载了,只是子类没有初始化,还是学习5的代码运行结果。

2、-XX: (所有的都是这个开头的) +<option> 开启option 选项

                                                     -<option> 关闭option 选项

                                                     <option>=value 将option选项的值设置为value

第一个例子完,开始第二个例子

二、注记符,常量的初始化

1、常量的初始化:

在编译阶段这个常量存入调用这个常量的那个方法所在的类的常量池当中,本质上,调用类并没有直接引用到定义常量的类,因此并不会出发定义常量类的初始化。
注意:这里指的是将常量存放到Mytest2的常量池中,之后与MyParent2就没有关系了,甚至,我们可以将MyParent2的class文件删除
package com.shengsiyuan.jvm.classloder;
//在编译阶段这个常量存入调用这个常量的那个方法所在的类的常量池当中
//本质上,调用类并没有直接引用到定义常量的类,因此并不会出发定义常量类的初始化
//注意:这里指的是将常量存放到Mytest2的常量池中,之后与MyParent2就没有关系了,
//甚至,我们可以将MyParent2的class文件删除


//注记符:
//ldc 表示将int,float 或是String类型的常量值从常量池推送至栈顶
//bipush 表示将单字节(-128~ 127)的常量推送至栈顶
//sipush 表示将一个短整型(-32768~ 32767)的常量推送至栈顶
//iconst_1 表示将int型 1 的常量推送至栈顶(1-5) iconst_2\iconst_5
public class Mytest2 {
    public static void main(String[] args) {
        //System.out.println(MyParent2.str);
        System.out.println(MyParent2.m); //iconst_1
    }
}
class MyParent2{
    //public static String str="Hello world";
    //final 本身是一个常量,在编译阶段这个常量存入调用这个常量的那个方法所在的类的常量池当中,因此放入到的是test2的常量池当中
    public static final String str="Hello world";
    public static final short s=7;
    public static final int i=128;
    public static final int m=1;
    static {
        System.out.println("MyParent2 static block");
    }

}

2、注记符

在编译的目录下,反编译文件,会得到如下的结果,ldc就是一种注记符

注记符:
ldc 表示将int,float 或是String类型的常量值从常量池推送至栈顶
bipush 表示将单字节(-128~ 127)的常量推送至栈顶
sipush 表示将一个短整型(-32768~ 32767)的常量推送至栈顶
iconst_1 表示将int型 1 的常量推送至栈顶(1-5) iconst_2\iconst_5

jvm_lecture\build\classes\java\main> javap -c com.shengsiyuan.jvm.classloder.MyTest2

 

这是这堂课学习的注记符
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值