linuxgc
⑴ java 的七种垃圾收集器 | Linux 中国
Java 的内存管理中,垃圾收集器(GC)起着至关重要的作用,它自动回收不再使用的对象,避免内存泄露和应用程序崩溃。
在 Java 虚拟机(JVM)中,有七种不同的垃圾收集器可供选择,每种都有其特定的目的和优势。
1、Serial 收集器:这是垃圾收集器的原始实现,使用单线程进行垃圾回收。适用于可以承受短暂停顿的应用程序。在运行时,可以通过以下命令启用该垃圾收集器:
2、Parallel 收集器:与 Serial 收集器类似,Parallel 收集器也使用“stop the world”方法,但在垃圾收集时会有多个线程参与。适用于多线程和多处理器环境下的应用程序。使用该垃圾收集器时,可以通过各种 JVM 参数进行调优。可以使用以下命令显式启用 Parallel 收集器:
3、Concurrent Mark Sweep(CMS)收集器:CMS 垃圾收集器与应用程序并行运行,适用于停顿时间较短的应用程序。在 Java8 中已过时,并在 Java14 中被移除。可以使用以下命令启用 CMS 收集器:
4、G1 收集器:G1 垃圾收集器旨在替代 GMS,具有并行、并发和增量压缩功能。它将堆内存划分为大小相同的区域,通过多个线程触发全局标记阶段。可以使用以下命令启用 G1 收集器:
5、Epsilon 收集器:在 Java11 中引入的 no-op 收集器,不做任何实际的内存回收,只负责管理内存分配。可以使用以下命令启用 Epsilon 收集器:
6、Shenandoah 收集器:在 JDK12 中引入的 CPU 密集型垃圾收集器,进行内存压缩,立即删除无用对象并释放操作系统的空间。可以使用以下命令启用 Shenandoah 收集器:
7、ZGC 收集器:为低延迟需要和大量堆空间使用而设计,允许在垃圾回收器运行时 Java 应用程序继续运行。可以使用以下命令启用 ZGC 收集器:
Java 提供了灵活的内存管理方式,熟悉不同的可用方法有助于为正在开发或运行的应用程序选择最合适的内存管理方式。
⑵ Linux里面JVM内存怎么设置
jar包启动时指定对应参数,比如我的工程启动命令就是这样的
启动命令,打码部分为工程名
常见参数如下
1.-Xms:初始堆大小。只要启动,就占用的堆大小。
2.-Xmx:最大堆大小。java.lang.OutOfMemoryError:Java heap这个错误可以通过配置-Xms和-Xmx参数来设置。
3.-Xss:栈大小分配。栈是每个线程私有的区域,通常只有几百K大小,决定了函数调用的深度,而局部变量、参数都分配到栈上。
当出现大量局部变量,递归时,会发生栈空间OOM(java.lang.StackOverflowError)之类的错误。
4.XX:NewSize:设置新生代大小的绝对值。
5.-XX:NewRatio:设置年轻代和年老代的比值。比如设置为3,则新生代:老年代=1:3,新生代占总heap的1/4。
6.-XX:MaxPermSize:设置持久代大小。
java.lang.OutOfMemoryError:PermGenspace这个OOM错误需要合理调大PermSize和MaxPermSize大小。
7.-XX:SurvivorRatio:年轻代中Eden区与两个Survivor区的比值。注意,Survivor区有form和to两个。比如设置为8时,那么eden:form:to=8:1:1。
8.-XX:HeapDumpOnOutOfMemoryError:发生OOM时转储堆到文件,这是一个非常好的诊断方法。
9.-XX:HeapDumpPath:导出堆的转储文件路径。
10.-XX:OnOutOfMemoryError:OOM时,执行一个脚本,比如发送邮件报警,重启程序。后面跟着一个脚本的路径。