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

首先介绍两个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.马士兵老师课程内容

【Java虚拟机1】Java字节码文件格式入门的更多相关文章

  1. java虚拟机(十四)--字节码指令

    字节码指令其实是很重要的,在之前学习String等内容,深入到字节码层面很容易找到答案,而不是只是在网上寻找答案,还有可能是错误的. PS:本文基于jdk1.8 首先写个简单的类: public cl ...

  2. 深入理解java虚拟机(一)-----java内存区域以及内存溢出异常

    概述 Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实现这一特点的关键.一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码.而引入Java语言虚拟机后,J ...

  3. JVM总结-虚拟机怎么执行字节码

    1. JRE,JDK JRE : 包含运行 Java 程序的必需组件,Java 虚拟机+ Java 核心类库等. JDK :  JRE + 一系列开发.诊断工具. 2. java字节码 编译器将 Ja ...

  4. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  5. 深入理解java:1.2. 字节码执行引擎

    执行引擎是Java虚拟机的核心组成部分之一. 首先,想想C++和Java在编译和运行时到底有啥不一样? 下图左边,C++发布的就是机器指令, 而下图右边Java发布的是字节码,字节码在运行时通过JVM ...

  6. 深入理解java虚拟机【Java Class类文件结构】

    Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...

  7. 深入理解 Java 虚拟机——走近 Java

    1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于 嵌入式 ...

  8. JAVA虚拟机体系结构JAVA虚拟机的生命周期

    一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果同一台计算机上同时运行三个Jav ...

  9. Java虚拟机三 Java堆和栈

    Java堆是和Java应用程序关系最为紧密的内存空间,几乎所有的对象都存放在堆中.并且堆是完全自动化管理的. 根据垃圾回收机制的不同,Java堆有可能有不同的结构.最为常见的一种就是将整个Java堆分 ...

随机推荐

  1. struts2的初步认识

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 一. Str ...

  2. Sentry Web 性能监控 - Web Vitals

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  3. 密码学系列之:bcrypt加密算法详解

    目录 简介 bcrypt的工作原理 bcrypt算法实现 bcrypt hash的结构 hash的历史 简介 今天要给大家介绍的一种加密算法叫做bcrypt, bcrypt是由Niels Provos ...

  4. 【Python】python 2.7.16 x64 百度网盘

    倒霉官网下载太慢,下好了分享出来,也给自己留一个备份. 链接:点这里提取码:znaf PS: py2.7版本 for win 64位

  5. 简单了解Phar代码打包工具的使用

    简单了解Phar代码打包工具的使用 Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具.本质上是想依照 Java 的 Jar 文件那种形式的代码包,不过本身由于 PHP 是不编译的,所以这 ...

  6. 一起搞懂PHP的错误和异常(一)

    在PHP的学习过程中,我们会接触到两个概念,一个是错误,一个是异常.啥玩意?他们不是一个东西嘛?如果接触过Java.C#之类的纯面向对象语言的同学,可能对异常是没有什么问题,毕竟所有的问题都可以try ...

  7. javascript,jquery在父窗口触发子窗口(iframe)某按钮的click事件

    $('iframe').contents().find(".btn").click(); 其中 contents(): 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个 ...

  8. Linux系列(41) - 监听命令Vmstart,Top(还需完善)

    一.简介 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控:属于sysstat包:它是对系统的整体情况进行统计 ...

  9. centos7安装sonarqube与使用

    https://www.cnblogs.com/mascot1/p/11179767.html https://blog.csdn.net/superbfly/article/details/1039 ...

  10. 鸿蒙内核源码分析(索引节点篇) | 谁是文件系统最重要的概念 | 百篇博客分析OpenHarmony源码 | v64.01

    百篇博客系列篇.本篇为: v64.xx 鸿蒙内核源码分析(索引节点篇) | 谁是文件系统最重要的概念 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么 ...