- 博客(123)
- 收藏
- 关注
原创 分代 ZGC 的“分代”,和 G1 根本不是一回事——实测停顿仅 G1 的 1_1300
分代 ZGC 的"分代"是逻辑分代,不是物理分代——年轻代和老年代不是两块物理内存,而是对象的年龄和元数据划分。分代 ZGC 的年轻代回收是并发的,不是 STW——这是它和 G1/Parallel/CMS 最本质的区别。传统分代 GC 靠"STW 收小年轻代"缩短停顿,分代 ZGC 靠"并发收年轻代"做到亚毫秒停顿。两者分代的动机不同。
2026-11-09 22:22:02
76
原创 JDK 25 AOT 缓存实测:Spring Boot 启动快 2.4 倍,一行代码不改
AOT 缓存是给「秒级启动敏感」场景省钱的:serverless 冷启动、K8s 滚动发布、微服务快速就绪。它对长驻服务的峰值吞吐没有提升。如果你的服务启动要 5 秒以上、又在意启动/扩容速度,JDK 25 的 AOT 缓存几乎是无成本收益——解压 fat jar、跑一次训练、加个启动参数,启动就能快 2 倍多。如果服务本来 500ms 就起来了、又常年长驻,那这功能对你基本无用。
2026-11-08 11:55:55
213
原创 JDK 8 的profiling会触发进程crash,社区无修复,建议升级jdk
那份 hs_err 出现在凌晨。一个 Spark 任务的 Executor 挂了,机器上留下几十兆日志。前面几千行都是正常的 GC 记录,翻到最底下才看见那行。调度器把任务拉起来接着跑,第二天早上看结果,数据是全的,只有中间那十几分钟空着。集群上装了 Pyroscope 的 agent,每半分钟抓一次火焰图。崩的那一次,正好是它去 dump 的时候。这台机器 325 秒里做了 82 次 Full GC,堆和 Metaspace 一直在反复收拾,agent 就在这个节奏里反复调。最后那次,没回来。
2026-11-07 17:42:29
171
原创 JDK 8 升 25,代码一行不改,性能能翻几倍?
摘要:实测显示JDK 25相比JDK 8在36项基准测试中实现显著性能提升,最高达9.4倍(SHA-256)。关键改进包括字符串拼接优化、数学函数加速、排序算法升级及JIT逃逸分析的质变(4项测试被完全消除)。启用对象头压缩后,内存密集型场景额外获得8%-118%提升。这些改进源于多个JEP的叠加效应,如JEP 280(字符串拼接)、JEP 348(数学intrinsic)等,表明仅升级JDK即可获得可观的免费性能红利。
2026-08-09 21:12:40
302
原创 java伪共享问题的稳定解法
用户咨询了一个java中cpu缓存伪共享场景, 他通过padding多个long 字段隔离 2 个volatile字段,但是实测效果没有提升。这是个比较有趣的场景,在 jdk8 有更稳定的方案去解决伪共享带来的性能问题。下面我们展开介绍。
2026-06-25 23:08:12
236
原创 G1 释放物理内存,避免长期无效占用内存
在 G1 的使用中,重点关注如下参数同时考虑自己的真实场景,要避免短时间内频繁的申请和释放物理内存。相关链接。
2026-06-25 23:04:22
223
原创 gc触发crash,根因却是unsafe
遇到 crash 的堆栈在 gc的情况,应该现换个 gc 来看看是否是 gc 的 bug。确认是对象模型被破坏的场景,我们可以通过缩小范围+记录 unsafe 堆栈的方式追踪根因栈。追踪堆栈方案按照方便程度程度排序 jdk23>jdk11>jdk8社区已经有替换 unsafe api 的方案,替换方案,可以绕开unsafe 引发的 crash。相关链接。
2026-06-25 22:36:24
244
原创 慢半拍的 Flink TaskManager——问题不在代码中
回头看这个排查过程,从 Flink 指标面板一路追到 CPU 频率。堆内存和 GC 次数的差异是「高频低利用率」和「低频高利用率」的副产品,不是原因。很多人走到这里就会开始调 GC 参数,试图让两边的内存曲线对齐。但方向已经错了。火焰图差分显示热点代码等比率增长,说明不是某条分支路径在拖后腿。JIT 编译等级一样,JDK 版本一样,应用层和 JVM 层已经排除。最后两行perf stat的输出摆在面前——2.545 GHz vs 3.055 GHz,差距接近 20%。
2026-06-25 22:14:35
388
原创 jvm内存诊断全集
jvm内存诊断一直是一个强需求,大家能马上想到mat等工具,在诊断heap,metaspace,直接内存上是有奇效。但是介绍能解决jvm的一部分问题。下面就来一套,全面诊断的方式。利用...
2020-08-01 16:53:00
624
原创 aot上手
aot介绍aot是Ahead-Of-Time的缩写,以前大家都知道java的一个定位就是半编译,半解释型语言。他把java文件编译成class文件,最后jvm解释执行class文件,jv...
2020-05-24 15:30:00
735
原创 idea
properties中文不会自动进行unicode转码project settings - File Encoding列编辑alt+capslk(大小写切换)+鼠标左键 ...
2020-03-10 23:00:00
162
原创 try-with-resource从入门到使用
try-with-resource是从java7开始提供的新特性。方便了我们资源的代码编写。下面展示一下代码模板的对比没有try-with-resourcetry{ 资源打开 业务...
2020-03-02 23:23:00
1257
原创 记录java锁等待的时间
java中synchronized锁是语言层面实现的锁,也是我们比较常用的一种。经过jdk层面的优化,这个关键字在重入锁的层面已经和ReentrantLock接近,而且有更丰富的场景(锁膨...
2020-03-02 23:21:00
1043
原创 c++常用方法
数字转stringto_string(xx);string到数值stoi:string 到 intstol: string 到 longstoll:string 到 long...
2020-02-29 15:48:00
282
原创 mybatis
list<if test=“xx!=null and xx.size()>0"></if>集合遍历<foreach collection="x...
2020-02-15 21:57:00
146
原创 maven
把依赖也加入jar包方法1 <plugin> <groupId>org.apache.maven.plugins</groupId> ...
2020-01-28 22:15:00
146
原创 idea插件
Free Mybatis pluginMaven HelperKey promoterRestfulTookiturl查找GsonFormat根据json自动产生java类...
2020-01-28 21:09:00
168
原创 消失的线程
很多小伙伴都问过我一个问题,就是任务线程跑着跑着消失了,而且没有任何异常日志。我都是条件反射式的回复,是不是用了线程池的submit提交任务。而且很大几率对方给予肯定答复。解决方案,很多人都听过不少,下面我就分析一下原因以及最佳实践。为什么消失submit这个单词用的真的特别好,特别洋气...
2018-12-31 13:45:00
231
原创 grafana 批量添加图表
利用grafana做监控展示特别方便,而且界面还很有科技感,一般的使用都是自己手动添加图表,或者使用别人提供好的模板。在一种情况下就比较尴尬了,我有100个实例的内存数据想展示,如果都放在一个table上,就特别的乱,互相覆盖,不能只管的展示,如果是1个实例一个table就很繁琐,明明相似的...
2018-12-31 13:37:00
1045
原创 登录的演进
随着技术的迭代和变更,登录模块的也有了很多的变化,今天就主要来说说这个问题。javawebjavaweb时代是学校教学的一部分,他是使用了servlet来进行编程,有的教学会使用一些框架,例如springmvc。里面的登录案例都是使用session来做的。第一次登录做检验,如果成功,就把登...
2018-12-25 00:40:00
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
3