多提一嘴,为了完善方法区这部分内容的介绍,我看了很多文档,还特意去扒了一下《深入理解Java虚拟机(第3版)》勘误的 issues,简直看到的脑壳疼。。。
讲真,深挖下来的话细节太多,也没太大意义(卷不动了)。
这个问题在 Java 面试中还是挺常见的(通常会在面试官问你 JVM 运行时内存的时候被提到),但是,面试的时候不会问的特别细致。
这篇文章我就从面试的角度,通过 6 个常见的知识点/面试题来带你了解方法区:
- 什么是方法区
- 方法区和永久代以及元空间有什么关系?
- 方法区常用参数有哪些?
- 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?
- 什么是运行时常量池?
- 字符串常量池有什么作用?
- JDK 1.7 为什么要将字符串常量池移动到堆中?
下面是正文。
什么是方法区?
方法区属于是 JVM 运行时数据区域的一块逻辑区域,是各个线程共享的内存区域。
《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用,方法区到底要如何实现那就是虚拟机自