JVM知识--方法区

栈、堆、方法区交互关系

在这里插入图片描述

什么是方法区

尽管所有的方法区在逻辑上属于堆的一部分,但是一些简单的实现可能不会进行垃圾回收和压缩
各个线程共享区域
方法区在JVM启动时创建,并且它的实际的物理内存空间和java堆区一样都可以是不连续的
方法区的大小和堆空间一样,可以选择固定大小或者可扩性
方法区的大小决定了系统可以保存多少类,如果系统定义太多类导致方法区溢出 会抛出OOM

方法区大小的设置与OOM

1.7
-XX:PermSize 永久代初始分配空间
-XX:MaxPermSize 永久代最大可分配空间
1.8
-XX:MetaspaceSize 元空间初始分配大小 默认21M
-XX:MaxMetaspaceSize 元空间最大可分配空间

方法区的内部结构

一类型信息
对每个加载的类型,class、interface、enum、annotationJVM必须存储一下信息
1.这个类型的完整有效名称
2.这个类型的直接父类的完整有效名称
3.这个类型的修饰符
4.这个类型的直接接口的有序列表
域【Field】信息
1.域名称、声明顺序
2.域类型
3.域修饰符
方法method信息
1.方法名称
2.返回类型
3.方法参数的数量和类型 按顺序
4.方法的修饰符
5.方法的字节码、操作数栈、局部变量表以及大小 abstract和native方法除外
4.异常表
二常量 final 修饰的变量值在编译期间值就已经确定
三静态变量
四即时编译器编译后的代码缓存
五运行时常量池
字节码文件中的常量池constant Pool会在运行时加载到方法区成为运行时常量池
各种字面量和对类型、域方法的符号引用
数量值、字符串值、类引用、方法引用
具有动态性 String.intern
运行时常量池在1.7放在方法区中
1.8放在堆中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM垃圾回收是Java虚拟机的一个重要功能,它的知识体系包括以下内容: 1. 垃圾回收算法:垃圾回收算法是指垃圾回收器采用的垃圾回收策略。常见的垃圾回收算法包括标记-清除、复制、标记-压缩和分代等。 2. 垃圾回收器:垃圾回收器是JVM的一个组成部分,它负责执行垃圾回收算法,并回收Java对象的内存空间。常见的垃圾回收器包括Serial、Parallel、CMS、G1等。 3. 对象存活判定:垃圾回收器需要判断哪些Java对象是可以回收的,哪些是必须保留的。存活对象可以通过引用计数、可达性分析等方式判断。 4. 垃圾回收的过程:垃圾回收的过程包括标记、清除、整理等阶段。标记阶段是找到存活对象的过程,清除阶段是回收无用对象的过程,整理阶段是将存活对象移动到一块连续的内存域中。 5. 垃圾回收的性能优化:垃圾回收的性能优化包括分代、增量、并发、预处理等技术。分代是指将Java对象分为年轻代和老年代,以便针对不同的对象有针对性地进行垃圾回收。 6. 垃圾回收的调优和监控:垃圾回收的调优和监控可以通过调整堆大小、设置垃圾回收器类型、调整垃圾回收的参数等方式实现。 JVM垃圾回收是Java虚拟机的一个重要功能,掌握其知识体系可以帮助程序员更好地理解Java程序的内存模型和垃圾回收机制,从而编写出高效、可靠的Java程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值