JVM详解:运行时数据区-方法区
accttodo 12/31/2023 Java
目录
参考:
- 链接1:[https://blog.csdn.net/qq_48435252/article/details/123697193
# JVM详解:运行时数据区-方法区
方法区的理解
《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。’但对于HotSpotJVM而言,方法区还有一个别名叫做Non-heap(非堆),目的就是要和堆分开。所以,方法区可以看作是一块独立于Java堆的内存空间
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域
方法区在JVM启动时就会被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的
方法区的大小,跟堆空间一样,可以选择固定大小或者可拓展
方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:OOM。
比如:
加载大量的第三方jar包;
Tomcat部署的工程过多;
大量动态生成反射类;
关闭JVM就会释放这个区域的内存
方法区在运行时数据区中的位置
方法区存储的信息
方法区用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。