Successfully reported this slideshow.
Your SlideShare is downloading. ×

Java bytecode

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Java常见问题排查
Java常见问题排查
Loading in …3
×

Check these out next

1 of 29 Ad

More Related Content

Similar to Java bytecode (20)

Advertisement

Java bytecode

  1. 1. Java字节码 申艳超
  2. 2. 个人简介 申艳超 2015入职链家 搜索技术负责人 百度 内搜、babel、Baidu Hi搜索 北京理工大学 自然语言处理方向
  3. 3. 大纲 一 引论 二 什么是字节码 三 JVM指令集 四 流行的开源框架
  4. 4. lombok @Getter and @Setter @NonNull @ToString @EqualsAndHashCode @Data @Cleanup @Synchronized @SneakyThrows
  5. 5. AOP AspectJ(ajc编译) Spring aop
  6. 6. BTrace
  7. 7. 代码覆盖率
  8. 8. JVM Language Fantom Fortress (and many more…) BeanShell Jaskell ANTLR JudoScript ABCL Erjang X10 myForth C jdart jgo Nice Gosu Jacl
  9. 9. 什么是字节码 bytecode
  10. 10. Java Write once, run everywhere
  11. 11. 什么是字节码(Byte Code)
  12. 12. 什么是字节码?
  13. 13. 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
  14. 14. 字节码格式
  15. 15. Bytecode viewer javap –verbose XX.class
  16. 16. JVM指令集 Instruction Set
  17. 17. 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)
  18. 18. JVM指令集概览
  19. 19. JVM运行机制
  20. 20. 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
  21. 21. 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(缩窄数值转换)
  22. 22. 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
  23. 23. JVM指令助记-类与数组 创建类实便:new 创建新数组:newarray,anewarray,multianwarray 访问类的域和类实例域:getfield,putfield,getstatic,putstatic 获取数组长度:arraylength 检查类实例或数组属性:instanceof,checkcast
  24. 24. JVM指令助记-调用与返回 调度对象的实现方法:invokevirtual 调用由接口实现的方法:invokeinterface 调用需要特殊处理的实例方法:invokespecial 调用命名类中的静态方法:invokestatic 方法返回:ireturn,lreturn,freturn,dreturn,areturn,return 异常:athrow finally关键字的实现使用:jsr,jsr_w,ret
  25. 25. 流行的开源框架
  26. 26. 开源框架 asm javassist BCEL byte-buddy
  27. 27. Demo展示 asm javassist
  28. 28. 参考 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
  29. 29. Thanks!

Editor's Notes

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

×