当前位置:首页 > 内存 > 正文

jvm cms 适合多少内存

  • 内存
  • 2024-05-22 02:34:36
  • 8311

一、JVM技术详解:常见的GC算法(Parallel/CMS/G1)

学习完GC算法的相关概念后,我们将介绍这些算法在JVM中的具体实现。首先要记住的是,大多数JVM需要使用两种不同的GC算法-一种用于清理年轻代,另一种用于清理老年代。

我们可以选择JVM内置的许多不同的算法。如果没有通过参数显式指定垃圾收集算法,则将使用相应JDK版本的默认实现。本章将详细介绍不同算法的实现原理。

串行GC对于年轻代使用标记-复制算法,对于老年代使用标记-清除-紧凑算法。

两者都是单线程垃圾收集器,无法执行并行处理,因此它们会触发基于表的暂停(STW)并停止所有应用程序线程。

因此该GC算法无法充分利用多核CPU。无论有多少个CPU核心,JVM在垃圾收集时只能使用单个核心。

要启用这个收集器,你只需要指定一个JVM启动参数,该参数对年轻代和老年代都有效:

此选项仅适用于数百MB的JVM堆内存,单核CPU时比较有用。

对于服务器端,由于通常有多个CPU核心,因此不建议这样做,除非绝对有必要限制JVM使用的资源。大多数服务器端应用程序都部署在多核平台上。选择串行GC意味着人为地限制系统资源使用,这会导致资源闲置和多余的CPU资源无法用于提高业务处理吞吐量。

关于串行垃圾收集器的日志内容,我们将在后面的内容“GC日志讲解与分析”中详细讲解。

这类并行垃圾回收组合在年轻代中使用“标记-复制”算法,在老年代中使用“标记-清除-紧凑”算法。老年代会触发STW事件,停止所有应用程序线程来执行垃圾收集,两者在执行“标记和复制”阶段/整理时都使用多个线程,因此被称为“并行”。通过并行执行,GC时间显着减少。

通过命令行参数指定GC线程数-XX:ParallelGCThreads=NNN默认值为并行GCCPU核心数,可以通过以下任意一组命令行参数指定:

并行垃圾收集器适用于多核服务器,主要目标是提高吞吐量,由于有效利用系统资源,可以实现更高的吞吐量:


二、Linux里面JVM内存怎么设置

指定启动jar包时的相关参数比如我的项目启动命令是这样的

启动命令以及编码部分是。项目名称

常用参数如下

1.-Xms:初始批量大小。只要初始化了,就会占用堆的大小。

2.-Xmx:最大堆大小。emoryError:Javaheap错误可以通过配置-Xms和-Xmx参数来设置。

3.-Xss:堆栈大小分配。栈是每个线程的私有区域,通常只有几百K大小,它定义了函数调用的深度,局部变量和参数在栈上共享。

当存在大量局部变量和递归时,会出现OOM堆栈溢出(verflowError)等错误。

:NewSize:设置新生代大小的绝对值。

5.-XX:NewRatio:设置新生代与老年代的比例。例如,如果设置为3,则新生代:老生代=1:3,新生代占总堆栈的1/4。

6.-XX:MaxPermSize:设置持久代大小。

emoryError:此OOM错误PermGenspace应适当增加PermSize和MaxPermSize。

7.-XX:幸存者报告:伊甸园区域与新生代两个幸存区域的报告。请注意,Survivor有两个区域:表单和它们。例如,当设置为8时,则eden:form:to=8:1:1。

8.-XX:HeapDumpOutOfMemoryError:OOM发生时将堆转储到文件这是一个非常好的诊断方法。

9.-XX:HeapDumpPath:导出的堆转储文件的路径。

10.-XX:OnOutOfMemoryError:发生OOM时,运行脚本,例如发送电子邮件警报并重新启动程序。接下来是场景的路径。