-
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…- 18
- 0
-
JAVA 对象头分析及Synchronized锁
JAVA 对象头分析及Synchronized锁 对象内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 [] 从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分: Mark Word(标记字段):对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻…- 79
- 0
-
问题排查
问题排查 JDK自带的定位问题的工具? jps jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。 jps –l # 输出输出完全的包名,应用主类名,jar的完全路径名 jstack jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。 # 基本…- 69
- 0
-
Java性能权威指南学习笔记-1
Java性能权威指南学习笔记-1 导论 JVM调优标志 布尔标志 -XX:+FlagName 表示开启 -XX:-FlagName 表示关闭 附带参数的标志 -XX:FlagName=something,表示将标志flagName的值设置为something Client和Server类虚拟机 Java的自动优化前提是机器被分为"Client"和"Server&quo…- 260
- 0
-
Java性能权威指南学习笔记-2
垃圾收集器入门 最主流的四个垃圾收集器 Serial收集器(常用于单CPU环境) Throughput(或Parallel)收集器 Concurrent收集器(CMS) G1收集器 垃圾收集器概述 所有应用线程都停止运行所产生的停顿被称为时空停顿(stop-the-world)。 垃圾收集由两步构成:查找不再使用的对象,以及释放这些对象所管理的内存。 分代垃圾收集器 根据情况将堆划分成不同的代(G…- 219
- 0
-
求解 springboot+mysql 随机出现的异常延迟
求解 springboot+mysql 随机出现的异常延迟 两行紧挨着的代码,很简单的根据 id 更新一行数据,然后打印函数执行到此时的耗时 打印出来的日志如下 正常情况下两个打印出来的耗时差值应该是 10ms 以内 但是每天会随机出现几个时间点,两个耗时差值会大于 1s 甚至 10 ~ 20s 日志中可以看到并不是语句执行出现耗时,mybatis 已经把执行结果打印出来了 耗时出现在语句执行之后…- 197
- 0
-
socket接收发送缓冲区
socket接收发送缓冲区 【TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系】 滑动窗口的大小与套接字缓存区会在一定程度上影响并发连接的数据,每个TCP连接都会为维护TCP滑动窗口而消耗内存,这个窗口会根据服务器的处理速度收缩或扩张。 整个数据的流程中,首先网卡接收到的数据存放到内核缓冲区内,然后内核缓冲区存放的数据根据TCP信息将数据移动到具体的某一个TCP连接上的接收缓冲区内,也就是…- 312
- 0
-
synchronized 锁机制的分析和验证
synchronized 锁机制的分析和验证 原文:https://www.moralok.com/2023/12/19/analysis-and-verification-of-the-synchronized-lock-mechanism/ 本文详细介绍了 Java 中 synchronized 锁的机制、存储结构、优化措施以及升级过程,并通过 jol-core 演示 Mark Word 的变…- 429
- 0
-
arthas使用
arthas使用 获取当前的实例属性值 vmtool 测试使用的类 @Service public class UserService { @Value("${user.default.pwd}") private String userDefaultPwd; } 配置文件 [可以使用appllo或者其他支持热更新配置的框架来测试属性是否刷新成功] user: default:…- 328
- 0
-
如何看懂字节码文件
如何看懂字节码文件 测试使用的类 public class Test { public int i; public long y; } 基础概念 每个Class文件的头4个字节被称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。不仅是Class文件,很多文件格式标准中都有使用魔数来进行身份识别的习惯,譬如图片格式,如GIF或者JPEG等在文件…- 224
- 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 都要去扫描,显然是非常浪费时间的。 而且迄今…- 611
- 0
-
MVCC能否解决幻读?
MVCC能否解决幻读? “幻读”指,同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。 先给出结论:不能笼统的说能不能解决,因为有的情况下可以解决,但是有的情况下解决不了。 可以解决的情况 mysql里面实际上有两种读,一种是“快照读”,比如我们使用select进行查询,就是快照读,在“快照读"的情况下是可以解决“幻读”的问题的…- 212
- 0
-
什么是日志系统和日志门面?分别有哪些框架?
什么是日志系统和日志门面?分别有哪些框架? 日志系统是具体的日志框架,日志门面是不提供日志的具体实现,而是在运行时动态的绑定日志实现组件来工作,是一种外观模式。 日志系统 java.util.logging (JUL),JDK1.4 开始,通过 java.util.logging 提供日志功能。虽然是官方自带的log lib,JUL的使用确不广泛。 Log4j,Log4j 是 apache 的一个…- 296
- 0
-
三级缓存
三级缓存 前言 循环依赖:就是N个类循环(嵌套)引用。 通俗的讲就是N个Bean互相引用对方,最终形成闭环。用一副经典的图示可以表示成这样(A、B、C都代表对象,虚线代表引用关系): 在这里插入图片描述 注意:其实可以N=1,也就是极限情况的循环依赖:自己依赖自己 另需注意:这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。(方法之间循环调用若有出口也是能够正常work的) 可以设想…- 267
- 0
-
负载均衡
负载均衡 年轻的时候看到文章说到百万并发总是感慨万千,虽然很多文章都是标题上有两个字,但是也不妨碍我对这些的憧憬,到底怎么样才能扛百万并发呀?这系统该多么牛逼呀 但是接触多了高并发的系统,再系统学习这方面知识后 ,你就会发现 : 百万并发确实牛皮,但是也没有那么神秘。虽然有不少技术点,但是思路其实不难。 核心要点 :不论多大的流量,其最终的目的都是对流量进行分流,即负载均衡。 文章效果 :能对流量…- 290
- 0
-
Java基本类型的物理存储大小
Java基本类型的物理存储大小 在java中我们知道byte就表示一个字节,像char是两个,int是四个。 现在有这样一个问题,在32位的jvm中一个byte的实际存储大小是4个字节,int不用说也是四个,那么char是不是也是四个?怎么证明? 楼主的先入观点把几种不同的概念混为一谈了。 ================================================= 1、数据…- 338
- 0