avatar

十六小站

欢迎来到我的个人主页! 期待与您分享我的经验与故事,一起探索技术的无穷可能!

  • 首页
  • NAS专题
  • 关于
Home Jvm参数
文章

Jvm参数

Posted 2025-02-24 Updated 2025-02- 24
By 十六 已删除用户
13~17 min read

JVM参数的设置对应用程序的性能和稳定性至关重要,尤其是在高并发场景下。合理的JVM参数配置可以优化内存使用、减少GC停顿时间、提升吞吐量。合适的jvm参数能将服务器性能压榨到极致。

堆内存设置

堆内存是JVM中最重要的内存区域,用于存储对象实例。合理设置堆内存大小可以避免频繁GC和内存溢出。

  • -Xms:初始堆大小(建议与-Xmx相同,避免动态调整带来的性能开销)。

  • -Xmx:最大堆大小(根据服务器内存和应用程序需求设置,通常设置为可用内存的70%-80%)。

  • -Xmn:年轻代大小(年轻代越大,Minor GC频率越低,但会减少老年代空间,需根据对象生命周期调整)。

例如:我的服务器是8G内存。我可以按以下参数设置。

-Xms6G -Xmx6G -Xmn3G

元空间设置

元空间(Metaspace)用于存储类的元数据,默认情况下没有大小限制,但为了避免内存泄漏或元空间过大,可以设置上限。

  • -XX:MetaspaceSize:初始元空间大小。

  • -XX:MaxMetaspaceSize:最大元空间大小。

示例:

-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1G

垃圾回收器选择

这也是Java这门语言常被人诟病的一项,选择合适的垃圾回收器可以显著减少GC停顿时间,提升系统性能。以下是常见的垃圾回收器及其适用场景:

1. Serial GC(串行回收器)

  • 适用于单核CPU或小型应用。

  • 参数:-XX:+UseSerialGC

2. Parallel GC(并行回收器)

  • 适用于多核CPU,追求高吞吐量的场景。

  • 参数:-XX:+UseParallelGC

3. CMS GC(并发标记清除回收器)

  • 适用于对响应时间敏感的应用,减少GC停顿时间。

  • 参数:-XX:+UseConcMarkSweepGC

4. G1 GC(Garbage-First回收器)

  • 适用于大内存、低延迟的场景,是JDK 9及以后的默认回收器。

  • 参数:-XX:+UseG1GC

示例:

-XX:+UseG1GC

GC日志配置

开启GC日志可以帮助分析垃圾回收行为,优化JVM参数。

  • -XX:+PrintGCDetails:打印GC详细信息。

  • -XX:+PrintGCDateStamps:打印GC时间戳。

  • -Xloggc:<file>:将GC日志输出到指定文件。

示例:

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log

线程栈大小

每个线程都会占用一定的栈空间,默认大小为1MB。如果线程数较多,可以适当减小栈大小以节省内存。

  • -Xss:设置线程栈大小。

示例:

-Xss512k

直接内存设置

直接内存(Direct Memory)用于NIO操作,默认与堆内存大小相同。如果应用程序使用大量NIO操作,可以适当调整。

  • -XX:MaxDirectMemorySize:设置最大直接内存大小。

示例:

-XX:MaxDirectMemorySize=1G

其他优化参数

  • -XX:+DisableExplicitGC:禁止显式调用System.gc(),避免不必要的Full GC。

  • -XX:+HeapDumpOnOutOfMemoryError:在内存溢出时生成堆转储文件,便于分析。

  • -XX:HeapDumpPath=<path>:指定堆转储文件的保存路径。

  • -XX:+UseCompressedOops:启用压缩指针,减少内存占用(64位JVM默认启用)。

  • -XX:+UseStringDeduplication:字符串去重,减少内存占用(G1 GC下有效)。

示例:

-XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump

完整的JVM参数示例

以下是一个适用于高并发场景的JVM参数配置示例:

-Xms4G -Xmx4G -Xmn2G \
-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:ParallelGCThreads=4 \
-XX:ConcGCThreads=2 \
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump \
-XX:+DisableExplicitGC \
-XX:+UseStringDeduplication \
-Xss512k

高手之路
Java
License:  CC BY 4.0
Share

Further Reading

Sep 6, 2025

记一次前端优化(vue2)

由于博主所在公司的前端缺乏高端人员,导致前端代码臃肿,前端页面加载耗时基本上在min级别,于是博主决定进行一次优化 。首先贴上优化前的加载截图 ,明显可以看出 ,资源加载竟然加载了45.2MB,耗时在2.1min。 1. 引入Bundle Size检查打包体积 (1)下载依赖

Sep 6, 2025

SpringBoot3.X-2(缓存Redis/memory)

本文主要是实现缓存的集成,由于是单体项目 ,目前整合了内存缓存和Redis缓存两种,可以通过配置来切换。 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta

Sep 5, 2025

SpringBoot3.X-1(MP+Druid)

本次基于springboot-3.5.5,先附上文档地址:https://docs.spring.io/spring-boot/reference/data/sql.html 初始化springboot项目 项目创建步骤不做记录 集成mybaits-plus</

OLDER

OpenSearch常用脚本

NEWER

onlyoffice配置

Recently Updated

  • 记一次前端优化(vue2)
  • SpringBoot3.X-2(缓存Redis/memory)
  • SpringBoot3.X-1(MP+Druid)
  • Onlyoffice编译
  • K6+Playwright实现并发测试

Trending Tags

Java Docker 前端 中间件 数据库 群晖 unraid

Contents

©2025 十六小站. Some rights reserved.

Using the Halo theme Chirpy