Java JVM 运行时内存区域介绍
2017-06-22 10:40:24 0
理解JVM运行时的内存结构,有助于我们java程序开发。在Java中,有一个常见的致命错误OutOfMemoryError,它就是与JVM的内存区域相关的。熟悉JVM内部的工作原理,能让我们更好的规避这些错误。本文将介绍JVM内存区域的类型,以及他们是如何工作的。
JVM运行时内存区域类型:
- 程序计数器PC (Program Counter Register)
- 虚拟机栈 (Java Virtual Machine Stacks)
- 堆区域 (Heap Memory)
- 方法区 (Method Area)
- 运行时常量池 (Run-time Constant Pool)
- 本地方法栈 (Native Method Stacks)
这六个内存区域,可以划分为一下两类:
- 线程独立的(绿色部分), 这些内存区域是独立分配给单个线程的,在线程开始的时候创建,在线程结束的时候销毁。
- 线程共享的(紫色部分),这些内存区域是公用的,能被各个线程访问到,它们在JVM启动的时候创建,在JVM停止时销毁。
- 线程独立的(绿色部分), 这些内存区域是独立分配给单个线程的,在线程开始的时候创建,在线程结束的时候销毁。
- 线程共享的(紫色部分),这些内存区域是公用的,能被各个线程访问到,它们在JVM启动的时候创建,在JVM停止时销毁。
- 程序计数器
- 虚拟机栈
StackOverflowError, 栈溢出错误。在固定大小的JVM栈中,程序运行时,当栈空间不足的时候,就会报这个错误。
OutOfMemoryError, 内存溢出错误。在动态大小的JVM栈中,当程序需要扩展空间获得更多内存时,但外部没有更多可用内存空间时,就会报这个错误。
- 堆内存
- 方法区
- 运行时常量池
- 本地方法栈
本文主要介绍了Java运行时的内存区域,以及对应的一些错误原因。了解JVM的内部机制,可以让我们写出科学的Java程序。