03-22 JVM 技术博客 Java (12)《JVM类加载过程》 核心思想:类加载是JVM“认识”类的过程,类似“建房子”——先画图纸(加载),再检查图纸(链接),最后装修(初始化)。全程懒加载(用到才触发),避免浪费资源。 类加载过程 1. 加载(Loading) 通俗解释:JVM把.class文件(字节码)从磁盘读入内存,存到元空间(JDK8+取代了“永久代” 9 0 0
03-21 JVM 技术博客 Java (14)《JVM 语法糖》 说明:本笔记深入剖析 Java 中常见语法糖的底层实现机制、JVM 字节码表现及实际应用场景。所有知识点均围绕“编译期优化”展开,旨在帮助理解 Java 语言的“表象”与“本质”的差异。 🌟 什么是语法糖? 语法糖(Syntactic Sugar) 是指在编程语言中为了提升代码可读性或简洁性而引入 5 0 0
03-21 JVM 技术博客 Java (18)《CAS》 核心思想:乐观锁(假设冲突少,先操作再重试;冲突时自动重试,不阻塞线程) 1. CAS 基础原理 Compare and Swap(比较并交换): 比较内存中某变量的当前值与期望值,若相等则原子性地更新为新值(否则重试)。 通俗比喻: 像抢红包:你看到红包余额是 100(期望值),抢到后发现余额变成 10 0 0
03-21 JVM 技术博客 Java (19)《synchronized》 背景 JDK 6+ 对 synchronized 进行了深度优化(如偏向锁、轻量级锁),在无竞争/低竞争场景下性能甚至优于 CAS。 为什么? CAS 需要多次重试(CPU 空转),而 synchronized 通过锁升级机制,避免了无效重试。 (类比:等红灯时,车不熄火(自旋)比熄火等待(阻塞)更 2 0 0
03-21 JVM 技术博客 Java (17)《JVM 内存模型(JMM)》 核心目标:解决多线程下共享数据的「可见性」「有序性」「原子性」问题。 关键原则:JMM 是 Java 规定的「规则手册」,不是实际内存结构。它确保线程间能正确看到数据变化,但不保证代码一定按顺序执行。 1. 原子性(Atomicity) 问题:count++ 不是原子操作(底层有 读-改-写 3 步 2 0 0
03-21 JVM 技术博客 Java (16)《运行期优化》 核心思想:JVM动态优化代码执行效率,只对高频热点代码深度优化(避免编译所有代码,浪费CPU),像“智能交通系统”——只优化堵车路段,不堵所有路。 1. 分层编译(5层) JVM将代码执行分为5层,从慢到快逐步优化(0层是初始状态,4层是最高优化): 层 编译器 优化级别 适用场景 0 解释器 无编 4 0 0
03-21 JVM 技术博客 Java (13)《字节码指令》 \*\*核心\*\*:Java编译器生成的JVM指令集,直接操作栈帧,实现逻辑控制。 --- #### \*\*1. 条件判断(条件跳转指令)\*\* - \*\*指令\*\*:\`ifeq\`(等于0跳转)、\`ifne\`(不等于0跳转)、\`iflt\`(小于0跳转)等。 - \*\*实现逻辑 3 0 0
03-21 JVM 技术博客 Java (11)《GC调优 》 1. 什么是 GC? GC(Garbage Collection):JVM 自动回收不再使用的对象内存,避免内存泄漏。 程序员不用手动释放内存,JVM 帮你“打扫垃圾”。 2. 堆内存结构(GC 主战场) 堆 = 新生代(Young Gen) + 老年代(Old Gen) 新生代:新创建的对象先放这 4 0 0
03-21 JVM 技术博客 Java (15)《类加载器》 核心原则:类加载器像“快递员”,双亲委派是“先问上级有没有,没得才自己取”——避免重复派送,保证安全。 1. 概述:类加载器层级 (从上到下,父类加载器 → 子类加载器) Bootstrap ClassLoader(根加载器,C++实现): 加载路径:JAVA_HOME/jre/lib(核心JDK类 2 0 0
03-21 JVM 技术博客 Java (10)《垃圾回收器对比》 核心定位:不同GC针对不同场景优化(吞吐量 vs. 低延迟 vs. 大内存)。 注:CMS在JDK 9+已弃用,G1为默认推荐;ZGC/Shenandoah为现代低延迟方案(未详述,需额外配置)。 SerialGC 适用场景:小型应用、单CPU桌面环境(如开发测试)。 机制: 单线程,新生代(复制算 1 0 0