目的
- 深入理解java,学习了解,本文记录一些个人认为有用的一些知识点
1.2 Java虚拟机
- Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式——Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。
2 Java虚拟机结构
- 如果只是要去“正确地”实现一台Java虚拟机,其实并不如大多数人所想的那样高深和困难——只需要正确读取Class文件之中每一条字节码指令,并且能正确执行这些指令所蕴含的操作即可。
2.2 数据类型
- 与Java程序语言中的数据类型相似,Java虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Reference Types)。虚拟机中使用reference类型①来表示对某个对象的引用,reference类型的值读者可以想象成类似于一个指向对象的指针。
2.3.4 boolean类型
- 虽然Java虚拟机定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,在Java语言之中涉及到boolean类型值的运算,在编译之后都使用Java虚拟机中的int数据类型来代替。
2.5 运行时数据区
- 见文后博客解析
2.11.8 方法调用和返回指令
- 以下四条指令用于方法调用:
“`
invokevirtual指令用于调用对象的实例方法,根据对象的实际类型进行分派(虚方法分派),这也是Java语言中最常见的方法分派方式。
invokeinterface指令用于调用接口方法,它会在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。
invokespecial指令用于调用一些需要特殊处理的实例方法,包括实例初始化方法(§2.9)、私有方法和父类方法。
invokestatic指令用于调用类方法(static方法)。
而方法返回指令则是根据返回值的类型区分的,
包括有ireturn(当返回值是boolea