java JVM总结


复制算法

标记清除

标记整理

gc root

jvm参数类型

1.标配参数

2.x参数

3.xx参数

Boolean类型

公式:-XX+或者-某个属性值(+表示开启-表示关闭)

jps

jinfo:查看java正在运行java程序后台信息

例查看属性是否开启:jinfo -flag PrintGCDetails {进程号}

例是否串行垃圾回收器: -XX+ UseSerialGC

KV设值类型

公式:-XX:属性key=属性值value

例:-XX:MetaspaceSize=128m

-XX:MaxTenuringThreshold=15 (多少次交换升老年区)

jinfo举例,如何查询当前运行程序的配置

jinfo -flag 配置项 进程编号

jinfo -flags 进程编号 (模糊查询当前进程编号的所有参数)

坑题

查看初始默认

java -XX:+PrintFlagsInitial

查看修改和更新的内容

java -XX:+PrintFlagsFinal (有:被修改过的)

打印命令行参数

java -XX:+PrintCommandLineFlags -version

最后一个参数看本次运行使用的垃圾回收器

基本调优

-Xms 初始大小内存,默认为物理内存1/64,等价于-XX:initialHeapSize

-Xmx 最大分配内存,默认为物理内存1/4,等价于-XX:MaxHeapSIze

-Xss 设置单个线程栈的大小,一般默认为512k-1024k,等价于-XX:ThreadStackSize

-Xmn 设置年轻代大小,一般不用调

-XX:MetaspaceSize 设置元空间大小,元空间的本质和永久代类似,都是对jvm规范中方法区的实现。

不过元空间与永久代之间最大区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。

-XX:+PringGCDetails 打印垃圾回收日志,如下图

-XX:SurvivorRatio


-XX:NewRatio

-XX:MaxTenuringThreshold 设置垃圾最大年龄

强引用

例:object2 是强引用,不会被垃圾回收

软引用


内存不足:

弱引用gc后没有引用被回收。

WeakHashMap key被滞空后对应的map键值对就会被垃圾回收器回收掉

虚引用


类似后置通知的虚引用



StackOverflowError 栈空间被撑爆,最简单的例子是写一个递归方法。方法区在栈

Java heap space 堆空间被撑爆

GC overheadLimit exceeded 频繁的GC但是没有什么效果,回收不了多少就会报错。

Direct buffer memory


unable to create new native thread


Metaspace































相关推荐
say_fall2 分钟前
C语言编程实战:每日一题:用队列实现栈
c语言·开发语言·redis
ゞ 正在缓冲99%…2 分钟前
2025.9.24华为软开
java·算法·华为
董世昌413 分钟前
前端跨域问题:原理、8 种解决方案与实战避坑指南
开发语言·前端·javascript
liupenglove3 分钟前
go-echarts基础使用方法
开发语言·golang·echarts
Zzzzzxl_3 分钟前
互联网大厂Java/Agent面试实战:JVM、Spring Boot、微服务与RAG全栈问答
java·jvm·springboot·agent·rag·microservices·vectordb
cmdch20175 分钟前
AWS亚马逊
java
Qiuner5 分钟前
Spring Boot 机制四: AOP 代理机制源码级深度解析(JDK / CGLIB 全链路)
java·spring boot·后端
TDengine (老段)6 分钟前
TDengine 字符串函数 GROUP_CONCAT 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Tony Bai9 分钟前
Go 2025云原生与可观测年度报告:底层性能革新与生态固防
开发语言·后端·云原生·golang
断春风9 分钟前
Java 集成 AI 大模型最佳实践:从零到一打造智能化后端
java·人工智能·ai