JVM内存调优基础参数

3 篇文章 0 订阅

java内存调优基础参数

参考文献:
1. JVM实用参数(四)内存调优
2.深入理解 java 虚拟机 第二版

目录:

前言:本文主要介绍了JVM中各个区域的大小设置参数,一般来说,凡可以设置大小的区域都有发生内存溢出的可能。这里没有提及的是程序计数器。程序计数器是java内存区域中最小的储存单元,线程私有,是当前线程所执行的字节码的行号指示器。也只有此区域没有规定任何内存溢出异常。
这里写图片描述

java堆

线程共享内存区域,JVM中最大的内存区域,主要用于存在对象实例。几乎所有对象实例都在此区域储存。

-Xms :指定JVM初始堆内存大小

-Xmx :指定JVM最大堆内存大小

这两个参数单位为byte,也可使用单位符号指定,如使用k(K)、m(M)或g(G)。
使用命令行启动MyTest类,并指定堆初始内存256M,最大1G:

java -Xms256M -Xmx1G MyTest

需知道的是,-Xms-Xmx分别是和-XX:InitalHeapSize-XX:MaxHeapSize的缩写。

-XX:+HeapDumpOnOutOfMemoryError :开启内存溢出自动生成快照。

-XX:HeapDumpPath=<path> :指定内存快照生成路径。

-XX:+HeapDumpOnOutOfMemoryError可以让程序内存溢出时自动生成堆内存快照。默认情况下,堆内存快照保存在JVM启动目录下,文件名为java_pid<pid>.hprof。-XX:HeapDumpPath=<path>指定堆内存快照的路径,此参数将改变上面提及的默认路径。一般来说堆内存快照一般很大,需指定到有很大空间的地方。

JVM参数中含有+的一般为bool值选项,如HeapDumpOnOutOfMemoryError,在前面加+表示开启此功能,-则为禁止此功能。若选项为key-value形式,则为key=value,如HeapDumpPath=<path>

方法区

线程共享内存区域,存储类信息、常量、静态变量等

-XX:PermSize:方法区初始大小

-XX:MaxPermSize :方法区最大值

需注意的是:方法区并不等同于永久代,仅仅是HotSpot虚拟机使用永久代实现方法区,其他虚拟机并无永久代概念。另外,在JVM模型中方法区是堆的一个逻辑部分,可理解为其是区别于堆的独立空间。

启动MyTest类,设置方法区初始大小为128M,最大256M:

java -XX:PermSize=128M -XX:MaxPermSize=256M MyTest

虚拟机栈和本地方法栈

虚拟机栈

线程私有区域,是java方法执行的内存模型。,即每个方法的执行过程,就对应着虚拟机栈的一个栈帧从入栈到出栈的过程。一个栈帧包括:局部变量表操作数栈、动态链接、方法完成等。

-Xss :设置虚拟机栈大小

启动MyTest类,设置虚拟机栈大小为128K

java -Xss128K MyTest

本地方法栈

线程私有,与虚拟机栈类似,不过本地方法栈是java中执行native方法的内存模型。在HotSpot虚拟机中虚拟机栈与本地方法栈合二为一了,因此在HotSpot中不存在本地方法栈

-Xoss :设置本地方法栈大小(在HotSpot中无效)

注:在HotSpot中,设置栈容量只有-Xss参数。

本机直接内存

java1.4后,可通过NIO使用native函数库直接在堆外分配内存。直接内存不受java堆内存大小限制,默认与堆内存最大值(-Xmx)一致。

-XX:MaxDirectMemorySize=<size>

运行MyTest类,指定直接内存为256M

java -XX:MaxDirectMemorySize=256M MyTest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值