-
java.sleep()
java的thread.sleep方法是会响应中断的,cpu会使用定时器,定时器到时会触发中断让cpu调度这个线程,但是我不明白java中将线程设置中断,为什么sleep可以响应中断指令,是怎么做到的? Java 的 Thread.sleep() 为什么可以响应 interrupt()? 在 Java 中,Thread.sleep() 会放弃 CPU 执行权,并由 硬件定时器 触发中断来唤醒线程。…- 8
- 0
-
JDK12新特性及旧版本变更
新的字符串和文件方法 在 Java 11 中,我们已经获得了一些新的 String 方法,以及Files.readString() 和 writeString() 方法。而在 Java 12,JDK 开发人员对这两个类进一步扩展,新增了一些实用的方法。 String.indent() —— 方便的字符串缩进 在 Java 12 之前,如果我们想给字符串添加缩进,通常需要编写一个辅助方法,在字符串前…- 15
- 0
-
java-11-features
Lambda 参数的局部变量语法 JDK 增强提案 323允许在隐式类型 lambda 表达式的中使用“var”关键字。 先来看 显式类型 的 Lambda 表达式。在下面的代码中,参数 l 和 s 的类型 被明确声明(List<String> 和 String): (List<String> l, String s) -> l.add(s); 然而,Java 编译器…- 31
- 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…- 26
- 0
-
Java 生态下想搞大流量下的 ws,是不是暂时只能 netty?
最近项目想上直播和拍卖业务,自身流量也是比较大,想问下目前业界 ws 方案下是不是更推荐 netty 或者有没有其他可以参考的方案呢? 直播推流这快准备用阿里云的,直播上会用到 ws 的也就是评论,拍卖可能就是出价和评论。 1. 使用 Netty 的建议 sagaxu:不要直接用 Netty,建议使用 Vert.x 或者 Quarkus。 wxw752:我们公司使用 Netty 处理 WebSoc…- 3
- 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…- 12
- 0
-
线程和同步性能
线程和同步性能 线程和硬件 💡 CPU 增加线程并不能使应用程序性能倍增 任务被提交到一个队列(可能不止一个队列),然后一定数量的线程会从队列中取出任务并执行它们 线程池的大小对实现最佳性能至关重要 在某些情况下,过大的线程池会导致性能急剧下降 线程池大小应根据系统负载、CPU 和 I/O 任务比例来决定 线程数超出 CPU 数量可能会降低吞吐量 💡 CPU 不是瓶颈,外部资源是瓶颈时,增加的线程…- 16
- 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…- 20
- 0
-
关于 JDK 不同版本对 指令集支持
关于 JDK 不同版本对 指令集支持 1. JDK 8(2014年) 指令集支持: 基线指令集:主要针对 SSE2/SSE4.1/AVX1(如 Intel Haswell 之前的处理器)。 不支持 AVX-512(Skylake 及之后的新指令集)。 AES-NI 深度优化(仅部分支持)。 向量化运算优化有限。 适用场景: 传统企业应用,无需高性能计算。 兼容性优先,不追求最新硬件性能。 2. J…- 13
- 0
-
问题排查
问题排查 JDK自带的定位问题的工具? jps jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。 jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名 jstack jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。 # 基本…- 69
- 0
-
synchronized 锁机制的分析和验证
synchronized 锁机制的分析和验证 原文:https://www.moralok.com/2023/12/19/analysis-and-verification-of-the-synchronized-lock-mechanism/ 本文详细介绍了 Java 中 synchronized 锁的机制、存储结构、优化措施以及升级过程,并通过 jol-core 演示 Mark Word 的变…- 433
- 0
-
arthas使用
arthas使用 获取当前的实例属性值 vmtool 测试使用的类 @Service public class UserService { @Value("${user.default.pwd}") private String userDefaultPwd; } 配置文件 [可以使用appllo或者其他支持热更新配置的框架来测试属性是否刷新成功] user: default:…- 329
- 0
-
如何看懂字节码文件
如何看懂字节码文件 测试使用的类 public class Test { public int i; public long y; } 基础概念 每个Class文件的头4个字节被称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。不仅是Class文件,很多文件格式标准中都有使用魔数来进行身份识别的习惯,譬如图片格式,如GIF或者JPEG等在文件…- 225
- 0
-
JHSDB:基于服务性代理的调试工具
JHSDB:基于服务性代理的调试工具 JDK中提供了JCMD和JHSDB两个集成式的多功能工具箱,它们不仅整合了上一节介绍到的所有基础工具所能提供的专项功能,而且由于有着“后发优势”,能够做得往往比之前的老工具们更好、更强大。 JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的…- 288
- 0
-
JVM GC 的安全点与安全区域
JVM GC 的安全点与安全区域 OopMap JVM 采用的可达性分析法有个缺点,就是从 GC Roots 找引用链耗时。 都说他耗时,他究竟耗时在哪里? GC 进行扫描时,需要查看每个位置存储的是不是引用类型,如果是,其所引用的对象就不能被回收;如果不是,那就是基本类型,这些肯定是不会引用对象的;这种对 GC 无用的基本类型的数据非常多,每次 GC 都要去扫描,显然是非常浪费时间的。 而且迄今…- 618
- 0
-
垃圾回收算法是如何设计的?
底层原理:垃圾回收算法是如何设计的? 如果大家关注 JDK,会发现在频繁发布的 JDK 版本中,和垃圾回收相关的 JEP (JDK Enhancement Proposals,Java 增强提案)越来越多了,垃圾回收(Garbage Collection,GC)正处于方兴未艾的阶段。譬如,在 JEP-248 中 G1 替代了并行垃圾回收器成为 JVM 中默认的垃圾回收器,JEP-333 加入了实验…- 4.3k
- 0
-
Java虚拟机详解—-垃圾收集器及GC参数
Java虚拟机详解----垃圾收集器及GC参数 零、堆的回顾: 新生代中的98%对象都是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块比较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Sur…- 1.7k
- 0
-
Java虚拟机详解—-GC算法和种类
Java虚拟机详解----GC算法和种类 一、GC的概念: GC:Garbage Collection 垃圾收集 1960年 Lisp使用了GC Java中,GC的对象是Java堆和方法区(即永久区) 我们接下来对上面的三句话进行一一的解释: (1)GC:Garbage Collection 垃圾收集。这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果…- 227
- 0
-
Java虚拟机详解—-常用JVM配置参数
Java虚拟机详解----常用JVM配置参数 零、在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多技术含量。 既然如此,那么在IDE的控制台打印GC日志是必不可少的了。现在就告诉你怎么打印。 (1)如果你用的是Eclipse,打印GC日志的操作如下: 在上图的箭头处加上-XX:+PrintGCDetails这句话。…- 385
- 0
-
-
洞察设计模式的底层逻辑
作者:不拔 原文:https://mp.weixin.qq.com/s/qRjn_4xZdmuUPQFoWMBQ4Q 设计模式是开发同学经常聊到的话题,也经常被用到实际的开发项目中,熟练的人可以做到信手拈来,不熟悉的人陷入苦思冥想中。笔者认为,不仅仅要掌握设计模式的用法,更要洞察设计模式的底层逻辑,只有那样,才能做到遇到实际的问题可以使用合适的设计模式去解决。 一 你应该关注底层逻辑 1 设计模式…- 734
- 0
-
一次线上内存溢出排查
现象: 频繁full gc ,内存回收不掉。 分析:新增需求后发现此现象,使用阿里 的Athas查线上内存情况, 发现gc标记时间非常长。 使用sonar扫描发现很多bug, 但是经过代码分析,原因不在此。 jmap -histo pid 发现linkedHashMap有大量的数据未回收。将异常时转存的dump文件拉下来。 文件太大,只能使用profile来进行分析,漫长等待后: 这里的大对象时来…- 286
- 0