JVM Optimization Learning(七)-GC

一、JVM Optimization

1、进程溢出调查

模拟

如何开启GC日志

如何开启GC日志
一般来说,JDK8及以下版本通过以下参数来开启GC日志:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log

如果是在JDK9及以上的版本,则格式略有不同:

-# JDK 11 环境,输出 info 级别的 GC 日志
java -Xms4g -Xmx4g
-Xlog:gc*=info:file=gc.log:time:filecount=0

串行垃圾收集、并行垃圾收集、并发垃圾回收、增量式垃圾回收

串行:就是只有单个worker线程来执行GC工作。

并行:并行垃圾收集,是指使用多个GC worker 线程并行地执行垃圾收集,能充分利用多核CPU的能力,缩短垃圾收集的暂停时间。除了单线程的GC,其他的垃圾收集器,比如 PS,CMS, G1等新的垃圾收集器都使用了多个线程来并行执行GC工作。

并发:并发垃圾收集器,是指在应用程序在正常执行时,有一部分GC任务,由GC线程在应用线程一起并发执行。例如 CMS/G1的各种并发阶段。

增量:首先, G1的堆内存不再单纯划分为年轻代和老年代,而是划分为多个(通常是 2048个)可以存放对象的小块堆区域(smaller heap regions)。每个小块,可能一会被定义成 Eden 区,一会被指定为 Survivor 区或者 Old 区。这样划分之后,使得 G1 不必每次都去回收整个堆空间,而是以增量的方式来进行处理: 每次只处理一部分内存块,称为此次 GC 的回收集(collection set)。下一次GC时在本次的基础上,再选定一定的区域来进行回收。增量式垃圾收集的好处是大大降低了单次GC暂停的时间。

GC停顿

因为GC过程中,有一部分操作需要等所有应用线程都到达安全点,暂停之后才能执行,这时候就叫做GC停顿,或者叫做GC暂停。

JVM设置元空间大小

    在Java虚拟机(JVM)中,元空间(Metaspace)是用于存储类元数据、常量池等的区域,它与之前的永久代(PermGen space)不同,元空间使用的是本地内存(native memory),而不是JVM堆内存。从Java 8开始,默认的元空间大小是依赖于操作系统的,但在某些情况下,你可能需要手动设置元空间的大小以避免内存溢出错误。

如何设置元空间大小

1. 使用JVM启动参数

你可以在启动Java应用程序时通过JVM参数来设置元空间的大小。使用-XX:MetaspaceSize来设置元空间的初始大小,使用-XX:MaxMetaspaceSize来设置元空间的最大大小。例如:

java -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar your-application.jar

这里,-XX:MetaspaceSize=128m设置了元空间的初始大小为128MB,-XX:MaxMetaspaceSize=256m设置了元空间的最大大小为256MB。

2. 动态调整

在某些情况下,你可能想在运行时动态调整元空间的大小。虽然JVM不直接支持动态调整元空间的大小,但你可以通过重启应用程序来改变这些设置。

初始大小和最大大小:通常建议将初始大小设置为一个相对较小的值,然后通过监控应用程序的行为来调整最大大小。这样可以减少启动时的内存占用,同时也留有足够的空间应对未来的需求。

监控:在生产环境中,监控元空间的使用情况是很重要的。你可以使用诸如JConsole、VisualVM或第三方工具如JMX来监控内存使用情况。

自动增长:从Java 8开始,如果不设置最大值,元空间的大小是可以自动增长的。但是,为了避免耗尽系统内存,最好还是设定一个合理的最大值。

如果你不确定如何开始,可以先设置一个较小的初始大小和最大大小,例如:

java -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m -jar your-application.jar

然后根据应用程序的运行情况逐步调整这些值。如果你发现应用程序频繁地进行垃圾回收或者出现OutOfMemoryError错误,可能需要增加元空间的大小。

正确设置元空间的大小对于确保Java应用程序的稳定运行至关重要。通过合理配置初始大小和最大大小,可以平衡应用程序的内存需求和系统的整体性能。

JVM Optimization Learning(六)-ZGC

再小的努力,乘以365都很明显!
每天⽤⼼记录⼀点点。内容也许不重要,但习惯很重要!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杀神lwz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值