第一次学习看字节码文件,这个对工作没什么用,但是会提升内功。

首先介绍两个IDEA插件以及使用:

  1. BinEd:以16进制格式查看class文件

    使用方法:右键class文件,点击Open as binary
  2. JClassLib:以一种更为方便的方式查看字节码,相当于javap -v HelloWorld.class

    使用方法:光标锁定在java源文件-->选IDEA上方菜单-->Show Bytecode With Jclasslib

分析如下java代码的字节码文件

package com.study.jvm;

public class T0100_ByteCode01 {
}

然后我们贴16进制文件进来,下方文件是基于编译器javac 1.8.0_45版本得到。(使用javac -version查看自己编译器版本)

CAFE BABE

第一个16进制数C,换算成十进制是12,换算成二进制是1100,一个C等于1100,是4位,一个字节占8位。所以一个CA代表一个字节。

然后就是一个字节一个字节的去看十六进制的规则了:

具体看的规则非常之枯燥,需要参考资料。

想看懂字节码还离不开指令集(如:aload_,bipush),这一些就是java的汇编。JVM执行的就是这些一个一个的指令。

指令集请参考官方JVM规范文档第6.5章【指令集与其含义】和第7章【opcode和指令的映射关系】。

助记符是指:因为JAVA里面的一条指令是用一个字节来表示的,所以从0X00到0Xff一共256个数字,其中每个数字都代表一条指令。

如:0x03代表的是指令iconst_0,iconst_0是助记符,0X03是真正的指令。他们是相等的。

其他园友的一篇很详细的字节码结构分析

https://www.cnblogs.com/chanshuyi/p/jvm_serial_05_jvm_bytecode_analysis.html

官方虚拟机规范和JAVA语言规范

我们可以在Oracle官网https://docs.oracle.com/javase/specs/index.html获取到任何版本的虚拟机规范和JAVA语言规范。里面全是一手资料,也是最最最最权威的文档。

参考资料:

1.官方JVM规范文档:https://docs.oracle.com/javase/specs/index.html

2.官方JVM8规范文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

3.《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》--周志明

4.马士兵老师课程内容

最新文章

  1. 关于Java数组
  2. 将图片压缩后转Base64函数
  3. 立即调用的函数表达式IIFE
  4. The data is said to include information from networks
  5. 你还没成为Delphi QC的成员吗?(转红鱼儿)
  6. SVN组成中trunk,branches and tags功能用法详解
  7. Linux安装VritualBox实现虚拟机win2003端口映射 支持远程
  8. Android设置背景图像重复【整理自网络】
  9. Ubuntu14.04LST 安装Oracle SQL Developer 4.0.2
  10. imagemagick /tmp/magick-xxxxxxxx
  11. 调整Tomcat的并发线程到5000+
  12. php和cookie
  13. Android中的服务
  14. JDK环境配置(Windows)
  15. ionic2中如何使用自动生成器
  16. javascript之继承
  17. 解决IE6中img标签 图片透明
  18. SPOJ PGCD
  19. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)
  20. 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡

热门文章

  1. 根据短链生成二维码并上传七牛云(Java)
  2. Docker详解(一)——
  3. python 常用的文件操作命令
  4. 第06课:GDB 常用命令详解(中)
  5. JS边角料: NodeJS+AutoJS+WebSocket+TamperMonkey实现局域网多端文字互传
  6. Linux目录同步到阿里云OSS工具ossutil
  7. POJ1321——棋盘问题
  8. webpack learn1-初始化项目1
  9. phpstorm一直 updating indices刷新
  10. 用Python做了个奇奇怪怪的打篮球游戏