2016-07-27 34 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本身使用該塊內存的一部分。另一部分是字符串常量。剩下的就是堆。當一個新線程啓動時,該線程將從堆中獲得內存用於其堆棧。這樣,(線程)堆棧在概念上與在堆上創建任何其他對象沒有區別。

我希望這能爲你解決這個問題。