堆 栈 方法区的关系
什么是方法区
在java虚拟机规范中明确说明:尽管方法区逻辑上是堆的一部分,但是一些简单的实现可能不会选择进行垃圾回收或进行压缩/对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以方法区看作是一块独立于java堆的内存空间。
1.方法区与java堆一样,是各个线程共享的内存区域
2.方法区在jvm启动的时候创建,并且他的实际的物理内存空间中与java堆区一样都可以是不连续的。
3.方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展
4.方法去的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出OutOfMemoryError
在JDK7及以前,习惯上把方法区,称为永久代。JDK8开始,使用元空间取代了永久代。
永久