运行时数据区域组成

线程私有 可出现的异常
程序计数器 唯一一个在《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。

某些LinuxUNIX系统,堆可以提升至3GB或接近4GB。

64位Java虚拟机