zoukankan      html  css  js  c++  java
  • java知识之JVM验证理解(一)——类文件结构篇

    方法、字段名最大长度是多少?

    65535

    因为CONSTANT_Utf8_info 表中length 类型为u2,而所有方法、字段都需要引用CONSTANT_Utf8_info 型常量来描述名称,所以最大只能65535

    在这里插入图片描述

    类的单继承、实现多接口及接口多继承

    Class文件格式中,super_class数量仅为1,且除java.lang.Object,所有java的父类都不为0,即都有父类。

    而接口有interfaces_count类型和interfaces

    在这里插入图片描述

    jclasslib验证

    测试代码:

    public interface InterfaceTest extends InterfaceTest1, InterfaceTest2{
    }
    
    interface InterfaceTest1 {
    }
    
    interface InterfaceTest2 {
    }
    

    jclasslib查看:
    在这里插入图片描述

    final修饰基本数据类型和String

    final修饰的基本数据类型和String,不需要去初始化执行代码的,会在Fields下有ConstantValue的属性。属于编译前期优化,加载前值便初始化了。

    测试代码:

    public class FinalTest {
        final int i = 10;
        final double d = 10.0;
        final String str = "str";
        final int i2 = new Integer("10");
        final int i3 = new Random().nextInt(10);
        final String str2 = new String("str");
    }
    

    jclasslib查看:
    在这里插入图片描述

    JDK5 新增Signature属性

    java范型采用的是擦除法实现,此属性为了避免类型信息被擦除后导致签名混乱而设计。可用于运行期反射获取范型信息。

    同样方法中使用LocalVariableTypeTable属性,使用字段的特征签名来完成范型描述。

    测试代码:

    public class SignatureTest {
        List<String> list1;
    
        public void test(List<String> list) {
            list = new ArrayList<>();
        }
    }
    

    jclasslib验证:
    在这里插入图片描述
    在这里插入图片描述

    实例方法第一个参数为this,类方法则没有

    测试代码:

    public class ThisTest {
        public void test() {}
        public static void test1(){}
    }
    

    jclasslib验证
    在这里插入图片描述

    同步指令

    synchronized修饰方法, ACC_SYNCHRONIZED访问标志为true,执行线程要求先成功持有管程,然后才能执行方法;最后当方法完成(正常或异常),释放管程。

    synchronized同步代码块,java虚拟机指令集中有monitorenter和monitorexit两条指令来支持synchronized关键字的语义。

    测试代码:

    public class SynchronizedTest {
        public synchronized void test(){}
    
        public void test1() {
            synchronized (SynchronizedTest.class) {
                System.out.println(1);
            }
        }
    }
    

    在这里插入图片描述

    在这里插入图片描述

    参考《深入理解java虚拟机》

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出。
  • 相关阅读:
    Unity项目
    Unity基本操作
    博客园自定义主题样式
    明解C语言
    C指针基础知识
    排序算法
    session理解与总结【session原理、应用、与cookie区别】
    cookie理解与实践【实现简单登录以及自动登录功能】
    【数据结构与算法】双指针思想——数组首部或尾部同向遍历
    【数据结构与算法】双指针思想——首尾双向遍历
  • 原文地址:https://www.cnblogs.com/caozibiao/p/14032766.html
Copyright © 2011-2022 走看看