在Myeclipse下查看Java字节码指令信息

在实际项目开发中,有时为了了解Java编译器内部的一些工作,需要查看Java文件对应的具体的字节码指令集,这里提供两种方式供参考。

一、使用javap命令

javap是JDK提供的一个原生工具,它可以反汇编class文件得到对应的字节码信息,通过调节命令参数,可以获取类的package、fileds和methods等的字节码信息,用的最多的参数也就是-verbose了:

 

二、Bytecode Outline插件

javap固然可以实现反编译字节码的效果,但是每次都要在命令行中执行,显得有点麻烦,而且通过反编译生成的指令简直就不是给人看的,基本看不懂。这里推荐一款工具Bytecode Outline,它是专门为Eclipse打造的反编译插件,不仅可以查看反编译生成字节码指令集,还提供了所有指令的详细说明。首先在Myeclipse安装该插件需要知道Myeclipse对应的Eclipse版本号,可以查看下面的文件获取:

D:\MyEclipse\MyEclipse 10\readme\readme_eclipse.html

然后是下载安装插件,这里就不介绍了,如果是手动安装,这里提供插件下载地址:http://andrei.gmxhome.de/bytecode/links.html

关于插件的使用,官方文档说的很清楚了,我就不翻译了:

Usage:

1) Window -> Show View -> Other -> Java -> Bytecode

to see bytecode of current Java editor/ Class file view. The automatic build for projects should be enabled in order to see generated class files.

If "Link with editor" is on, then any selection in Java editor will be followed with selection of appropriated bytecode label, and vice - versa.

Note: this bi-directional selection could only works, if your bytecode contains source lines/local variables information. Check your compiler setings, if you are not sure that your compiler generates debug information.

If "show raw bytecode" is off, than local variable names will be shown instead of indexes, full qualified names replaced with simply class names, and primitive type abbreviations decoded to readable names.

If "show current element only" is on, then only bytecode of current field/method node will be shown (if cursor is placed inside field/method name or body).

2.1) Select two *.class/*.java files -> right click -> Compare with -> Each Other Bytecode

2.2) Select one *.class/*.java file -> right click -> Compare with -> Another Class Bytecode

to compare bytecode of selected class files. Compare works also for *.class files included in any referenced *.jar library.

"Toggle ASMifier mode on/off" button on both Bytecode Outline and Compare View shows ASMifier java code, that generates selected bytecode. More information about how to use ASMifier you can find here.

Note: if ASMifier mode is "on", then selection of java code cannot be folowed by selection of appropriated bytecode instruction, and vice - versa; the "show raw bytecode" action is also meaningless.

3) Window -> Show View -> Other -> Java -> Bytecode reference

to see reference documentation to selected bytecode instruction in the bytecode view. This documentation is taken from "Java Virtual Machine" by Jon Meyer & Troy Downing Copyright (c) 1997 by O‘Reilly & Associates, and provided with permission of O‘Reilly Media, Inc. Packaging, cleanup, reformatting and XSL transformation completed by Eugene Kuleshov ([email protected]).

4) Help -> Help contents -> JVM Instruction Reference

to see the entire bytecode reference documentation, provided with BCO plugin.

最后的效果如下所示:

时间: 2024-11-09 23:58:14

在Myeclipse下查看Java字节码指令信息的相关文章

【转】在Eclipse里查看Java字节码

要理解 Java 字节码,比较推荐的方法是自己尝试编写源码对照字节码学习.其中阅读 Java 字节码的工具必不可少.虽然javap可以以可读的形式展示出.class 文件中字节码,但每次改动源码都需调用命令行并不方便.这里介绍一个可以辅助阅读 Java 字节码的 Eclipse 插件:bytecode outline. bytecode outline 插件用可读的方式展现了 Eclipse 的 Java 编辑器或类文件的字节码内容.它使用了 ASM 框 架的部分组建来实现对字节码的展示(ASM

Java字节码指令

1. 简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成. 由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码. Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条. 2. 字节码和数据类型 在Java虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息.例如,iload指令用于从局部变量中加

【Java字节码】Idea中查看Java字节码的插件jclasslib Bytecode viewer

Idea插件搜索:jclasslib Bytecode viewer 安装完后,maven install你的项目(因为该插件会读取target下的class文件),然后选中某个java文件,按下图操作即可查看对应的字节码 详情:jclasslib Bytecode viewer 原文地址:https://www.cnblogs.com/756623607-zhang/p/11062087.html

用Eclipse插件Bytecode Outline来查看Java字节码

在遇到一些小问题的时候我们经常会使用Javap反编译取得字节码来分析,虽然Javap能完成这个工作,但是有两个缺点,一方面操作麻烦,需要很多步骤,一方面没有文档注释,对新手来说看起字节码来比较麻烦. 这里推荐一个工具,Bytecode Outline .它是Eclipse的插件,可以把当前的正在编辑Java的文件或者class文件直接显示出其相应的字节码出来,而且可以进行两个Java文件的字节码比较或者两个class文件的字节码比较或一个Java文件与一个class文件进行字节码的比较. 安装方

如何查看 Java 字节码

1.使用 javap 命令查看字节码 命令格式如下: javap -c xxx.class 2.Intellij IDEA 中查看字节码 原文地址:https://www.cnblogs.com/xavier-2019/p/12191308.html

JAVA字节码解析

Java字节码指令 Java 字节码指令及javap 使用说明 ### java字节码指令列表 字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07 iconst_4

【java】查看Java字节码文件内容的方法+使用javap找不到类 解决方法

研究synchronized底层实现,涉及到查看java字节码的需要 前提是,你的PC已经成功安装了JDK并别配置了环境变量. ==========查看方法========= 一.javap查看简约字节码方式 1.准备一个java文件 例如,文件所在目录在此处 Student.java文件内容如下: package com.sxd.sweeping.test.synchron; public class Student implements Runnable{ static int age; p

java字节码速查笔记

java字节码速查笔记 发表于 2018-01-27 |  阅读次数: 0 |  字数统计: |  阅读时长 ≈ 执行原理 java文件到通过编译器编译成java字节码文件(也就是.class文件),这个过程是java编译过程:而我们的java虚拟机执行的就是字节码文件.不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java虚拟机的规范,那么它就能够执行该字节码文件 字节码学习好文 http://blog.csdn.net/shenhonglei1234/articl

深入理解java虚拟机(六)字节码指令简介

Java虚拟机指令是由(占用一个字节长度.代表某种特定操作含义的数字)操作码Opcode,以及跟随在其后的零至多个代表此操作所需参数的称为操作数 Operands 构成的.由于Java虚拟机是面向操作数栈而不是寄存器的架构,所以大多数指令都只有操作码,而没有操作数. 字节码指令集是一种具有鲜明特点.优劣势都很突出的指令集架构: 由于限定了Java虚拟机操作码的长度为1个字节,指令集的操作码不能超过256条.Class文件格式放弃了编译后代码中操作数长度对齐,这就意味者虚拟机处理那些超过一个字节数