JVM的内存模型
JVM(Java Virtual Machine)内存分为几大区域,包括程序计数器、堆、栈、方法区,其实内存模型和C++很类似。其中:
- 程序计数器:
- 记录当前执行指令的地址,对于if、for、递归、函数调用等,修改该计算器的值即可,该计数器有程序修改
- 堆
- 堆内存是通过new创建的对象,在JAVA中,用new创建的对象都是在堆创建的(基础类型除外),在C++中,使用new创建的对象也是在堆存储的
- 栈
- 栈是形参、局部变量、递归的压栈都是存储在栈中的
- 方法区
- 方法区是存储方法和常量的,常量信息会存储在方法区,方法本身的一些信息也是存储在方法区
设置JVM内存的参数
-XX:PermSize=10M -XX:MaxPermSize=20M -Xmx100m -Xms20m -Xss20m
其中:
-XX:PermSize
是设置方法区默认为10M-XX:MaxPermSize
是设置方法去最大内存为20M-Xmx
是设置最大堆内存为100M-Xms
是设置最小堆内存是20m-Xss
是设置栈的内存为20m
这里我们可以将对应的参数换成k、m、g,单位不区分大小写,这里的内存限制受限于物理内存,如果我们发现内存溢出错误,可能 根据提示查找错误的原因,我们可以增大内存或者查询错误代码来解决该问题