局部变量表中槽的问题
jvm的槽为啥是32位,64jvm也是32位呢1. 什么是 jvm 的“槽”(slot)在 java 虚拟机中,局部变量表(Local Variable Table) 是方法栈帧的一部分。它由一组 slot(槽位) 组成,每个 slot 的基本单位是 32 位(4字节)。slot 可以存放:int, float, reference, retu……
jvm的垃圾回收是如何暂停所有线程的
jvm的垃圾回收是如何暂停所有线程的1. 为什么需要暂停线程?GC 需要对堆内存中的对象做可达性分析(reachability analysis),判断哪些对象是垃圾。如果应用线程(Mutator Threads)还在继续运行,就可能:在 GC 标记过程中修改对象引用,导致结果不一致;在对象回收时还在访问已被标记回收的对象。因此,GC 必须让所……
既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?
🧠 为什么 mesi 协议并不足以保证 java 中的“可见性”语义?1. mesi 是硬件层级的缓存一致性,volatile 是语言层级的可见性保证mesi 主要解决“同一物理地址在多核缓存中的副本一致性问题”;根据mesi,CPU某核(假设CPU0)的缓存行(包含变量x)是M S 或E的时候,如果总线嗅探到了变量x被其其他核(比如CPU1)执行了……
HashMap负载因子
HashMap1. Hash 冲突后的数据结构变化(jdk8 之后的优化)在 jdk8 之前,HashMap 发生冲突后使用的是链表结构,导致在极端情况下时间复杂度退化为 O(n)。jdk8 开始引入红黑树结构优化:当某个桶(链表)中的元素个数超过 TREEIFY_THRESHOLD = 8 且容量超过 MIN_TREEIFY_CAPACITY ……
java.sleep()
java的thread.sleep方法是会响应中断的,cpu会使用定时器,定时器到时会触发中断让cpu调度这个线程,但是我不明白java中将线程设置中断,为什么sleep可以响应中断指令,是怎么做到的?java 的 Thread.sleep() 为什么可以响应 interrupt()?在 java 中,Thread.sleep() 会放弃 CPU 执行权……
JDK12新特性及旧版本变更
新的字符串和文件方法在 Java 11 中,我们已经获得了一些新的 String 方法,以及Files.readString() 和 writeString() 方法。而在 Java 12,jdk 开发人员对这两个类进一步扩展,新增了一些实用的方法。String.indent() —— 方便的字符串缩进在 Java 12 之前,如果我们想给字符串添加缩……
java-11-features
Lambda 参数的局部变量语法jdk 增强提案 323允许在隐式类型 lambda 表达式的中使用“var”关键字。先来看 显式类型 的 Lambda 表达式。在下面的代码中,参数 l 和 s 的类型 被明确声明(List<String> 和 String):(List<String> l, String s) -> l……
java-10-features
局部变量类型推断("var")从 Java 10 开始,我们可以使用关键字 var 来声明局部变量(局部意味着在方法内部)。例如,以下定义是允许的:var i = 10;var hello = "Hello world!";var list = List.of(1, 2, 3, 4, 5);var httpC……
Java 生态下想搞大流量下的 ws,是不是暂时只能 netty?
最近项目想上直播和拍卖业务,自身流量也是比较大,想问下目前业界 ws 方案下是不是更推荐 netty 或者有没有其他可以参考的方案呢?直播推流这快准备用阿里云的,直播上会用到 ws 的也就是评论,拍卖可能就是出价和评论。1. 使用 netty 的建议sagaxu:不要直接用 netty,建议使用 Vert.x 或者 Quarkus。wxw752:我……
JDK 8 到 JDK 23 的 语法糖(语言特性) 和 垃圾回收(GC)优化
jdk 8 到 jdk 23 的 语法糖(语言特性) 和 垃圾回收(GC)优化语法糖(语言特性)演进从 Lambda 表达式到模式匹配,java 逐步引入更简洁的语法和现代编程范式。jdk 8(2014)Lambda 表达式:List list = Arrays.asList("a", "b", "c");list.forEach(s ->……
JAVA 对象头分析及Synchronized锁
JAVA 对象头分析及synchronized锁对象内存布局HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。[]]从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分:Mark Word(标记字段):对象的Mark Word……