首页
首页
BOT
沸点
课程
直播
活动
AI刷题
NEW
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
hashcon
掘友等级
CTO
|
某技术公司
Mycat 和 Java JFRUnit 的核心贡献者,贡献过 OpenJDK,Spring,Spring Cloud,Apache Bookkeeper,Apache RocketMQ,Ribbon,Lettuce、SocketIO、Langchain4j 等项目,CTO
获得徽章 9
动态
文章
专栏
沸点
收藏集
关注
作品
赞
308
文章 283
沸点 25
赞
308
返回
|
搜索文章
赞
文章( 283 )
沸点( 25 )
hashcon
CTO @某技术公司
·
10月前
举报
Java 22 终于引入了关于 JVM Native Memory Tracking 的 JFR 事件,这样看统计还有趋势就更好看了,元空间,GC 占用内存(比如 CardTable),stringtable,internal 内存等等都更容易看出趋势了。但是通过 JNI 分配的内存(比如 Java DirectBuffer, MMAP Memory 等等)还是无法通过 JVM Native Memory Tracking 看到,估计等 Panama 一统堆外原生内存管理江湖之后,就能看到了。
关于 JVM Hotspot 内存哥块底层原理可以看这个系列:
juejin.cn
展开
收起
查看大图
向左旋转
向右旋转
今天学到了
分享
评论
1
hashcon
CTO @某技术公司
·
1年前
举报
统一回复 Java 21 虚拟线程问题:
1. ThreadLocal 继续用么?Java 开发组本来设计虚拟线程的时候,想去掉对于 ThreadLocal 的支持,但是由于使用的库太多,并且很多为了传参才用,并不是缓存,所以就保持了支持。像隐式传参的这种场景,继续用也没事儿,就是性能有所损耗。(不会影响 GC,生命周期随着虚拟线程终止,但是线程本地变量数量变多,哈希表变大,需要频繁清理)。千万别在虚拟线程的 ThreadLocal 放大对象。Java 开发组是想通过 ScopedLocal 替换掉 ThreadLocal(这个没有大哈希的问题),但是在 21 还是 preview。
2. 虚拟线程主要通过 Continuation 实现,虚拟线程栈会在切换的时候复制到 Continuation 中,切换回来的时候,复制回来,但是不是每次都全量复制。在切换回来的时候,线程栈帧懒复制,调用返回到哪个就复制回哪个,这对于像是 servlet 这种很多层调用的是很大的优化,因为栈深度可能有 上百层,但是实际业务只会用到头部几层,这样大大减少了切换的性能消耗。
3. 网络 io 方面,虚拟线程目前完全不会阻塞了。
4. 文件 io 方面,目前实现方式是遇到就增加一个平台线程来规避阻塞。这个会在 io_uring 引入到 JVM 支持后进行优化,到时候文件 io 也原生不会阻塞。
5. JFR,Thread Stack Dump,调试器, JVM TI 都可以兼容虚拟线程。但是要记住,调试虚拟线程可能也会让其他虚拟线程无法执行,因为载波线程是同一个
6. synchronized 以及涉及 ObjectMonitor 的还是会 pin 住载体平台线程,要在你的代码中避免使用。
7. 虚拟线程无法 getAllThreads(),这个方法返回的是所有平台线程
8. 所有 JMX 以及 java.lang.management 相关的都是处理平台线程,不支持 VirtualThread
9. 虚拟线程支持类似于 jstack 的 dump,但是命令有所不同,请通过 jcmd 获取。并且格式是 json,没有死锁信息(虚拟线程 dump 不会进入全局安全点STW所以无法获取一致性信息例如死锁等)
展开
分享
评论
4
hashcon
CTO @某技术公司
·
2年前
举报
哈哈哈哈啊哈哈
收起
查看大图
向左旋转
向右旋转
分享
评论
3
hashcon
CTO @某技术公司
·
2年前
举报
openjdk.java.net
哇塞,终于loom preview了
技术交流圈
分享
1
3
hashcon
CTO @某技术公司
·
2年前
举报
今天看 JLS 突然发现,实际的 implementation(实现) 的输出结果只是 specification(规范) 里面的输出结果的一个 subset(子集)。就是实际的实现,只是对于规范的一个视图,并不是完整的设计思路。所以太抠实际实现的源码的细节可能会导致我们对于整体思路的理解有误。
比如:
线程一执行
x = 1;
r1 = x;
线程 2 执行 x = 2
究竟会在什么情况下会被编译成:
线程1:
x = 1;
r1 = 1;
线程2:
x=2;
不同的虚拟机在不同的场景表现都不一样,但是只要结果(r1 究竟等于什么)是属于结果集的一个子集就可以,规范中说这个是不确定的,我们不必纠结,只是知道这里有并发安全问题知道要同步就可以。实际的实现,会很复杂,JIT 优化,内存优化涉及的会很多,究竟是否因为编译成 r1 = 1 导致其实 r1 只有一个结果不同操作系统不同环境不同JVM实现其实是不确定的。
展开
技术交流圈
分享
评论
2
hashcon
CTO @某技术公司
·
2年前
举报
1. 最近不准备更新文章,因为看到很多抄袭自己的,举报不过来,想到以后还需要面对这些,觉得在找到避免抄袭方式之前,不发文章,只发视频
之后聊聊 JDK 17:
1.oracle jdk从17开始也算不收费了,三年内白嫖,之后如果升级到新版本又是白嫖三年不收费,外加lts从17开始变成两年一个,无缝白嫖,一年过渡,外加openjdk免费
2. 如何平滑升级,netflix 的大神有过升级经验
carlmastrangelo.com
,我也写了一篇:
zhuanlan.zhihu.com
,升级真的没那么困难。
3. 各种库的兼容性,这个jdk社区也一直在解决,各种常用库的Java版本兼容性统一归纳网站可以参考这里:
wiki.openjdk.java.net
能看到 netty、maven 等大家熟知的库,里面还有联系人,可以在 github 或者 twitter 上面 @ 他们 询问
展开
分享
5
5
hashcon
CTO @某技术公司
·
3年前
举报
现在抄袭这么明目张胆????把我文章换个标题,就发出来?????
收起
查看大图
向左旋转
向右旋转
上班摸鱼
分享
3
9
hashcon
CTO @某技术公司
·
3年前
举报
太好啦,谢谢支持
收起
查看大图
向左旋转
向右旋转
打工人的日常
分享
1
5
hashcon
CTO @某技术公司
·
3年前
举报
帮我投一票哈,谢谢
rank.juejin.cn
收起
查看大图
向左旋转
向右旋转
我 & 掘金
分享
4
4
hashcon
CTO @某技术公司
·
3年前
举报
Lettuce 也增加了 JFR 监控,我也向其中贡献了一部分代码。这个特性解决了在应用压力过大时,定位到底是 redis 处理的比平常慢还是应用本身慢更加准确。且不会像日志受硬盘io影响。
这个 Redis 连接池的新监控方式针不戳~我再加一点佐料
juejin.cn
优秀开源项目
分享
评论
4
下一页
个人成就
2021年度人气作者No.60
优秀创作者
文章被点赞
3,113
文章被阅读
1,568,985
掘力值
28,771
关注了
18
关注者
3,287
收藏集
0
关注标签
21
加入于
2018-08-08