Java 内存模型指定 Java 虚拟机如何与计算机的内存(RAM)配合使用。 在本教程中,我将向您展示如何配置 Java 使用的内存。
Java 内存模型
JVM 内部使用的 Java 内存模型在线程栈和堆之间分配内存。 JVM 中运行的每个线程都有自己的线程栈。 线程栈包含有关线程调用了哪些方法以达到当前执行点的信息。 它还包含每个正在执行的方法的所有局部变量。
基本类型的所有局部变量(boolean
,byte
,short
,char
,int
,long
,float
,double
)都完全存储在线程栈中,因此没有 对其他线程可见。
堆包含 Java 应用程序中创建的所有对象,而不管创建该对象的线程如何。 这包括原始类型的对象版本(例如Byte
,Integer
,Long
等)。
增加堆大小
默认情况下,JVM 使用的最大内存小于物理内存的 1/4。 您可以通过执行以下 Java 代码来检查最大内存:
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + " MB");
您可以通过设置初始和最大堆大小来配置 Java 程序的内存使用量,如下所示:
java -Xms<initial heap size> -Xmx<maximum heap size>
例如:
java -Xms500m -Xmx6g myprogram
会将初始堆大小设置为 500 MB,将最大堆大小设置为 6 GB。
增加栈大小
在 Windows 上,默认线程栈大小是从二进制文件(java.exe
)中读取的。 从 Java SE 6 开始,此值在 32 位 VM 中为 320k,在 64 位 VM 中为 1024k。 在 x86 Solaris/Linux 上,在 32 位 VM 中为 320k,在 64 位 VM 中为 1024k。
您可以使用–Xss
自变量来增加栈大小。
例如:
java -Xss4m myprogram
将栈大小设置为 4 MB。