jvm(5)

jvm的无关性

1. 平台无关性,这是建立在操作系统上的,许多虚拟机厂商提供了可以运行在不同系统上的虚拟机,实现了载入和执行字节码文件
2. 语言无关性,虚拟机不与Java绑定,之和。class文件有关,这个文件包含了虚拟机指令
3. 画个图
.java 经过javac编译器 ->.class
.rb 经过jrubyc编译器 ->.class
.groovy 经过groovy编译器 ->.class 统一执行在java虚拟机

.class文件

1. 查看工具有 sublime javap -v jclasslib(idea)
2. .class 文件是一个十六进制的文件,其中没有分隔符,所以很紧凑
3. 文件格式:无符号数和表,
4. 无符号 u1,其中1代表一个字节,一个字节代表俩位十六进制的数字
5. 表是由多个无符号数字组成或者其他表组成。一般由_info结尾

.class文件中的魔数与jdk版本

1. magic number (u4) 表示文件是否能被虚拟机接受,
2.紧接着的时jdk的版本号,分为大版本小版本,u2 u2, 对应的十进制 52.0

.class文件中的常量池

1. 常量池的入口放一个 u2数据作为常量池的计数器
2. 常量池主要存储字面量和符号引用,字面量就是字符串之类的具体值,符号引用方法名之类

.class文件中的访问标志

1. 表示当前这个class的类型,访问权限

.class类索引,夫类索引,接口索引集合
.class类字段表的集合
.class类方法表的集合

1.
2.

.class类属性表的集合
.class类字节码指令

1. methods:里面都是method_info

.class类加载和存储指令
.class类运算指令
.class类类型转换指令

1. i2b :2代表to

.class类创建实例的指令

1. new

.class类创建数组的指令

1. newarray

.class访问字段指令

1. getfield、putfield、getstatic、putstatic。

.class字节码指令处理异常 重要

1. 通过goto实现

.class文件自己码指令装箱拆箱

1. int->integer integer-int
2. integerCache 这个涉及到缓存,下线-128,上线自定义时127可以改,-vm参数修改

.class文件字节码指令-数组

1. 创建数组 newarray
2. 获取数组的长度arraylengh

.class文件的foreach

1. 通过迭代器实现

.class文件的注解@
.class总结

1. 比如异常的处理、finally 块的执行顺序;以及隐藏的装箱拆箱和 foreach 语法糖的底层实现。 还有字节码指令,可能有几千行,看起来很吓人,但执行速度几乎都是纳秒级别的。Java 的无数框架,包括 JDK,也不会为了优化这种性能对代码进行 限制。了解其原理,但不要舍本逐末,比如减少一次 Java 线程的上下文切换,就比你优化几千个装箱拆箱动作,速度来的更快一些

posted @ 2020-07-31 10:54  小傻孩丶儿  阅读(97)  评论(0)    收藏  举报