java 内存调优基础参数

本贴最后更新于 2949 天前,其中的信息可能已经东海扬尘

java 内存调优基础参数

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

参考文献:

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

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

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...