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































相关推荐
IDRSolutions_CN8 分钟前
如何将 PDF 中的文本提取为 JSON 格式
java·经验分享·pdf·软件工程·团队开发
摘星编程29 分钟前
并发设计模式实战系列(6):读写锁
java·设计模式·并发编程
吴_知遇36 分钟前
【华为OD机试真题】428、连续字母长度 | 机试真题+思路参考+代码解析(E卷)(C++)
开发语言·c++·华为od
Java中文社群1 小时前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端
Apache Flink1 小时前
京东物流基于Flink & StarRocks的湖仓建设实践
java·大数据·flink
basketball6161 小时前
Python torchvision.transforms 下常用图像处理方法
开发语言·图像处理·python
JAVA百练成神1 小时前
深度理解spring——BeanFactory的实现
java·后端·spring
兔子蟹子1 小时前
Java集合框架解析
java·windows·python
宁酱醇1 小时前
各种各样的bug合集
开发语言·笔记·python·gitlab·bug
DKPT1 小时前
正则表达式
java·数据库·笔记·学习·正则表达式