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































相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++