在实际项目开发中,有时为了了解Java编译器内部的一些工作,需要查看Java文件对应的具体的字节码指令集,这里提供两种方式供参考. 一.使用javap命令      javap是JDK提供的一个原生工具,它可以反汇编class文件得到对应的字节码信息,通过调节命令参数,可以获取类的package.fileds和methods等的字节码信息,用的最多的参数也就是-verbose了:   二.Bytecode Outline插件       javap固然可以实现反编译字节码的效果,但是每…
JVM 字节码指令手册 - 查看 Java 字节码 jdk 进行的编译生成的 .class 是 16 进制数据文件,不利于学习分析.通过下命令 javap -c Demo.class > Demo.txt 或者其他方式可反汇编,得到字节码文件 一.JVM 指令分类 (1)操作数栈 过程 符号 变量到操作数栈 iload, iload_, lload, lload_, fload, fload_, dload, dload_, aload, aload_ 操作数栈到变量 istore, istor…
Java 字节码指令是 JVM 体系中非常难啃的一块硬骨头,我估计有些读者会有这样的疑惑,"Java 字节码难学吗?我能不能学会啊?" 讲良心话,不是我谦虚,一开始学 Java 字节码和 Java 虚拟机方面的知识我也感觉头大!但硬着头皮学了一阵子之后,突然就开窍了,觉得好有意思,尤其是明白了 Java 代码在底层竟然是这样执行的时候,感觉既膨胀又飘飘然,浑身上下散发着自信的光芒! 我在 博客园 共输出了 100 多篇 Java 方面的文章,总字数超过 30 万字, 内容风趣幽默.通俗…
本文由HeapDump性能社区首席讲师鸠摩(马智)授权整理发布 第17章-x86-64寄存器 不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Architecture),也可以称为指令集(instruction set).Intel将x86系列CPU之中的32位CPU指令集架构称为IA-32,IA是"Intel Architecture"的简称,也可以称为i386.x86-32.AMD等于Intell提出了x86系列的64位扩展,所以由AM…
前言 随着Java开发技术不断被推到新的高度,对于Java程序员来讲越来越需要具备对更深入的基础性技术的理解,比如Java字节码指令.不然,可能很难深入理解一些时下的新框架.新技术,盲目一味追新也会越来越感乏力. 本文既不求照本宣科,亦不求炫技或著文立说,仅力图以最简明.最形象生动的方式,结合例子与实战,让小白也能搞懂这门看似复杂的技术概念. 单刀直入 闲言碎语不要讲,先表一表,什么是Java字节码指令?简而言之,Java字节码指令就是Java虚拟机能够听得懂.可执行的指令,可以说是Jvm层面的…
在我们工作.学习.以及研究 JVM 过程当中,不可避免的要查看 Java 字节码,通过查看字节码可以了解一个类的编译结果,也能通过编译器层面来分析一个类的性能. 字节码文件是不能直接打开的,下面栈长教大家几种简单的方法如何查看 Java 字节码. 1.使用 javap 命令查看字节码 命令格式如下: javap -c xxx.class JDK 提供的了,不解释,来,演示操作一把: 如上所示,可以看到 Test 类的的字节码. 2.Intellij IDEA 中查看字节码 Intellij ID…
由于后面要分享的一篇文章中用到了这篇文章要推荐的一个插件,所以这里分享一下.非常实用!你会爱上它的! 开始推荐 IDEA 字节码查看神器之前,先来回顾一下 Java 字节码是啥. 何为 Java 字节码? Java 虚拟机(JVM)是运行 Java 字节码的虚拟机.JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果. 什么是字节码?采用字节码的好处是什么? 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .…
Java字节码指令大全 常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈. 0x02 iconst_m1 -1(int)值入栈. 0x03 iconst_0 0(int)值入栈. 0x04 iconst_1 1(int)值入栈. 0x05 iconst_2 2(int)值入栈. 0x06 iconst_3 3(int)值入栈. 0x07 iconst_4 4(int)值入栈. 0x08 iconst_5 5(int)值入栈.…
1. 简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成. 由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码. Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条. 2. 字节码和数据类型 在Java虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息.例如,iload指令用于从局部变量中加…
要理解 Java 字节码,比较推荐的方法是自己尝试编写源码对照字节码学习.其中阅读 Java 字节码的工具必不可少.虽然javap可以以可读的形式展示出.class 文件中字节码,但每次改动源码都需调用命令行并不方便.这里介绍一个可以辅助阅读 Java 字节码的 Eclipse 插件:bytecode outline. bytecode outline 插件用可读的方式展现了 Eclipse 的 Java 编辑器或类文件的字节码内容.它使用了 ASM 框 架的部分组建来实现对字节码的展示(ASM…