Java生态非常强大,但还不够,有些场景仍处于劣势,而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场。比如
ZGC(The Z Garbage Collector)为JDK11推出一款低延迟的垃圾回收器。STW即停顿时间低于1ms,且不会随着堆的大小增加而增加。
高版本JDK16之后支持16TB级别的堆;
应用程序吞吐量最多减少15%。
为未来的GC新特性奠定基础。
ZGC采用堆空间分页模型的机制,堆空间分页模型也非常符合Linux Kernel2.6引入的标准大页(huge page)如4KB的处理方式。本质与G1一样,没有分代的概念,ZGC也采用基于Region的堆内存布局,不一样的是ZGC的Region具有动态性:动态创建销毁、动态容量大小。ZGC一共分为三种Region:
一段C程序mapping.c看下ZGC的64位虚拟地址空间的指针着色技术展示
编译执行,三个地址一样,也即是同一个实地址映射到3个虚地址。
主要分为两步
垃圾标记算法采用可达性分析算法
标记阶段,对象分配(Remapped)
标记结束后Remapped对象即为垃圾对象。而下次标记使用M1表示活跃。
生产环境中的问题
为什么要调优
调优场景
不同阶段的考虑
JVM调优目标是使用较小的内存占用来获得较高的吞吐量或者较低的延迟,从这里也可以知道其重要指标有三个:
从上面我们也知道这三者如同分布式CAP理论一样不可完全兼得,对于一个Java程序同时保证内存占用小、延迟低、高吞吐量是不可能的;任何一个指标性能的提高,几乎都是以牺牲其他指标性能的损为代价的,不可兼得。程序的目标不同,调优时所考虑的方向也不同,因此需要结合实际场景,有明确的优化目标,找到性能瓶颈,对瓶颈有针对性的优化。
无监控、不调优!命令行安装 jdk 的 bin 目录,这些工具用来获取目标 JVM 不同方面、不同层次的信息,帮助开发人员很好地解决 Java 应用程序的一些疑难杂症。
前面我们学习Arthas也是一种JVM监控及诊断工具GUI,本篇先抛出影子,后续在单独针对
此外针对JVM运行时参数和分析GC日志再单独增加专题文档
**本人博客网站 **IT小神 www.itxiaoshen.com