JVM性能优化
你好呀,我的老朋友!我是老寇,欢迎来到老寇IoT云平台!
# 优化ARM JVM性能【1G内存】
# 🚀 安装与卸载JDK25
# 安装
sudo pacman -Syy
sudo pacman -S jdk25-openjdk
# 卸载
sudo pacman -R jdk25-openjdk
# 🚀 调整内存
👉 注意:一旦 JVM 发生 OOM,立刻、直接退出进程(kill -9级别)
java \
-Xms256m \
-Xmx256m \
-XX:MaxMetaspaceSize=128m \
-XX:ReservedCodeCacheSize=32m \
-XX:+UseSerialGC \
-XX:MaxDirectMemorySize=32m \
-XX:+ExitOnOutOfMemoryError \
-jar app.jar
👉 注意:1G内存,默认开启指针压缩
# 查看参数
java -XX:+PrintFlagsFinal -version | grep Compressed
# 开启情况
# bool UseCompressedClassPointers = true
# bool UseCompressedOops = true
# 🚀 锁死堆内存
👉 注意:防止JVM运行中偷偷扩容
👉 注意:避免Full GC频繁抖动
-Xms256m -Xmx256m
# 🚀 垃圾回收器
👉 注意:G1/ZGC/Shenandoah都有额外线程和元数据开销
👉 注意:在<1GB内存下,Serial GC反而最省内存
👉 注意:JDK25里Serial GC依然是稳定、可用、低占用的
-XX:+UseSerialGC
# 🚀 锁死元空间
👉 注意:加载的类一多,Metaspace会吃掉你剩余的内存
👉 注意:OOM往往不是Heap,而是Metaspace
-XX:MaxMetaspaceSize=128m
# 🚀 JIT生成的机器码
-XX:ReservedCodeCacheSize=32m
小内存(≤1GB)推荐值
| 场景 | Code Cache |
|---|---|
| CLI / 工具 | 16m |
| 普通服务 | 32m |
| Spring Boot | 32m ~ 48m |
| 超高 QPS | 64m(不建议 500MB 环境) |
# 🚀 堆外内存
👉 注意:堆外内存,GC 只能“间接回收”,回收慢、不可控
👉 注意:回收依赖:Cleaner、引用失效、Full GC
-XX:MaxDirectMemorySize=32m
广义堆外内存
| 类型 | 例子 |
|---|---|
| Direct Memory | NIO / Netty |
| Code Cache | JIT 机器码 |
| Metaspace | 类元数据 |
| JNI malloc | 本地库 |
| Thread Stack | 每个线程的栈 |
# 🚀 Tomcat
👉 注意:线程栈也会吃内存(每线程 ~1MB)
server:
tomcat:
max-threads: 50
accept-count: 100
我是老寇,我们下次再见啦!
上次更新: 2/9/2026, 2:54:22 PM