学习JVM原理-1. Runtime Data Areas

摘自《深入理解Java虚拟机》周志明著

Runtime Data Areas分为五大部分:

   1.
Program Counter Register: 当前线程所执行的字节码的行号指示器,这里不会产生内存溢出问题

   2.
VM Stack: Java方法执行的内存模型。每个方法会占用一个栈帧,用于存储局部变量表,对象引用等。如果存储前申请不到足够的内存,会抛OutOfMemoryError;另外,如果栈深度大于JVM所容许的最大深度,则会抛StackOverflowError

   3.
Native Method Stacks: 与VM Stack作用相似,只不过它只针对虚拟机用到的Native方法。它也会抛OutOfMemoryError和StackOverflowError.

   4.
Heap: 用于存放对象实例,也称作GC堆。会抛OutOfMemoryError

   5.
Method Area: 存放类信息,常量,静态变量等。按规范在此可以选择不实现垃圾收集,但实践证明这里的GC是必要的。这里也会抛OutOfMemoryError

另外,JVM可以用"Direct Memory"的方式直接操纵本地内存(如NIO),如果这里申请的内存超过了本机总内存,则JVM也会抛OutOfMemoryError

举例说明:

   Bean bean = new Bean();

  

   1. "Bean bean"将会存入到VM Stack的局部变量表中

   2. new Bean()这个对象实例将会存入到 Heap中

   3. Bean这个类相关的数据将存入到Method Area

   4. "bean"可以直接指定new Bean()对象实例,也可以通过一个句柄池作为中介指过去

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.