Java字节码与javap命令:读懂.class文件,彻底理解JVM执行原理!(2026版)

javap使用总结 目录 一、解析字节码的作用 二、javac -g操作 三、javap主要参数的使用 四、解读javap解析得到的文件结构 五、小结 一、解析字节码的作用 通过反编译生成的字节码文件,我们可以深入的了解java代码的工作机制。但是,自己分析类文件结构太麻烦了!除了使用第三方的jclasslib工具之外,oracle官方也提供了工具:javap。 javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区 (字节码指令)、局部变量表、异常表和代码行偏 阅读详情

📖 第43篇:Java字节码,javap命令,解读字节码清单

📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第42篇:finalize、引用计数、JVM停止复制、JVM即时编译器 |
➡️ 下一篇:第44篇:jd-gui反编译class文件,解决中文乱码问题


一、核心知识点

  • 字节码的作用:Java 跨平台的关键,.class 文件内容
  • javap 命令的使用:反汇编查看字节码
  • 常见字节码指令:aload_0、invokespecial、invokevirtual、getstatic、ldc、return 等
  • 通过字节码理解语法糖(泛型擦除、自动拆装箱、foreach、try-with-resources)
  • 局部变量表与操作数栈的关系
  • javac -g 参数:生成调试信息(局部变量表、行号表)

二、通俗讲解(1分钟开心学)

1. 什么是字节码?

Java 源码被编译后生成的不是机器码,而是 .class 文件,里面是“字节码”(bytecode)——一种中间表示,类似于汇编语言,但与平台无关。JVM 负责将字节码解释/编译为本地机器码。

生活类比:
字节码就像乐谱(.class),JVM 就像钢琴家(不同平台的钢琴家都能演奏同一份乐谱,Windows钢琴、Linux钢琴、macOS钢琴,但认的都是同一份乐谱)。javap 就像把乐谱翻译成简谱,方便你研究曲子结构。Java源码 → 字节码 → JVM → 机器码,这一层一层的翻译,就是跨平台的秘密。

2. javap 命令能做什么?

javap 是 JDK 自带的反汇编工具,可以将 .class 文件反编译成可读的字节码指令。javap 输出的 iconst_1、astore_0、invokevirtual 这些,是字节码的助记符(mnemonics),类似汇编风格的可读表示,但和真实 CPU 指令无关。

JDK 自带的 javap 命令是查看 Java 字节码最基础的原生工具,无需额外安装就能直接使用。

三、javap 常用参数全解析(一图看懂)

参数输出内容使用场景
javap MyClass仅显示 public 成员签名快速查看类结构
javap -c MyClass方法体字节码指令(最常用)日常源码逻辑验证
javap -v MyClass常量池、行号表、局部变量表全量信息深度 JVM 加载逻辑分析
javap -s MyClass内部类型签名泛型逻辑合规校验
javap -l MyClass行号表与局部变量表异常堆栈定位
javap -p MyClass显示 private 成员(默认不显示)调试私有方法

四、字节码指令速查表(面试常考)

指令含义示例
aload_0将局部变量表第0个引用压栈(非静态方法中是 this)实例方法开头必有
iload_1 / istore_1int 类型加载/存储到 slot 1操作 int 变量
lload_0 / lstore_0long 类型加载/存储(占连续两个 slot)操作 long 变量
getstatic获取静态字段值System.out 静态变量
putstatic设置静态字段值修改 static 变量
ldc将常量(字符串、int)压栈ldc #3 // String "Hello"
invokespecial调用构造方法、私有方法、父类方法super() 调用
invokevirtual调用实例方法(动态绑定)普通方法调用
invokestatic调用静态方法工具类方法调用
iadd / isubint 加减运算a + b
ireturn / areturn返回 int / 引用类型方法返回值
returnvoid 方法返回无返回值的方法
checkcast类型检查(泛型擦除后出现)(String) list.get(0)

💡 aload_0 详解:aload_0 的作用是把局部变量表中0号槽位的变量加载到操作数栈上,JVM 解释器大部分指令都需要从操作数栈读取数据。这里的0号变量在实例方法中固定是 this。紧接着执行 invokespecial 调用父类构造方法。

五、实操代码案例 + 场景说明

场景1:编译并反编译 HelloWorld

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

编译:

javac HelloWorld.java

反编译查看字节码(核心!建议亲自执行):

javap -c HelloWorld

输出字节码:

public static void main(java.lang.String[]);
  Code:
     0: getstatic     #2   // Field java/lang/System.out:Ljava/io/PrintStream;
     3: ldc           #3   // String Hello, World!
     5: invokevirtual #4   // Method java/io/PrintStream.println:(Ljava/lang/String;)V
     8: return

逐行解读:

  • 0: getstatic #2 → 从常量池 #2 获取 System.out 静态变量,压入操作数栈
  • 3: ldc #3 → 从常量池 #3 加载字符串 "Hello, World!",压入操作数栈
  • 5: invokevirtual #4 → 调用 println 方法,消耗栈顶的两个参数(对象+字符串)
  • 8: return → 方法返回

场景2:生成调试信息(局部变量表)

# 不加 -g,局部变量表为空
javac HelloWorld.java
javap -l HelloWorld  # 没有 LineNumberTable

# 加 -g 参数,生成完整调试信息
javac -g HelloWorld.java
javap -l HelloWorld  # 有 LineNumberTable 和 LocalVariableTable

场景3:查看完整类信息(常量池 + 局部变量表)

javap -v HelloWorld

这会输出常量池、字段信息、方法签名、行号表等全部细节,是深度分析类的核心命令。

场景4:变量存取指令跟踪(理解局部变量表与操作数栈)

编写如下代码:

public class Calc {
    public int calc() {
        int a = 10;
        if (a > 5) {
            int b = 20;
            return a + b;
        }
        return a;
    }
}

编译后执行 javap -v Calc,重点关注 LocalVariableTable:

  • 方法参数从 slot 0 开始:实例方法 slot 0 固定是 this,之后才是显式参数
  • 局部变量按声明顺序分配 slot,但如果作用域不重叠,JVM 可能复用同一 slot

Code 区域的字节码解读:

  • iconst_10 → istore_1:常量 10 入栈,弹出存入 slot 1(变量 a)
  • iload_1 → iconst_5 → if_icmple:加载 a,压入 5,比较跳转
  • 进入 if 块后,iconst_20 → istore_2:变量 b 分配到 slot 2
  • 最后 iload_1 + iload_2 + iadd → ireturn

六、通过字节码看透 Java 语法糖

1. 泛型擦除

List<String> list = new ArrayList<>();
list.add("hello");
String s = list.get(0);

反编译后:

  • list.add("hello") → 调用 ArrayList.add(Object)(擦除后)
  • list.get(0) → 调用后插入 checkcast 指令,强制转换为 String

泛型信息并不会完全消失:在 class 文件的 Signature 属性 中,编译器会永久保留泛型的完整签名,这也是框架能够通过反射获取泛型类型信息的根本原因。

2. 自动装箱/拆箱

Integer i = 1;   // 编译为 Integer.valueOf(1)
int j = i;       // 编译为 i.intValue()

注意:valueOf 有缓存(-128~127),跨范围用 == 判断会失效。

3. 增强 for 循环

for (String s : list) { }

反编译后变成:

Iterator it = list.iterator();
while (it.hasNext()) { String s = (String) it.next(); }

4. try-with-resources

编译后自动生成 finally 块调用 close(),并处理异常抑制(addSuppressed)。

七、避坑要点(高频踩坑汇总)

错误/误区后果正确做法
认为字节码就是机器码跨平台原理理解错误字节码是中间码,需要 JVM 翻译
直接修改 .class 文件容易出错,导致字节码无效使用字节码操作库(ASM、Javassist)
缺少 -g 参数导致没有局部变量表调试时看不到源码行号和变量名编译时加上 -g 参数生成调试信息
忽略行号表调试时看不到源码行号javap -l 或 -v 查看
混淆字节码指令和机器码指令面试丢分理解:字节码是 JVM 指令集,机器码是 CPU 指令集
以为泛型信息被完全擦除无法理解框架的泛型获取原理了解 Signature 属性保留泛型元数据
javap 后看到 invokespecial 不理解不清楚构造方法调用逻辑记住:invokespecial 调父类构造/私有方法

八、面试高频考点(附详细答案)

Q1:什么是字节码?为什么 Java 能跨平台?

字节码是介于源码和机器码之间的中间表示,存储于 .class 文件。不同平台的 JVM 能将相同的字节码翻译成本地机器码,从而实现“一次编写,到处运行”。

Q2:javap 有哪些常见选项?作用分别是什么?

-c 输出字节码指令(最常用);-v 输出常量池、行号表、局部变量表等全部信息;-l 打印行号和局部变量表;-s 输出类型签名;-p 显示 private 成员。

Q3:aload_0 指令在实例方法和静态方法中有什么区别?

实例方法中 aload_0 加载的是 this;静态方法中没有 this,aload_0 加载的是第一个方法参数。

Q4:通过字节码你能看出哪些语法糖?

泛型擦除后的 checkcast 指令;内部类转换为独立类并持有外部类引用;foreach 转为 Iterator 循环;switch 字符串转为 hashCode+equals;自动装箱拆箱转为 valueOf/intValue;try-with-resources 转为 finally + close。

Q5:什么是 Signature 属性?为什么重要?

Signature 属性是编译器在 class 文件中额外写入的泛型元数据,保留了泛型的完整签名信息,这也是 Jackson、Gson、Spring 等框架能够通过反射获取泛型类型信息的根本原因。

Q6:invokespecial 和 invokevirtual 的区别?

invokespecial 用于调用构造方法、私有方法和父类方法(静态绑定),invokevirtual 用于调用普通实例方法(动态绑定,支持多态)。

Q7:如何让 javap 输出局部变量表?

编译时加 javac -g 生成调试信息,然后用 javap -l 或 javap -v 查看。

九、练习题

  1. 动手:编写一个简单类,包含静态方法、实例方法、成员变量,使用 javap -c -v 观察字节码。
  2. 分析:解释 invokevirtual 和 invokespecial 的区别,并举例说明。
  3. 探索:写一个包含内部类的类,编译后用 javap 查看内部类字节码,找到外部类引用字段。
  4. 实战:编写一个泛型方法,编译后用 javap -v 查看字节码,观察 Signature 属性的存在。
  5. 思考:为什么在循环中使用 + 拼接字符串效率低?通过字节码分析原因。

📊 你的学习进度

  • 当前:第43篇 / 共44篇 · 第六阶段:NIO、泛型、JVM内幕、字节码(第36~44篇)
  • ✅ 已完成:第1~42篇
  • 📖 正在学:第43篇
  • ⏳ 待学习:第44篇(即将完结)

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇文章预告

《第44篇:jd-gui反编译class文件,解决中文乱码问题》

内容简介:jd-gui 图形化反编译、乱码原因与解决方案、反编译局限性、替代工具。

💡 学完这篇,你将能反编译任意 class 文件,分析第三方库源码,轻松解决中文乱码。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!
📌 除了《Java 100 天进阶之路 | 从入门到上岗就业》系列文章,我也在深挖智能物流实战(出版社WMS、托盘调度、机器学习落地)。如果你对技术在不同领域的实战感兴趣,欢迎点击我的头像,看看专栏《出版社物流WMS智能调度实战》。技术相通,思路可鉴。

深入解析Java Agent原理与实践:从字节码操作到性能监控 Java Agent是Java平台提供的一项强大机制,它允许开发者在JVM层面动态介入程序的运行生命周期。其核心原理基于Java Instrumentation API,通过在类加载过程中注册ClassFileTransformer,实现对特定类字节码的实时修改与增强。这项技术的核心价值在于提供了无侵入式的运行时诊断、监控和AOP(面向切面编程)能力,无需修改源代码即可实现功能扩展。在实际应用场景中,Java Agent广泛应用于性能监控、线上问题诊断、代码热修复以及安全审计等领域。例如,通过字节码操作库如 阅读详情

相关推荐

2026版Java面试八股文:从知识复述到场景决策的能力重构

Java面试正经历从‘概念复述’到‘工程决策’的根本性转变。随着JDK 17/21成为主流,虚拟线程、结构化并发、ZGC染色指针等新特性已深度融入云原生与AI工程化场景;传统JVM调优、并发机制、Spring生命周期等知识点,必须结合K8s内存限制、cgroup v2、GraalVM原生镜像、eBPF追踪等真实约束才能落地。技术价值不再体现为背诵能力,而在于能否基于具体版本(如OpenJDK 21.0.2)、具体环境(如Pod内存512MB)和具体工具链(如Arthas trace或bpftrace)完成可

weixin_33716941的博客 373

【Java可执行命令】(四)反编译工具javap:深入解析应用程序反编译工具javap ~

javap是一个有用的工具,用于反编译Java字节码,了解和分析类的内部实现和结构。它为开发人员提供了一个透视Java代码背后的底层视角,并可以帮助进行性能调优、代码审查和学习。然而,它仅限于处理已编译的类文件,并且反编译的源代码可能与原始Java代码存在一些语义差异。因此,在使用javap时需要注意其局限性,并结合其他工具和技术来进行全面的分析和理解。

Technology changes the world of life 9295

2026大厂Java面试真相:故障驱动的工程化复习法

Java面试已从知识记忆转向工程问题解决能力考察,核心是理解技术在真实系统中的行为边界与失效表现。基于JVM内存模型、并发原语、网络协议栈和框架生命周期等基础概念,面试官通过生产故障(如Netty DirectBuffer泄漏、Redis脑裂、OkHttp连接池半开)检验候选人能否构建跨层因果链。其技术价值在于培养可迁移的系统诊断思维——从现象定位到根因归因,再到量化验证。典型应用场景包括线上性能压测、Arthas动态追踪、JVM参数沙盒实验及字节码级优化分析。本文聚焦‘故障驱动复习法’,融合JVM调优、S

weixin_33859844的博客 329

javap命令使用

参考博客:https://www.cnblogs.com/qlqwjy/p/7586538.html 一、javap是jdk自带的反解析工具 它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。 二、javap参数说明 D:\test>javap -help 用法: javap <optio...

FantasticXX的博客 699

【CGLIB】分析 `DebuggingClassWriter` 的实现,理解 CGLIB 如何将生成的字节码输出为 `.class` 文件。

本文深入剖析了CGLIB调试工具DebuggingClassWriter的实现原理。该组件通过在运行时将动态生成的字节码持久化为.class文件,解决了CGLIB代理类难以调试的核心痛点。关键点包括: 通过系统属性cglib.debugLocation激活功能,将生成的类文件写入指定目录 继承ASM的ClassWriter并重写toByteArray()方法,在返回字节码前先写入磁盘 从字节码二进制格式中解析类名,构建完整的文件路径 自动创建目录结构确保文件写入成功 该工具在排查VerifyError等字节

九师兄 128

【图神经网络】从0到1使用PyG手把手创建异构图

异构图的准确定义如下:异构图(Heterogeneous Graphs):一个异构图GGG有一组节点V=v1,v2,...,vnV=v_1,v_2,...,v_nV=v1​,v2​,...,vn​和一组边E=e1,e2,...,emE=e_1,e_2,...,e_mE=e1​,e2​,...,em​组成,其中每个节点和每条边都对应着一种类型,用TvT_vTv​表示节点类型的集合,TeT_eTe​表示边类型的集合,一个异构图有两个映射函数,分别将每个节点映射到其对应的类型ϕv:V→Tv\phi_v:V\rig

小哲的博客 7819

javap命令详解

javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作。可以在命令行窗口先用javap -help看下javap工具支持的选项:C:\&gt;javap -help C:\&gt;javap -help Usage: javap &lt;options&gt; &lt;classes&gt;... whe...

dawuafang 445

Python+OpenCV实战:雨天车牌识别准确率提升300%的5个关键技巧

本文针对雨天车牌识别准确率骤降的难题,分享了五个基于Python和OpenCV的实战技巧。通过暗通道先验去雾、雨纹抑制、光照不变量颜色空间转换、多尺度自适应阈值分割以及融合传统特征与轻量级深度学习的混合识别策略,系统性地提升了算法在恶劣天气下的鲁棒性。这些方法能有效解决图像模糊、对比度低、字符断裂粘连等问题,为智能交通等实际应用提供可靠解决方案。

k8l9m0n的博客 710

第3章:OpenJDK从源码到字节码——Class 文件与 javac 管线

文章摘要 本文通过一个团队从JDK 8升级到JDK 21时遇到的反射异常问题,揭示了Java字节码层面的兼容性挑战。项目背景中指出了开发者面临的三大痛点:黑盒编译、语法糖陷阱和字节码增强盲区。随后通过师徒对话的形式,生动讲解了Class文件结构(魔数、常量池)和关键字节码指令(如invokevirtual等)。最后给出实战示例,分析自动装箱、泛型、lambda等语法糖在字节码层面的实现原理,帮助开发者建立字节码阅读能力,解决跨版本兼容性问题。

davidwang456的专栏 490

Excel基金净值自动更新:手把手教你用Power Query抓取天天基金网数据(含常见错误修复)

本文详细介绍了如何利用Excel内置的Power Query工具,从天天基金网自动抓取基金净值数据,实现表格数据的自动刷新。通过手把手教程,您将学会构建参数化查询、整合多基金数据、计算持仓盈亏,并解决网页结构变动等常见错误,最终打造一个专属的、可自动更新的基金监控仪表盘,彻底告别手动更新。

xx56789的博客 716

Cadence SIP Layout 简单教程-第一章

以摄像头模组软硬结合板为例,描述layout的整个完整过程,从而掌握基本技能。 第一章 准备工作 第一节 原理图不用说layout前需要绘制原理图,原理图不在本文讨论范围内,所以列为准备工作。 需要特别说明的是,绘制原理的最终目的是导出网络表,网络表中的重要参数footprint是让layout软件选择正确封装的关键,所以这里讲解一下原理图设置footprint的位置。在原理图中双击零件,...

whp1920的博客 1万+

【DIY系列:Java虚拟机】第03篇:JDK 安装与环境准备——工欲善其事必先利其器

<think>我们只需要根据内容生成摘要,不超过150字。内容主题是JDK安装与环境准备。要点:JDK/JRE/JVM关系、选择JDK8、三平台安装、环境变量配置、javac/javap工具。用简洁语言概述。</think>本文介绍了JDK安装与环境配置:理清JDK/JRE/JVM关系,选定JDK 8作为开发基础,详述Windows/Mac/Linux三平台安装步骤,配置JAVA_HOME与PATH,并重点讲解javac与javap工具的使用技巧,为后续编写JVM做好准备。

xyghehehehe的专栏 453

别再对着ACF/PACF图发懵了!用R语言实战教你一眼分清AR、MA和ARMA模型

本文通过R语言实战详细解析了时间序列分析中AR、MA和ARMA模型的特征图识别技巧。重点讲解了如何通过ACF和PACF图的截尾与拖尾特征快速判断模型类型,帮助数据分析师建立从图形到模型的直觉映射,提升时间序列分析的效率和准确性。

weixin_28706923的博客 354

Java技术体系之基础能力篇(五)——深入理解JVM原理

1、Java概述 1.1 Java技术体系   从广义上讲,Kotlin、Clojure、JRuby、Groovy等运行于Java虚拟机上的编程语言及其相关的程序都属于Java技术体系中的一员。如果仅从传统意义上来看,JCP官方所定义的Java技术体系包括了以下几个组成部分: Java程序设计语言 各种硬件平台上的Java虚拟机实现 Class文件格式 Java类库API 来自商业机构和开源社区的第三方Java类库   以上是根据Java各个组成部分的功能来进行划分,如果按照技术所服务的领域来划分,或者

qsmiley10的博客 3346

OpenCV机械臂手眼标定

这篇文章总结了手眼标定的原理,利用OpenCV自带的函数套用参数即可完成眼在手上和眼在手外两种标定。

Q先森的博客 6577

【系统分析师】2009年真题:综合知识-答案及详解

在某银行业务的用例模型中,“取款”用例需要等到“存款”用例执行之后才能执行,两个用例之间的关系属于(1);“取款”和“存款”两个用例中都需 要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款” 用例与“查询余额”用例之间的关系属于(2)。(1)A. 关联关系 B. 扩展关系 C. 使用关系 D. 依赖关系 (2)A. 扩展关系 B. 使用关系 C. 依赖关系 D. 继承关系【参考答案】D、A雇员类含有计算报酬的行为,利用面向对象的(3),可以使得其派生类专职 雇员类和兼职雇员类计算报酬的

数据知道的博客 1万+

《Java 100 天进阶之路》第44篇:jd-gui反编译class文件:中文乱码破解与反编译实战指南(2026版)

摘要:一文攻克反编译乱码痛点!从乐谱与手稿类比切入,讲透字节码→源码还原本质。提供 Windows/Mac/Linux 多系统 jd-gui 乱码解决方案,对比 jd-gui、CFR、IDEA FernFlower 等主流工具选型,附 CFR 批量反编译实战命令。覆盖反编译原理、工具对比、避坑清单、面试高频题,配套完整 Demo 与课后练习。基础篇收官,为进阶篇集合源码阅读铺路。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 496

18、动态系统响应分析

本文系统地介绍了动态系统响应的分析方法,涵盖传递函数建模、特殊输入下的响应特性(如脉冲和阶跃响应)、终值与初值定理的应用、系统直流增益的计算,并深入探讨了一阶和二阶系统的时域特性。通过实例分析与MATLAB仿真,展示了不同参数对系统行为的影响。文章还总结了系统响应在控制设计与故障诊断中的实际应用,并展望了多变量、非线性及实时响应分析的未来研究方向。配合流程图,提供了清晰的系统分析与设计路径。

kite3的博客 137

《2026全新 | Java 100 天进阶之路:从零基础到上岗就业,108篇完整学习地图》

摘要:不背八股文,不堆概念。44篇基础 + 64篇进阶(共108篇),100天助你达到Java就业水平,从容面对技术面试。 👉 零基础入门 / 校招社招突击 / 1-3年Java后端提升 / 想系统复盘全栈知识的开发者。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 9582

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2026年Java面试核心考点与实战解析

Java作为企业级开发的基石语言,其平台无关性和稳健的内存管理机制构成了核心技术优势。JVM通过字节码解释与即时编译实现跨平台运行,而GC算法从标记-清除到ZGC的演进大幅提升了吞吐量。在并发编程领域,happens-before原则和volatile关键字保障了线程安全,这些原理直接决定了分布式系统与高并发场景下的性能表现。当前Java在大数据、微服务等领域的持续应用,使内存模型、集合框架优化等考点成为面试必问内容。通过分析ConcurrentHashMap的锁分段技术等典型案例,开发者能深入理解Java

weixin_32075843的博客 271

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Sudachi:3步搭好开源Switch模拟器

Sudachi 是一款用 C++ 编写的开源 Nintendo Switch 模拟器,覆盖 Android、Linux、macOS 和 Windows 四个平台,采用 GPL-2.0-or-later 许可。它把图形、音频、CPU 和系统模拟拆成独立模块,即使你是第一次读模拟器代码也能找到入手点。本文带你在本地完成 clone、装依赖、编译三件事,并讲清楚它的图形、输入和联机能力。 ## 为什么

gitblog_00794的博客 806

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

01-并发编程-工具

学习 Java 并发编程底层原理过程中,对象内存布局、Java 编译生成的字节码都是较为抽象的概念。为了更好地理解底层逻辑,我会使用相关指令查看对象内部布局、解析类字节码,把抽象理论转化为看得见、摸得着的直观信息。

Bonnie_1215的博客 190

Java应用安全实战:从字节码混淆到内存防护的纵深防御指南

在Java应用开发中,安全防护是一个多层次、系统性的工程。从基础概念来看,Java字节码作为平台无关的中间表示,在编译后容易被反编译分析,暴露核心逻辑和硬编码的敏感信息。其原理在于.class文件包含了清晰的符号表和结构化指令,攻击者可通过工具轻易还原出近似源码。这凸显了代码混淆的技术价值,它通过名称替换、控制流变换和字符串加密等手段,大幅提升静态和动态分析的难度,保护知识产权和敏感配置。在内存安全层面,JVM的运行时数据区,特别是堆和方法区,可能因对象生命周期管理不当而长期驻留敏感数据,如数据库密码或加密

weixin_30493401的博客 346

44篇通关!Java基础篇终极总结:一张图、三张表,把全部知识点装进脑子(2026版)

Java基础篇44篇终极总结!一张学习路线图 + 三张速查表 + 面试题 + 避坑清单,帮你把零散知识串成体系。附PDF福利,进阶篇预告。收藏本文,面试前复习效率翻倍。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 703

2026最新Java八股文(完整版)

单个redis节点的并发能力是有限的,所以为了提高并发能力,我们需要搭建redis集群,就比如:主从复制。主从复制的流程主从复制主要分为:全量同步和增量同步。全量同步:在salve请求数据同步的时候会携带application Id和offset,如果master判断出applid和自己的不一样,就认为slave是第一次进行同步,所以会进行全量同步。

Ostkakah的博客 4万+
上一篇: Claude Code 终极实战指南:从命令行安装到成为你的 AI 编程副官
下一篇: 模型预测没人信?用Python构建交互式监控报表,让业务方一目了然(附代码)附完整代码)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值