转载来自:https://blog.csdn.net/w605283073/article/details/103209221

一、背景

很多人想学习Java反汇编后的字节码,但是一方面缺乏好的资料,另外一方面缺乏好的工具。

关于资料大家可以看 《Java虚拟机规范》、《深入理解Java虚拟机》,还可以购买 JVM字节码相关的专栏。

虽然大家可以使用 JDK 自带的 javap 命令行工具,但是总是有些不方便。

那么有啥好的工具吗?

有。

叫啥?

jclasslib bytecode viewer

接下来详细介绍下这款神器。

二、详解

2.1 是什么?

github 地址https://github.com/ingokegel/jclasslib

jclasslib bytecode viewer is a tool that visualizes all aspects of compiled Java class files and the contained bytecode.

jclasslib bytecode viewer 是一个可以可视化已编译Java类文件和所包含的字节码的工具。 另外,它还提供一个库,可以让开发人员读写Java类文件和字节码。

2.2 为什么?

有 javap指令还需要这个干啥哩?

如果你真觉得 javap 非常好用,非常顺手,可以不需要这个软件。

但是很多人不喜欢总是敲命令,如果总是敲命令就会降低自己看字节码的频率。

此时可以尝试使用该插件。

2.3 安装和使用

2.3.1 安装

建议直接通过idea的插件库搜索安装然后重启即可,下面我已经安装过了。

点击  Install安装,安装后点击  Restart IDE 重启 IDEA

2.3.2使用

使用时直接选择 View --> Show Bytecode With jclasslib

注意:如果是自己项目的源码需要先编译

jclasslib窗口

可以查看基本信息、常量池、接口、属性、函数等信息。

主要优点:

1 不需要使用javap指令,使用简单

2 点击字节码指令可以跳转到 java虚拟机规范对应的章节。

比如我们想了解 putstatic 的含义,可以点击该指令

自动通过浏览器打开虚拟机规范并定位到该指令位置,非常方便。

三、看法

可能有一些人觉得学习字节码没有必要,并不影响自己的学习,也不影响平时开发。

但是人总是根据自己已经掌握的内容来解决问题。

有一个很有意思的现象,有时候你认为的“用不到”,只不过是不想学的理由,只不过是因为没掌握真正需要的场景你想不到用而已。

举一个现实的例子:

比如你是一个文科生,你对计算机不是很了解,老师发给你一张图片有几千个文字,让你打成文字。

如果你不了解很多知识,手工打字,可能耗时3小时。

此时如果你了解过语音输入,你可以自己读然后语音自动转成文字,然后稍微修改一些小错误即可,比如用时1小时,大大节省了时间。

此时如果你了解OCR文字识别软件,你可以找免费的或者收费的OCR软件,5分钟以内解决问题。

其实学习技术也是这样,你如果是突击出来的专业基础不扎实,你就很难从专业底层的角度思考问题的本质。

如果你不学习字节码,你就难从字节码层面去分析和理解问题。

比如 Java 语言的很多语法糖,通过反汇编可以快速轻松掌握。

但是很多人喜欢速成,喜欢看别人介绍的内容而不是自己能过自主学习和研究,其实这也恰恰是很多学不好的根本原因之一。

不是每个人都一定要学反汇编,但是如果你想自主学习,想深入学习,建议可以主动研究。

四、总结

本文主要介绍了 IDEA 字节码查看插件:jclasslib bytecode viewer。讲到了该插件的安装和使用,非常简单。

如果对字节码感兴趣,想深入学习,平时开发中搭配这个插件来学习效果极佳。

 

IDEA字节码学习查看神器jclasslib bytecode viewer介绍的更多相关文章

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

    Idea插件搜索:jclasslib Bytecode viewer 安装完后,maven install你的项目(因为该插件会读取target下的class文件),然后选中某个java文件,按下图操 ...

  2. idea 查看字节码 bytecode插件 (jclasslib Bytecode Viewer、ASM Bytecode Viewer )

    文章目录 jclasslib Bytecode Viewer ASM Bytecode Viewer jclasslib Bytecode Viewer 然后重启idea===>重新编译(构建项 ...

  3. idea安装插件 JClassLib Bytecode viewer

    目录 idea安装插件 JClassLib Bytecode viewer 安装过程 使用 idea安装插件 JClassLib Bytecode viewer IDEA 中安装 jClassLib ...

  4. idea反编译jar包,jclasslib Bytecode Viewer

    下载 jclasslib Bytecode Viewer https://plugins.jetbrains.com/plugin/9248-jclasslib-bytecode-viewer/ver ...

  5. 【Spark2.0源码学习】-8.SparkContext与Application介绍

             在前面的内容,我们针对于RpcEndpoint启动以及RpcEndpoint消息处理机制进行了详细的介绍,在我们的大脑里,基本上可以构建Spark各节点的模样.接下来的章节将会从Sp ...

  6. 在Eclipse里查看Java字节码

    要理解 Java 字节码,比较推荐的方法是自己尝试编写源码对照字节码学习.其中阅读 Java 字节码的工具必不可少.虽然javap可以以可读的形式展示出.class 文件中字节码,但每次改动源码都需调 ...

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

    要理解 Java 字节码,比较推荐的方法是自己尝试编写源码对照字节码学习.其中阅读 Java 字节码的工具必不可少.虽然javap可以以可读的形式展示出.class 文件中字节码,但每次改动源码都需调 ...

  8. ASM字节码框架学习之动态代理

    ASM字节码操纵框架,可以直接以二进制的形式来来修改已经存在的类或者创建新的类.ASM封装了操作字节码的大部分细节,并提供了非常方便的接口来对字节码进行操作.ASM框架是全功能的,使用ASM字节码框架 ...

  9. 记一次使用修改字节码的方法解决java.lang.NoSuchMethodError

    接兔兔国际sdk ane 充值界面选择兔币充值就会闪退, 观察logcat 04-19 10:10:54.224: E/AndroidRuntime(20315): FATAL EXCEPTION: ...

随机推荐

  1. basicRF双向灯光控制

    题目: 实现基于BasicRF无线点对点通信的双向灯光控制,具体要求如下: 1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义.<2> 按下节点 ...

  2. LeetCode 62,从动态规划想到更好的解法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths. 题意 其实这是一道老掉牙的题目了 ...

  3. java项目部署Linux服务器几种启动方式总结经验

    一:两种部署包: 部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是ja ...

  4. jar包名修改工具

    jar包名修改工具 软件传送门:链接: https://pan.baidu.com/s/12StRdEkYGmMn1DuNSquXSw   提取码: i9w1 闲暇之余,利用jarjar.jar写了一 ...

  5. Elasticsearch URI search 查询语法整理

    Elasticsearch URI search 一.请求体查询与空查询 1. 请求体查询(request body search) 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如 ...

  6. JavaScript(对象的创建模式)

    JavaScript和其他语言略有不同,在JavaScript中,引用数据类型都是对象(包括函数).不过,在JavaScript中并没有“类”的概念,这决定了在JavaScript中不能直接来定义“类 ...

  7. 【Redis】List常见应用场景

    常用数据结构 Stack(栈) = LPUSH + LPOP ->FILO Queue(队列) = LPUSH + RPOP Blocking MQ(阻塞队列) = LPUSH + BRPOP ...

  8. 【Redis】String应用场景

    单值缓存 SET key value GET key 对象缓存 SET user: value(json格式数据) MSET user::name value1 user::balance value ...

  9. A + B Problem(hdu1000)

    注意,认真读题目的Input要求,看看是输入一组测试数据还是输入多组测试数据.输入多组数据,不要忘记while(). #include<iostream> using namespace ...

  10. 【pyecharts】地图显示不全

    官网给的解释如下: 自从 0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件. 如用户需要用到地图图表,可自行安装对 ...