2016-07-27 38 views
1

我明白JVM如何从OS提供的可用原生堆中创建Java堆。什么是Java堆栈与本机内存的映射。

对于像JVM(java.exe)这样的本地进程,OS分配地址空间,它被分成多个区域,如堆,堆栈,数据等。

在某种程度上相同的方式JVM分配一些地址空间到正在运行的java程序(byecode),其包括Java堆,栈等

予理解的是,Java堆是机堆(由OS所提供的JVM的部分( java.exe))

但我无法理解这个“堆栈”部分来自哪里。

它是本机堆的一部分吗? 它是本地堆栈的一部分,就像java堆是本地堆的一部分?

就像Java堆和本地堆一样,我们不是有Java Stack vs native堆栈吗?

请帮帮我。我真的很难理解java中的堆栈内存。

+0

[此问题]可能的重复(http://stackoverflow.com/questions/38605147/how-does-jvm-uses-native-stack-manually-for-java-function-call)以及[这一个](https://stackoverflow.com/questions/16264118/how-jvm-stack-heap-and-threads-are-mapped-to-physical-memory-or-operation-syste?rq=1) – the8472

+0

可能的重复[什么和堆栈和堆在哪里?](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap) – Rupsingh

回答

3

从概念上讲,当java.exe启动时,程序会被OS授予一块内存。 java.exe本身使用该块内存的一部分。另一部分是字符串常量。剩下的就是堆。当一个新线程启动时,该线程将从堆中获得内存用于其堆栈。这样,(线程)堆栈在概念上与在堆上创建任何其他对象没有区别。

我希望这能为你解决这个问题。