运行时数据区域组成
线程私有 | 可出现的异常 | |
---|---|---|
程序计数器 | 是 | 唯一一个在《Java 虚拟机规范》中没有规定任何 OutOfMemoryError 情况的区域 |
Java虚拟机栈 | 是 | 1. 当线程请求的栈深度大于虚拟机所允许的深度, 将抛出 StackOverflowError 2. 当栈容量可以动态扩展,而扩展时无法申请到足够的内存时 将抛出 OutOfMemoryError 异常 |
本地方法栈 | 是 | 同Java 虚拟机栈 |
Java堆 | 否 | 1. 当堆没有内存进行实例分配时,将抛出OutOfMemoryError 异常 |
方法区 | 否 | 1. 当无法满足新的内存分配时,将抛出OutOfMemoryError 异常 |
内存限制
可使用
java -Xmx???m -version
进行测试
32位Java
虚拟机
32位都受到最高4GB内存的限制。(2的32次幂)
Windows
平台下每个进行都只能使用2GB
的内存,考虑到堆外内存,堆一般只能开到1.5GB。
某些Linux
或UNIX
系统,堆可以提升至3GB或接近4GB。