当前位置:首页 > 虚拟机 > 正文

java虚拟机包括哪些部分


一、jvm堆内存区域包括哪些

根据《Java虚拟机规范》,运行时数据区通常包括这几个部分:程序计数器(ProgramCounterRegister)、Java栈(VMStack)、本机方法栈(NativeMethodStack)、方法区(MethodArea)、堆(Heap))。

如上,JVM的运行时数据区应该包括这几个部分。虽然JVM规范规定了程序执行时运行时数据区应该包含这些部分,但是对于具体应该如何实现却没有具体规定。不同的虚拟机厂商可能有不同的实现方法。


二、Java虚拟机几个点程序计数器:当前线程正在执行的字节码行号的指示器。
Java虚拟机栈:描述Java方法执行的内存模型。每个方法在执行时都会创建一个堆栈帧,用于存储局部变量表、操作数堆栈、动态链接、方法出口和其他信息。
原生方法栈:提供虚拟机使用的原生方法。
堆:存储对象实例。
方法区:用于存储虚拟机加载的数据,例如类信息、常量、静态变量以及用即时(JIT)编译器编译的代码。
2.堆的分区:Eden、survivalfrom、survivalto、老年代,各有特点
Eden区中的对象生死存亡,发生在以下情况:轻微发生。清理伊甸区和生存区,将幸存的实体转移到老年代保证的另一个生存区。如果年轻代中的对象多次在Minorc中存活并达到老一代的年龄,那么它将被移动到老一代。另外,大对象不能存储在年轻代中,而是直接传递到老年代。.因保修可能会发生损坏。
3.如何创建对象、分配对象内存以及从哪里访问对象
1创建对象包括:三步:①当遇到新命令时,检查该对象的符号引用是否在常量池中。如果不存在,则将加载该类。否则,执行下一步②。分配内存会擦除所有要分配的内存。对虚拟机进行必要的设置,例如哈希码设置和GC创建周期。此时在执行命令之前所有字段都为0。运行命令后,安装程序将被初始化。
2:对象内存分配:包括对象头、实例数据、排序填充
①对象头:包括对象哈希码、GC创建周期、锁状态标志等。
②实例数据:即对象初始化后的字段内容,包括父类的字段等
③排序填充:对象的地址为8.字节,虚拟机要求对象的大小是对象的整数倍(一或二)。然后就会有一个空白的地方。