【发布时间】:2016-06-01 23:59:12
【问题描述】:
好吧,我有一个关于 JVM 内存段的问题, 我知道每个 JVM 都会选择实现这一点,但它是一个整体概念,在所有 JVM 中应该保持相同
运行时不使用虚拟机执行的标准 C/C++ 程序在运行时有四个内存段, 代码/堆栈/堆/数据 所有这些内存段都是由操作系统在运行时自动分配的。
但是,当 JVM 执行 Java 编译程序时,在运行时它有 5 个内存段
方法区/堆/Java堆栈/PC寄存器/本机堆栈
我的问题是,谁分配和管理这些内存段? 操作系统不知道正在运行的 java 程序,并认为它是作为计算机上常规程序运行的 JVM 的一部分,JIT 编译,Java 堆栈使用,这些操作需要运行时内存分配,而我是什么未能理解 JVM 如何将其内存划分为这些内存段。 这绝对不是由操作系统完成的,并且那些内存段(例如 java 堆栈)必须是连续的才能工作,所以如果 JVM 程序将简单地使用诸如 malloc 之类的命令来接收最大大小堆内存并将内存划分为段,我们不保证连续内存,如果有人能帮我把这件事弄清楚,我会很高兴的,这一切都搞混了......
【问题讨论】:
标签: memory garbage-collection jvm