Java中的堆内存和栈内存个人见解

来源:互联网 发布:淘宝客后台管理系统 编辑:程序博客网 时间:2024/05/26 09:54

首先,所谓的Java的堆内存和栈内存在Java虚拟机规范中是不存在。
在Java虚拟机规范中,运行时数据区由程序计数器(PC寄存器)Java虚拟机栈Java堆方法区本地方法区五大部分组成。运行时常量池是在方法区中分配,所以不是六大部分。

那为什么会有堆内存和栈内存这样的说法呢?
1. 栈内存:在《Java虚拟机规范》第一版中,Java虚拟机栈也称为“Java栈”。可能是翻译或者是部分人的说法流传导致了出现栈内存的说法吧。如果一定要说栈内存,请记住栈内存其实就是指Java的虚拟机栈
2. 堆内存:由于以前大家多数是使用sun(现在被Oracle收购)的HotSpot JVM,而在HotSpot JVM中可以像管理Java堆那样管理方法区的永久代内存,而且也有可能是把Java堆误解成堆内存了,但是实际上堆内存其实是指Java堆和方法区

本文主要是针对了JDK1.7h和HotSpot JVM去解析,所以没有提到JDK1.8的元空间(Metaspace),同时参考了以下书籍:
《Java虚拟机规范 Java SE 7版 》
《深入理解Java虚拟机 JVM高级特性与最佳实践》

原创粉丝点击