Java虚拟机中的运行数据去区有多少个?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Java虚拟机(JVM)的运行时数据区域主要分为以下几个部分:
方法区(Method Area):用于存储类信息、常量池、静态变量、即时编译器编译后的代码等数据。在Java 8中,这个区域有时也被称作“元空间(Metaspace)”,以区别于之前的永久代(PermGen)。
堆(Heap):是 JVM 管理的最大的内存区域,用来存放几乎所有的对象实例和数组。堆是线程共享的,在虚拟机启动时创建。Java堆可以细分为新生代和老年代,其中新生代又可分为Eden空间、From Survivor空间、To Survivor空间。
虚拟机栈(Java Virtual Machine Stacks):每个线程私有,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法在执行时都会创建一个栈帧用于存储这些信息,方法调用完成则对应栈帧出栈。
本地方法栈(Native Method Stacks):与虚拟机栈类似,但服务于的是 Native 方法,即非Java方法,也是线程私有的。
程序计数器(Program Counter Register):一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器,是线程私有的。
综上所述,Java虚拟机中的运行数据区域共有5个主要部分。