参考答案
Java 虚拟机在执行 Java 程序的过程中,会将它所管理的内存划分为若干个不同的数据区域:
- 程序计数器:可以看作是当前线程所执行的字节码文件(class)的行号指示器,它会记录执行痕迹,是每个线程私有的。
- 方法区:主要存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据,该区域是被线程共享的,很少发生垃圾回收。
- 栈:栈是运行时创建的,是线程私有的,生命周期与线程相同,存储声明的变量
- 本地方法栈:为native 方法服务,native方法是一种由非 java 语言实现的Java 方法,与Java 环境外交互,如可以用本地方法与操作系统交互。
- 堆:堆是所有线程共享的一块内存,是在 java 虚拟机启动时创建的,几乎所有对象实例都在此创建,所以经常发生垃圾回收操作
JDK8 之前,Hotspot 中方法区的实现是永久代(Perm)。
JDK8 开始使用元空间(Metaspace),以前永久代所有内容的字符串常量移至堆内存,其他内容移至元空间,元空间直接在本地内存分配。
以上,是JVM面试题【JVM的内存区域】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—