diff --git a/docs/java/basis/bigdecimal.md b/docs/java/basis/bigdecimal.md index 8dcddb39..17c4346c 100644 --- a/docs/java/basis/bigdecimal.md +++ b/docs/java/basis/bigdecimal.md @@ -351,9 +351,7 @@ public class BigDecimalUtil { } ``` -相关 issue:[建议对保留规则设置为 RoundingMode.HALF_EVEN,即四舍六入五成双](https://github.com/Snailclimb/JavaGuide/issues/1122) 。 - - +相关 issue:[建议对保留规则设置为 RoundingMode.HALF_EVEN,即四舍六入五成双]([#1122](https://github.com/Snailclimb/JavaGuide/issues/1122)) 。 ![RoundingMode.HALF_EVEN](https://oss.javaguide.cn/github/javaguide/java/basis/RoundingMode.HALF_EVEN.png) diff --git a/docs/java/basis/serialization.md b/docs/java/basis/serialization.md index 428e49f9..4b4a4cfb 100644 --- a/docs/java/basis/serialization.md +++ b/docs/java/basis/serialization.md @@ -81,7 +81,9 @@ public class RpcRequest implements Serializable { **serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?** -`static` 修饰的变量是静态变量,位于方法区,本身是不会被序列化的。 `static` 变量是属于类的而不是对象。你反序列之后,`static` 变量的值就像是默认赋予给了对象一样,看着就像是 `static` 变量被序列化,实际只是假象罢了。 +~~`static` 修饰的变量是静态变量,位于方法区,本身是不会被序列化的。 `static` 变量是属于类的而不是对象。你反序列之后,`static` 变量的值就像是默认赋予给了对象一样,看着就像是 `static` 变量被序列化,实际只是假象罢了。~~ + +**🐛 修正(参见:[issue#2174](https://github.com/Snailclimb/JavaGuide/issues/2174))**:`static` 修饰的变量是静态变量,位于方法区,本身是不会被序列化的。但是,`serialVersionUID` 的序列化做了特殊处理,在序列化时,会将 `serialVersionUID` 序列化到二进制字节流中;在反序列化时,也会解析它并做一致性判断。 官方说明如下: diff --git a/docs/java/concurrent/jmm.md b/docs/java/concurrent/jmm.md index e1aea07c..2de965bb 100644 --- a/docs/java/concurrent/jmm.md +++ b/docs/java/concurrent/jmm.md @@ -89,8 +89,8 @@ JMM 说白了就是定义了一些规范来解决这些问题,开发者可以 **什么是主内存?什么是本地内存?** -- **主内存**:所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量还是方法中的本地变量(也称局部变量) -- **本地内存**:每个线程都有一个私有的本地内存来存储共享变量的副本,并且,每个线程只能访问自己的本地内存,无法访问其他线程的本地内存。本地内存是 JMM 抽象出来的一个概念,存储了主内存中的共享变量副本。 +- **主内存**:所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量,还是局部变量,类信息、常量、静态变量都是放在主内存中。为了获取更好的运行速度,虚拟机及硬件系统可能会让工作内存优先存储于寄存器和高速缓存中。 +- **本地内存**:每个线程都有一个私有的本地内存,本地内存存储了该线程以读 / 写共享变量的副本。每个线程只能操作自己本地内存中的变量,无法直接访问其他线程的本地内存。如果线程间需要通信,必须通过主内存来进行。本地内存是 JMM 抽象出来的一个概念,并不真实存在,它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。 Java 内存模型的抽象示意图如下: