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































相关推荐
daidaidaiyu12 分钟前
Spring IOC 源码学习 声明式事务的入口点
java·spring
myloveasuka26 分钟前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石00834 分钟前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
wWYy.38 分钟前
STL:list
开发语言·c++
TON_G-T1 小时前
day.js和 Moment.js
开发语言·javascript·ecmascript
发际线还在1 小时前
互联网大厂Java三轮面试全流程实战问答与解析
java·数据库·分布式·面试·并发·系统设计·大厂
飞Link1 小时前
具身智能核心架构之 Python 行为树 (py_trees) 深度剖析与实战
开发语言·人工智能·python·架构
_周游1 小时前
Kaptcha—Google验证码工具
java·intellij-idea·jquery
我真会写代码1 小时前
深入理解JVM GC:触发机制、OOM关联及核心垃圾回收算法
java·jvm·架构
本喵是FW1 小时前
C语言手记1
java·c语言·算法