深入探索JVM垃圾收集器 — 选择合适的垃圾收集器

本文探讨了衡量垃圾收集器的三大指标——内存占用、吞吐量和延迟,指出在这些方面取得平衡的挑战。选择适合的应用收集器要考虑应用关注点、基础设施条件和JDK版本。对于面向用户的B/S系统,延迟往往是关键。文章还介绍了虚拟机及垃圾收集器日志的输出选项,如日志级别、时间戳和附加信息,强调了日志在故障排查中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

收集器的权衡

衡量垃圾收集器的三项最重要的指标是: 内存占⽤(Footprint)、吞吐量(Throughput)和延 迟(Latency),三者共同构成了⼀个“不可能三⻆”。三者总体的表现会随技术进步⽽越来越好,但是要在这三个⽅⾯同时具有卓越表现的“完美”收集器是极其困难甚⾄是不可能的,⼀款优秀的收集器通常最多可以同时达成其中的两项。

如何选择一款适合自己应用的收集器

·应用程序的主要关注点是什么?如果是数据分析、科学计算类的任务,目标是能尽快算出结果, 那吞吐量就是主要关注点;如果是SLA应用,那停顿时间直接影响服务质量,严重的甚至会导致事务 超时,这样延迟就是主要关注点;而如果是客户端应用或者嵌入式应用,那垃圾收集的内存占用则是 不可忽视的。

·运行应用的基础设施如何?譬如硬件规格,要涉及的系统架构是x86-32/64、SPARC还是 ARM/Aarch64;处理器的数量多少,分配内存的大小;选择的操作系统是Linux、Solaris还是Windows 等。

·使用JDK的发行商是什么?版本号是多少?是ZingJDK/Zulu、OracleJDK、Open-JDK、OpenJ9抑 或是其他公司的发行版?该JDK对应了《Java虚拟机规范》的哪个版本?

一般来说,收集器的选择就从以上这几点出发来考虑。举个例子,假设某个直接面向用户提供服 务的B/S系统准备选择垃圾收集器,一般来说延迟时间是这类应用的主要关注点.

虚拟机及垃圾收集器日志

直到JDK 9HotSpot所有功能的日志都收归到了“-Xlog”参数上

命令⾏中最关键的参数是选择器(Selector),它由标签(Tag)和⽇志级别(Level)共同组成。

⽇志级别从低到⾼,共有Trace,Debug,Info,Warning,Error,Of六种级别,⽇志

级别决定了输出信息的详细程度,默认级别为Info。

另外,还可以使⽤修饰器(Decorator)来要求每⾏⽇志输出都附加上额外的内容,⽀持附

加 在⽇志⾏上的信息包括:

·time:当前⽇期和时间。

·uptime:虚拟机启动到现在经过的时间,以秒为单位。

·timemillis:当前时间的毫秒数,相当于System.currentTimeMillis()的输出。

·uptimemillis:虚拟机启动到现在经过的毫秒数。

·timenanos:当前时间的纳秒数,相当于System.nanoTime()的输出。

·uptimenanos:虚拟机启动到现在经过的纳秒数。

·pid:进程ID。

·tid:线程ID。

·level:⽇志级别。

·tags: ⽇志输出的标签集。

如果不指定 ,默认值是uptime、level、tags这三个,此时⽇志输出类似于以下形式:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值