php 记录redis的几种类型的使用

C++ 使用vs 2019开发(安装)

  返回  

JVM方法区

2021/7/21 10:48:37 浏览:

1、堆栈方法区的关系
在这里插入图片描述
创建对象Person类(对象数据类型)放在方法区,对象实例数据放在堆中
方法区可以看做是独立于java堆的内存空间

2.2、 方法区的基本理解
(1)方法区和堆一样,是各个线程共享的内存区域
(2)方法区在JVM启动的时候就被创建,但实际物理地址和堆一样都是不连续的。
(3)方法区的大小,和堆空间一样,可以固定大小和扩展。
(4)方法区的大小决定了系统了可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误。java.lang.OutOfMemoryError: PermGen space 或者java.lang.OutOfMemoryError: Metaspace 这个是JDK1.8的元空间
还有加载了过多的jar包,或者Tomcat部署了太多的工程,大量动态的生成反射类
(5)关闭JVM会释放这个区域的内存。

2.3、HotSpot中方法区的演进
在JDK7之前,习惯把方法区称为永久代,JDK8之后,称为元空间,但这么讲是在Hotspot中
在JDK8之后,彻底抛弃了永久代的说法,永久代和元空间的主要区别是,元空间不在虚拟机设置的内存中,而是在使用本地内存。如果无法满足新的内存分配需求的话,也会报OOM的错误。

3.1、设置方法区内存大小
(1)方法区的大小不是固定不变的,JVM根据应用的需求动态调整
(2)JDK7及以前,
通过来设置永久代初始分配空间。默认值是20.75M-XX:Permsize
通过来设定永久代最大可分配空间。32位机器默认是64M,64位机器模式是82M-XX:MaxPermsize
当JVM加载的类信息容量超过了这个值,会报异常OutOfMemoryError:PermGen space。
(3)JDK8及以后
必须要设置元空间大小,首先默认的元空间大小为MetaspaceSize值为21MB,然后一旦触及这个高水位线,Full GC就会触发然后卸载那些没用的类,然后这个高水位线就会被重置,新的高水位值取决于释放空间的大小。如果初始的高水位线过低,上述调整的过程就会发生好多次,所以为了避免频繁的GC,建议初始化设置高一些。

4、方法区的内部结构
在这里插入图片描述
4.1、方法区存储的信息
(1)用于存储被虚拟机加载的类型信息、常量、静态变量、即时编译期编译后的代码(JIT)

4.2、方法区的内部结构
(1)类型信息:每个加载的类型(类class,接口interface,枚举enum、注解)
(2)域信息
(3)方法信息(方法名称啊,返回类型啊,修饰符啊之类的)
(4)静态变量和类关系在一起,随着类的加载而加载,成为类数据在逻辑上的一部分
类变量被所有实例所共享,即使没有类实例,也可以访问它
全局常量(static final)
每个全局常量在编译时就被确定了

4.3、运行时常量池和常量池
(1)方法区内包含运行时常量池,字节码文件内包含常量池
(2)常量池中包含各种字面量和对类型、域和方法的符号引用。

4.4、为什么要有常量池?
一个java源文件编译后会产生一个字节码文件,而java中的字节码文件需要有数据支持,而数据过大无法直接存到字节码中,但是可以存到常量池中,这个字节码中包含了指向常量池的引用,

小结:常量池可以看做是一张表,虚拟机指令通过这张常量表找到要执行的类名,方法名,参数类型,字面量等类型。

4.5、运行时常量池
(1)运行时常量池是方法区的一部分
(2)常量池是Class文件的一部分,用于存放编译后生成的各种字面量和符号引用,这部分内容将在类加载后存放到运行时常量池中
(3)在加载类和接口到虚拟机的时候,就会创建运行时常量池
(4)JVM为每个加载的类型都维护一个常量池,池中的数据项和数组一样,靠索引访问。
(5)运行时常量池包含多种不同的变量,包含编译期已明确的数值字面量,也包括运行期得到的方法或字段引用。此时不再是常量池中的符号引用,换为真实地址。

7.6、方法区的演进
(1)JDK1.8之后,永久代被元空间取代,里面存放类型信息,字段、方法、运行时常量池在本地内存的元空间,而静态变量、字符串常量池在堆空间。

7.7、为什么永久代要被元空间代替
(1)永久代的空间大小设置很难确定,比如在某些场景下,如果动态加载类过多,会发生OOM错误,而元空间直接使用本地内存,默认情况下,元空间大小只受本地内存限制
(2)对永久代调优很困难

7.8、
(1)方法内的局部变量是存放在栈帧的局部变量表当中,非静态的成员变量放在堆中
(2)静态变量在JDK1.7之后放在堆空间当中
(3)只要是new出来的对象,都放在堆空间当中

7.9、
方法区内主要的垃圾回收有:常量池中废弃的常量和不再使用的类型

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号