
Java
一共43篇文章
专题:第期
-
既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?
🧠 为什么 MESI 协议并不足以保证 Java 中的“可见性”语义? 1. MESI 是硬件层级的缓存一致性,volatile 是语言层级的可见性保证 MESI 主要解决“同一物理地址在多核缓存中的副本一致性问题”; 根据MESI,CPU某核(假设CPU0)的缓存行(包含变量x)是M S 或E的时候,如果总线嗅探到了变量x被其其他核(比如CPU1)执行了写操作(remote write)那么CP…... mysticalycc- 40
- 0
-
HashMap负载因子
HashMap 1. Hash 冲突后的数据结构变化(JDK8 之后的优化) 在 JDK8 之前,HashMap 发生冲突后使用的是链表结构,导致在极端情况下时间复杂度退化为 O(n)。 JDK8 开始引入红黑树结构优化: 当某个桶(链表)中的元素个数超过 TREEIFY_THRESHOLD = 8 且容量超过 MIN_TREEIFY_CAPACITY = 64 时,该桶的链表会被转化为红黑树; …... mysticalycc- 50
- 0
-
java.sleep()
java的thread.sleep方法是会响应中断的,cpu会使用定时器,定时器到时会触发中断让cpu调度这个线程,但是我不明白java中将线程设置中断,为什么sleep可以响应中断指令,是怎么做到的? Java 的 Thread.sleep() 为什么可以响应 interrupt()? 在 Java 中,Thread.sleep() 会放弃 CPU 执行权,并由 硬件定时器 触发中断来唤醒线程。…... mysticalycc- 96
- 0
-
JDK12新特性及旧版本变更
新的字符串和文件方法 在 Java 11 中,我们已经获得了一些新的 String 方法,以及Files.readString() 和 writeString() 方法。而在 Java 12,JDK 开发人员对这两个类进一步扩展,新增了一些实用的方法。 String.indent() —— 方便的字符串缩进 在 Java 12 之前,如果我们想给字符串添加缩进,通常需要编写一个辅助方法,在字符串前…... mysticalycc- 103
- 0
-
java-11-features
Lambda 参数的局部变量语法 JDK 增强提案 323允许在隐式类型 lambda 表达式的中使用“var”关键字。 先来看 显式类型 的 Lambda 表达式。在下面的代码中,参数 l 和 s 的类型 被明确声明(List<String> 和 String): (List<String> l, String s) -> l.add(s); 然而,Java 编译器…... mysticalycc- 119
- 0
-
java-10-features
局部变量类型推断("var") 从 Java 10 开始,我们可以使用关键字 var 来声明局部变量(局部意味着在方法内部)。例如,以下定义是允许的: var i = 10; var hello = "Hello world!"; var list = List.of(1, 2, 3, 4, 5); var httpClient = HttpClient.n…... mysticalycc- 96
- 0
-
Java 生态下想搞大流量下的 ws,是不是暂时只能 netty?
最近项目想上直播和拍卖业务,自身流量也是比较大,想问下目前业界 ws 方案下是不是更推荐 netty 或者有没有其他可以参考的方案呢? 直播推流这快准备用阿里云的,直播上会用到 ws 的也就是评论,拍卖可能就是出价和评论。 1. 使用 Netty 的建议 sagaxu:不要直接用 Netty,建议使用 Vert.x 或者 Quarkus。 wxw752:我们公司使用 Netty 处理 WebSoc…... mysticalycc- 60
- 0
-
生产OOM排查
简化版代码: package com.mystic.ycc.blog.test; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre…... mysticalycc- 101
- 0
-
线程和同步性能
线程和同步性能 线程和硬件 💡 CPU 增加线程并不能使应用程序性能倍增 任务被提交到一个队列(可能不止一个队列),然后一定数量的线程会从队列中取出任务并执行它们 线程池的大小对实现最佳性能至关重要 在某些情况下,过大的线程池会导致性能急剧下降 线程池大小应根据系统负载、CPU 和 I/O 任务比例来决定 线程数超出 CPU 数量可能会降低吞吐量 💡 CPU 不是瓶颈,外部资源是瓶颈时,增加的线程…... mysticalycc- 85
- 0
-
JDK 8 到 JDK 23 的 语法糖(语言特性) 和 垃圾回收(GC)优化
JDK 8 到 JDK 23 的 语法糖(语言特性) 和 垃圾回收(GC)优化 语法糖(语言特性)演进 从 Lambda 表达式到模式匹配,Java 逐步引入更简洁的语法和现代编程范式。 JDK 8(2014) Lambda 表达式: List list = Arrays.asList("a", "b", "c"); list.forEa…... mysticalycc- 128
- 0