如果 WeakHashMap 的 Entry 链中间的一个 Entry 没有其他强引用,如果它被回收不是会导致拉链在它后面 Entry 也会被回收吗?
一、跨代引用问题 假设老年代的 A 对象引用新生代的 B 对象,那在 young GC 的时候,仅仅从新生代的 GC root 出发就会以为 B 是垃圾,导致错误回收,而如果从整个 GC root 出发遍历成本就太高了。因此用记忆集来解决这个问题,在记忆集中保存从非收集区域(A 所在的老年代)指向收集区域(B 所在的新生代)的指针集合,在 youn…
spring 通过三级缓存来解决 Bean 的循环依赖问题,该机制的相关代码主要位于DefaultSingletonBeanRegistry 类中。下面将从该类的源码出发,重新学习三级缓存机制。 注意:三级缓存机制只能解决 setter 注入的循环依赖问题,如果是构造器注入的方式,使用反射的方式进行注入,用三级缓存也是不能解决循环依赖问题…
介绍了 MySQL 的异步复制和并行复制机制
这个问题是在学习 CPU 的缓存一致性中冒出来的。现在网络上大多数对于 volatile 功能的描述是下面这样的: volatile 提供两大功能:实现线程间共享变量的可见性 + 禁止指令的重排序。这两大功能是通过在对 volatile 变量的操作前后添加对应的内存屏障实现的,内存屏障最粗略分有两类,读内存屏障和写内存屏障,作用分别是从主内存中读取…
《Effective Java》第 18 条 使可变性最小化 《Java 并发编程实战》3.4 不变性 挖坑、待小结、
为什么多线程之间需要通信? 在一些需要多个线程通通完成一个任务的场景下,需要线程之间的互相协调和同步。比如一个线程的执行依赖于另一个线程的结果、多个线程需要按顺序协调交替运行。 多线程通信大致可以分为两种 —— 共享内存 & 消息传递 1 共享内存 多个线程可以访问同一个共享的内存区域,通过读取和写入内存中的数据来进行通讯同步。比如堆中的对…
多种方案解决面试中经常出现的多线程交替打印问题
一道很有意义的面试题,从操作系统层面捋 http 请求的流程,加深了对 socket、网络编程乃至 tomcat 一类网络服务器底层的理解
从字节码角度聊聊值传递在 JVM 内存空间是怎么进行的