15.互联网大厂高频面试题-JVMGC·下

堆内存初始大小快速复习

首先,最司空见惯的一条初始堆内存大小和最大堆内存大小必须配成一样的,也就是-Xms=-Xmx。
在这里插入图片描述

基础知识复习

在这里插入图片描述
案例:
在这里插入图片描述
查看堆的初始值和最大值,可以用程序级别和命令级别,上述就是程序级别,命令级别就是jinfo -flag 参数名称 java进程号。

常用参数-栈内存Xss

在这里插入图片描述
在这里插入图片描述
这俩是输入XX参数,是初始堆内存和最大堆内存的缩写。
在这里插入图片描述
线程栈是线程私有的。思考下面这种现象,线程栈的大小在运行起来的时候是0?
在这里插入图片描述
如果设置一下vm options,那么再重复查看,则变成设置的值。
在这里插入图片描述
查一下oracle官网的文档:
在这里插入图片描述
从这个位置定位你的知识域,如果是java虚拟机,就点进去相应的位置查找就行了。
在这里插入图片描述
-Xss的大小是依赖平台的,其他平台基本都是默认1024k,但是windows平台是依赖于虚拟内存的(默认出厂值)。
关于这个解释jdk8-9-10的解释都是一样的。

常用参数-元空间MetaSpaceSize,Xmn

在这里插入图片描述
Xmn这个参数一般不用调。除非你的业务比较特殊。
在这里插入图片描述

对于元空间这种参数,就是应该调整的那种,一般是调大。
元空间只受本地内存(native memory)的限制,但是出厂调的并不大,所以有时也会发生元空间的溢出。下图是16gwin系统的默认大小,此时没启动java程序:
在这里插入图片描述
在这里插入图片描述
换算之后,元空间只设置了21M,所以可能会发生OOm异常(元空间溢出)。
就可以配置大一些来解决这个问题:
在这里插入图片描述
在这里插入图片描述
这是一个典型设置案例(上图):
初始堆空间是128m,最大堆空间4g,初始栈大小1024k,元空间512m,打印常见命令行参数,打印gc日志,使用串行垃圾回收器。
先什么都不配置,打印一下常见的命令行参数,会得到16gwin系统的jvm配置:这是java8出厂自带的,没有修改过。使用的并行垃圾回收器。
在这里插入图片描述
设置这个典型配置到idea的vm options:
在这里插入图片描述
这个典型配置用到的参数,面试的时候答上去就可以了。主要是答这些点。
修改之后,打印的内容改为:
在这里插入图片描述
设置的参数都产生了效果,发生了改变。

常见基础参数PrintGCDetail回收前后对比讲解

在vm options参数种加入-XX:PrintGCDetails.然后打印个helloi world。查看控制台的情况。
在这里插入图片描述
打印出了垃圾回收的细节情况。
通过设置堆的初始大小和max大小为10m,然后创建一个大对象:
在这里插入图片描述
就会看到喜闻乐见的oom:
在这里插入图片描述
在这里插入图片描述

GC

在这里插入图片描述
解析GC信息,如上图:

FULL GC

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

常用基础参数SurvivorRatio

该参数用来设置幸存区的比例。堆的结构如下:
在这里插入图片描述
在这里插入图片描述
具体内容:
在这里插入图片描述
默认的eden区跟survivor区是8:1:1.可以通过详细gc信息看出来,通过SurvivorRatio这个参数,可以该百年比例,这个参数说明的是eden区的比例,from区和to区是一样大的。
在这里插入图片描述
设置之后,比例就变了,如上图。2368:512:512,接近4:1:1

常用基础参数NewRatio讲解

在这里插入图片描述
正常使用默认的2:1就好了。如果新生代配置的份额特别小,那么会频繁的触发gc,性能也不好。
在这里插入图片描述
设置vm options 查看打印区别。
在这里插入图片描述
修改之前:
在这里插入图片描述
修改之后:
在这里插入图片描述
通过这个参数调整新生代:老年代的比例。

常用参数之MaxTenuringThreshold

在这里插入图片描述
在这里插入图片描述
这个参数jvm出厂默认为15.如果设置的超过15,则jvm运行失败,如下图:
在这里插入图片描述
jvm规定不允许超过15.
以前jdk6-7的时候,可以设置为31,这样养老区有很少的对象,就不容易触发full gc,可以提升效率。
但是jdk8之后,就不允许乱改了,有了取值范围[0-15].

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值