1、概述
作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?
运行着的线上系统突然卡死,系统无法访问,甚至直接OOM
想解决线上JVM GC问题,但却无从下手
新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了
每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼
想解决这些难题,就不得不直面JVM和已编译Java类文件的字节码,在学习字节码过程中jclasslib显然已称得上神器了(当然通过"javap -v xx.class" 也可以得到反编译字节码文件)。
jclasslib字节码编辑器是一个可视化已编译Java类文件和包含的字节码的工具。可以在UI中编辑类文件的许多方面。此外,它还包含一个库,使开发人员能够读写Java类文件和字节码。支持window、mac独立版本软件以及Idea插件。
不同风格的UI。通过在主菜单中选择“文件->暗模式”,可以持续启用暗模式。
支持中文语言切换,非常Nice
2、官网
https://github.com/ingokegel/jclasslib
3、Idea安装jclasslib
我这边就演示下idea下安装jclasslib怎么用,如果需要独立安装jclasslib可自行去官网下载安装。
Idea版本
我这边用的是mac版本的idea,window版本大同小异。
进入Plugins中心
安装完重启Idea
4、Idea中使用jclasslib
示例代码
/**
* @author liuchao
* @date 2023/2/16
*/
public class Test01 {
public static void main(String[] args) {
System.out.println("hello jclasslib");
}
}
编译
针对每个指令如果不懂的,可以选中点击,即可跳转到java虚拟机规范中查看(不过是英语版本的,自行翻译)
5、UI界面方法详解
5.1、clinit方法(虚拟机视角下的类构造器)
java类的加载会经过 加载->验证->准备->解析->初始化 几个阶段。其中类初始化阶段就是执行此方法的。
此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。注意是类变量和静态代码块中的代码合并而成。
此方法中指令按语句在源文件中出现的顺序执行。
我们通过3个实例详解
无类变量和静态代码块:解释类变量和静态代码块中的代码合并而成
有类变量或者静态代码块:解释类变量和静态代码块中的代码合并而成
同时拥有类变量和静态代码块,类变量都赋值,但是类变量和静态代码块上下顺序不一致结果页不一致:解释此方法中指令按语句在源文件中出现的顺序执行。