SlideShare a Scribd company logo
1 of 29
Java字节码
申艳超
个人简介
申艳超
2015入职链家 搜索技术负责人
百度 内搜、babel、Baidu Hi搜索
北京理工大学 自然语言处理方向
大纲
一 引论
二 什么是字节码
三 JVM指令集
四 流行的开源框架
lombok
@Getter and @Setter
@NonNull
@ToString
@EqualsAndHashCode
@Data
@Cleanup
@Synchronized
@SneakyThrows
AOP
AspectJ(ajc编译)
Spring aop
BTrace
代码覆盖率
JVM Language
Fantom
Fortress
(and many more…)
BeanShell
Jaskell
ANTLR
JudoScript
ABCL
Erjang
X10
myForth
C
jdart
jgo
Nice
Gosu
Jacl
什么是字节码
bytecode
Java
Write once, run everywhere
什么是字节码(Byte Code)
什么是字节码?
JVM-多种实现
Sun Classic/Extract VM
Sun HotSpot VM (jdk1.2+)
BEA JRockit VM
IBM J9 VM
移动/嵌入式:KVM,CDC/CLDC HotSpot, Squawk VM, JavaInJava,
MaxineVm
Azul VM,BEA Liquid VM
Android Dalvik VM
Microsoft JVM
字节码格式
Bytecode viewer
javap –verbose XX.class
JVM指令集
Instruction Set
JVM 指令集
Constants (0~20)
Loads(21~53)
Stores(54~86)
Stack(87~95)
Math(96~132)
Conversions(133~147)
Comparisons(148~166)
Control (167~177)
References(178~195)
Extended (196~201)
Reserved (202、254、255)
JVM指令集概览
JVM运行机制
JVM指令助记-操作数栈
变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_
操作数栈到变量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_
常数到操作数栈:
bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_
把数据装载到操作数栈:baload,caload,saload,iaload,laload,faload,daload,aaload
从操作数栈存存储到数组:bastore, castore,sastore,iastore,lastore,fastore,dastore,aastore
操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap
JVM指令助记-运算与转换
加:iadd,ladd,fadd,dadd
减:is ,ls ,fs ,ds
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余数:irem,lrem,frem,drem
取负:ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位与:iand,land
按位异或:ixor,lxor
类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换)
i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)
JVM指令助记-条件转移
有条件转移:
ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,
if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fc
mpl,fcmpg,dcmpl,dcmpg
复合条件转移:tableswitch,lookupswitch
无条件转移:goto,goto_w,jsr,jsr_w,ret
JVM指令助记-类与数组
创建类实便:new
创建新数组:newarray,anewarray,multianwarray
访问类的域和类实例域:getfield,putfield,getstatic,putstatic
获取数组长度:arraylength
检查类实例或数组属性:instanceof,checkcast
JVM指令助记-调用与返回
调度对象的实现方法:invokevirtual
调用由接口实现的方法:invokeinterface
调用需要特殊处理的实例方法:invokespecial
调用命名类中的静态方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
异常:athrow
finally关键字的实现使用:jsr,jsr_w,ret
流行的开源框架
开源框架
asm
javassist
BCEL
byte-buddy
Demo展示
asm
javassist
参考
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
http://download.forge.objectweb.org/asm/asm4-guide.pdf
https://github.com/javaparser/javaparser
https://java-source.net/open-source/bytecode-libraries
http://blog.csdn.net/column/details/zhangjg-java-blog.html
https://www.slideshare.net/RednaxelaFX/jvm-a-platform-for-multiple-
languages
http://www.infoq.com/cn/articles/jvm-family
http://blog.csdn.net/luanlouis/article/details/50412126
Thanks!

More Related Content

Similar to Java bytecode

Java program in_action
Java program in_actionJava program in_action
Java program in_actionmysqlops
 
Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦chenjianxing
 
Jvm分享20101228
Jvm分享20101228Jvm分享20101228
Jvm分享20101228lunfu zhong
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲ArBing Xie
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查bluedavy lin
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java建興 王
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版Simen Li
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)xzdbd
 
Spring boot 简介
Spring boot 简介Spring boot 简介
Spring boot 简介宇帆 盛
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查ayanamist
 
Jvm独家剖析
Jvm独家剖析Jvm独家剖析
Jvm独家剖析li yan
 
漫谈php和java
漫谈php和java漫谈php和java
漫谈php和javasulong
 
Effective.enterprise.java中文版
Effective.enterprise.java中文版Effective.enterprise.java中文版
Effective.enterprise.java中文版Peter Fan
 
实战Ejb(最终完美版)
实战Ejb(最终完美版)实战Ejb(最终完美版)
实战Ejb(最终完美版)yiditushe
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasuscnfi
 

Similar to Java bytecode (20)

Java program in_action
Java program in_actionJava program in_action
Java program in_action
 
Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦
 
Jvm分享20101228
Jvm分享20101228Jvm分享20101228
Jvm分享20101228
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
 
Spring boot 简介
Spring boot 简介Spring boot 简介
Spring boot 简介
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Jvm独家剖析
Jvm独家剖析Jvm独家剖析
Jvm独家剖析
 
漫谈php和java
漫谈php和java漫谈php和java
漫谈php和java
 
LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
beidakejian
beidakejianbeidakejian
beidakejian
 
Effective.enterprise.java中文版
Effective.enterprise.java中文版Effective.enterprise.java中文版
Effective.enterprise.java中文版
 
实战Ejb(最终完美版)
实战Ejb(最终完美版)实战Ejb(最终完美版)
实战Ejb(最终完美版)
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasus
 

Java bytecode

Editor's Notes

  1. 不完全是使用字节码
  2. 动词OR名词 总之,加快搜索效率