堆参数调优入门

Java7 和 Java8 堆内存的区别

  • Java7

image-20200805223819715

  • Java8

image-20200805223839172

JVM 默认占用内存的大小

  • JVM默认的初始占用内存大小 和 默认的最大占用内存大小
# JVM默认的初始占用内存大小 :宿主机的 1/64
# JVM默认的最大占用内存大小 :宿主机的 1/4

通过 java代码怎么查看 JVM 内存大小

public class Test {
    public static void main(String[] args) {
        long l = Runtime.getRuntime().maxMemory();//JVM最大占用内存
        long l1 = Runtime.getRuntime().totalMemory();//JVM内存总量
        System.out.println("max_memory="+l+"字节、"+(l/1024/1024)+"M");
        System.out.println("total_memory="+l1+"字节、"+(l1/1024/1024)+"M");
    }
}

image-20200816104534804

# 测试机器为 8G 内存,我们可以看出,最大内存为1/4,当前占用的总内存(最小内存)为 1/64

通过 idea 怎么设置最大占用内存和最小占用内存

设置堆内存大小:-Xms8m -Xmx8m

设置显示GC日志:-XX:+PrintGCDetails

image-20200816104759526

image-20200816104836914

JVM 系统默认值的修改简写

# -Xms: 查看 初始堆 内存大小

# -Xmx: 查看 堆内存 的最大值

# -Xss: 查看 初始栈 空间的大小

JVM 的参数类型

# 标配参数:稳定的、一直都存在的参数
		-version 、 -help  。。。

# X参数
		-Xint:解释执行
		-Xcomp:第一次使用就编译成本地代码
		-Xmined:混合模式(java默认)【先编译、后解释】

# XX参数(重点)
		Boolean类型:
			公式: -XX:+              【表示开启】
				  -XX:-               【表示关闭】
		KV 设值类型:
			公式: -XX:属性key=属性值value

标配参数X参数 的使用例子:

image-20200816160942605

XX参数的 Boolean类型的例子:

image-20200816161857303

image-20200816162054845

XX参数的 KV 设值类型的例子:

image-20200816162930586

image-20200816162720887

使用jdk工具查看当前运行程序的配置信息【查看参数】

工具:jsp【查看进程】、jinfo【查看配置信息】

1. 在终端执行 `jsp -l` 查看当前JVM的进程以及进程号
2. 在终端执行 `jinfo -flag  配置项 进程号` 查看具体配置项的详细信息
3. 在终端执行 `jinfo -flags 进程号` 查看此进程的所有的配置信息

image-20200816163833804

# 两个经典的参数: -Xms 和 -Xmx 【也是 XX参数的kv类型 】

	-Xms === -XX:InitialHeapSize
	-Xmx === -XX:MaxHeapSize

直接使用参数来查看JVM的初始默认值

# 1.查看安装好jdk后,没有改变前的 JVM 的所有的配置信息
  • java -XX:+PrintFlagsInitial -version

示例:

image-20200816165039754

# 2.主要查看修改更新后的配置信息内容
  • java -XX:+PrintFlagsFinal -version

示例:

image-20200816165711408

# 3. 查看重要参数,以及GC垃圾回收器的类型
  • java -XX:+PrintCommandLineFlags

示例:

image-20200816170822338

常用的基础参数之-Xss

# 设置单个线程栈的大小,一般默认为 512k~1024k,与生产平台有关【64位的Linux是1024k】
	等价于:-XX:ThreadStackSize

常用的基础参数之 -Xmn

# 设置年轻代的大小

常用经典的参数 -XX:+PrintGCDetails

JDK 1.8版本

image-20200817130920967

常用参数 -XX:MetaspaceSize

# 理论上在 java8 以后,元空间并不在虚拟机中,而是是使用本地内存的,所以元空间大小仅受本地内存大小限制
`但是`,MetaspaceSize 的大小只有21M左右。

image-20200817121947489

为了防止MetaspaceSize的 OOM,我们通常会将 MetaspaceSize 设置的大一些

-XX:MetaspaceSize=1024m

常用典型的参数设置合集

# -Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC

常用参数 -XX:SurvivorRatio

image-20200817124212607

常用经典的参数 -XX:NewRatio

image-20200817131040990

常用经典的参数 -XX:MaxTenuringThreshold

# 进入老年代的年龄 默认是 15
垃圾最大年龄

image-20200817131408156

image-20200817131735682

我们可以看出默认大小为15

image-20200817132013865

hreshold

# 进入老年代的年龄 默认是 15
垃圾最大年龄

[外链图片转存中…(img-XKKUBllK-1600787276596)]

[外链图片转存中…(img-0wlzxyJH-1600787276601)]

我们可以看出默认大小为15

[外链图片转存中…(img-PKFHYYyJ-1600787276603)]

java8 只能 0~15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值