栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
栈:
- 基本类型的变量数据
- 对象的引用
堆:
- 存放所有new出来的对象
常量池:
- 字符串变量
- 基本类型常量
Java8 元空间
原文链接:https://blog.csdn.net/u010588262/article/details/81365547
方法区也是所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。
方法区是JVM 的规范,永久代(PermGen space)是HotSpot对这种规范的实现。
在 JDK 1.8 中, HotSpot 已经没有 “PermGen space”这个区间了,取而代之的是 Metaspace(元空间)。
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小: