一、字节码详解
1.字节码的运行是在栈中进行的。
2.通过JDK中的编译器,用javac(java Compiler)命令编译源代码为字节码文件(.class),给JVM使用; 然后通过classLoader类加载器加载字节码; java源码 --> 编译成.class字节码 --> CL加载字节码 --> 字节码校验器 --> 字节码解释器 --> 硬件
3.字节码指令有哪些: monitorenter指令、monitorexit指令:在字节码对应位置加锁解锁;
iadd/ ladd/ fadd/ dadd指令:int/long/float/double的加法,弹出栈顶两个数字,求和之后压入栈顶;sub:减法
load指令: 将局部变量加载到栈; store指令: 把栈中的数据保存到局部变量表
new指令:创建对象; dup指令:复制顶部操作数的栈值
4.字节码增强技术在spring AOP、ORM框架、热部署中的应用。 // todo
二、Integer x=5, int y=5, 比较 x==y 都经过哪些步骤?
字节码角度讲int y=5单纯压入int类型变量,赋值为5,而Integer x=5则会调用Integer.valueOf()的方法。 x==y会使用到if_icmp指令比较。
三、java动态性
1.实现动态性的三种主要方式:
反射机制:性能较低,setAccessible=true可以快一点
动态编译:JavaCompiler动态编译
动态字节码操作:性能比反射高