在Java虚拟机中,主要有以下五种分区:
- 程序计数器(Program Counter Register):是JVM中的一块较小的内存空间,用于记录当前线程执行的位置,为线程切换提供支持。
- Java虚拟机栈(JVM Stack):是线程私有的内存区域,用于存储方法的局部变量、操作数栈、动态链接、方法出口等信息。
- 堆(Heap):是Java虚拟机管理的最大的一块内存区域,用于存储对象实例和数组对象。堆是被所有线程共享的区域,由垃圾回收器进行管理。
- 方法区(Method Area):是所有线程共享的内存区域,用于存储类信息、常量、静态变量、编译器编译后的代码等数据。
- 运行时常量池(Runtime Constant Pool):是方法区的一部分,用于存储编译时生成的各种字面量和符号引用。在运行时,也可以将新的常量放入运行时常量池中。
对于一个初始化的静态对象,它通常存放在方法区中的静态变量区域里。静态变量属于类变量,只会被类加载器加载一次,存放在方法区中,不属于对象实例的一部分。在程序运行时,类加载器将类的字节码加载到方法区中,并初始化静态变量,因此静态变量的初始化是在类加载的过程中进行的。