龙空技术网

jvm总结(二)方法区、常量池

小瓜瓜666 56

前言:

今天小伙伴们对“jvm的方法区存的什么”都比较珍视,姐妹们都需要剖析一些“jvm的方法区存的什么”的相关资讯。那么小编在网摘上搜集了一些有关“jvm的方法区存的什么””的相关资讯,希望看官们能喜欢,咱们一起来学习一下吧!

1、我们先看oracle官网的定义:

Java 虚拟机具有一个在所有 Java 虚拟机线程之间共享的方法区域。方法区域类似于用于常规语言的编译代码的存储区域,或者类似于操作系统进程中的“文本”段。它存储每个类的结构,如运行时常量池、字段和方法数据,以及方法和构造函数的代码,包括类和实例初始化以及接口初始化中使用的特殊方法。

方法区域是在虚拟机启动时创建的。尽管方法区域在逻辑上是堆的一部分,但简单的实现可能会选择不进行垃圾回收或压缩它。此规范不规定方法区域的位置或用于管理已编译代码的策略。方法区域可以是固定大小的,也可以根据计算的要求进行扩展,并且如果不需要更大的方法区域,则可以收缩。方法区域的内存不需要是连续的。

Java 虚拟机实现可以为程序员或用户提供对方法区域初始大小的控制,以及在大小不同的方法区域的情况下,控制最大和最小方法区域的大小。

以下异常情况与方法区域相关联:

如果方法区域中的内存无法用于满足分配请求,则 Java 虚拟机将引发 .OutOfMemoryError

2、方法区的位置和组成部分

上图我们可以看到方法区是存储在系统内存中的,我们一般叫做存储在元空间中。JDK1.6是存储在堆中的。

3、运行时常量池

常量池,就是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量 等信息

运行时常量池,常量池是 *.class 文件中的,当该类被加载,它的常量池信息就会放入运行时常量 池,并把里面的符号地址变为真实地址

标签: #jvm的方法区存的什么