方法区和堆一样,都是线程共享的内存区域,被用于存储已被虚拟机加载的类信息(字段等)、即时编译后的代码(方法字节码)、静态变量和常量等数据。

根据Java虚拟机规范的规定,方法区无法满足内存分配需求时,也会抛出OutOfMemoryError异常,虽然规范规定虚拟机可以不实现垃圾收集,因为和堆的垃圾回收效率相比,方法区的回收效率实在太低,但是此部分内存区域也是可以被回收的。

方法区的垃圾回收主要有两种,分别是对废弃常量的回收(常量池的回收)和对无用类的回收(类的卸载)。

当一个常量对象不再任何地方被引用的时候,则被标记为废弃常量,这个常量可以被回收。


方法区中的类需要同时满足以下三个条件才能被标记为无用的类:

1.Java堆中不存在该类的任何实例对象;

2.加载该类的类加载器已经被回收

3.该类对应的java.lang.Class对象不在任何地方被引用,且无法在任何地方通过反射访问该类的方法。

当满足上述三个条件的类才可以被回收,但是并不是一定会被回收,需要参数进行控制,例如HotSpot虚拟机提供了-Xnoclassgc参数进行控制是否回收。

JVM:方法区可以GC吗?相关推荐

  1. JVM—方法区到底是怎么保存函数方法的?

    原文作者:博_采_众_长 原文地址:JVM --方法区(超详细) 目录 HotSpot中方法区的演进 方法区的内部结构 运行时常量池 vs 常量池 方法区的演进细节 StringTable为什么要调整 ...

  2. JVM方法区内存分配

    方法区内存 -XX:PermSize 设置初始化方法区内存 -XX:MaxPermSize 设置最大方法区,也称永久区的内存 默认情况下,为64M 方法区 一块所有线程共享的内存区域,用于保存系统的类 ...

  3. JVM 方法区 ORACLE官方文档

    https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.4

  4. 什么是 JVM方法区

    https://www.cnblogs.com/lee0527/p/12209789.html

  5. JVM之垃圾回收 II ——方法区和堆区的垃圾回收、STW

    垃圾回收 II 一.方法区(jdk1.7)/元空间(jdk1.8) 1.永久代和元空间的关系: 2.方法区/元空间的垃圾回收内容 3.方法区/元空间垃圾回收的方式 二.堆 1.GC堆的划分 2.堆区G ...

  6. JVM内存管理及GC机制

    转载自:http://blog.csdn.net/suifeng3051/article/details/48292193 一.概述 Java GC(Garbage Collection,垃圾收集,垃 ...

  7. 1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈

    1.Java虚拟机内存管理 1.1.运行时数据区[Runtime Data Area] 1.1.1.线程共享区 1.1.1.1.Java堆[heap] 1.1.1.1.1.新生代.老年代.Eden区域 ...

  8. JVM垃圾回收机制GC详解

    作为 Java 语言最重要的特性之一的自动垃圾回收机制,也是基于 JVM 实现的.那么,自动垃圾回收机制到底是如何实现的呢? 1.GC是干啥的? 进行资源的回收 1.1.对于 C/C++ 而言 对于C ...

  9. java虚拟机结构图解(堆栈方法区)

    目录: java虚拟机汇总 class文件结构分析 1).class文件常量池中的常量项结构 2). 常用的属性表的集合 类加载过程 1).类加载器的原理以及实现 虚拟机结构分析<<== ...

最新文章

  1. (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
  2. java培训:Java的十大算法
  3. RED HAT LINUX 9.0的安装文本模式(2)
  4. 为什么处理有序数组比无序数组快?
  5. php yii没有数据库吗,php – YII活动记录未插入数据库但未给出错误
  6. 软件工程概论 课堂练习 第2次作业3【酒店预订】
  7. linux6 epel yum源,CentOS6下yum源与epel源配置
  8. Django templates 和 urls 拆分
  9. 2017.6.27 跟开涛学spring3--spring概述
  10. python123第七周小测验_python+request+untitest的接口自动化测试
  11. 人脸关键点:DAN-Deep Alignment Network: A convolutional neural network for robust face alignment
  12. Node Sass version 6.0.0 is incompatible with ^4.0.0.
  13. html中怎么给url格式化,如何将文本中的url提取出来格式化,然后将其它的html escape?...
  14. 如何将 UbuntuServer 安全的升级
  15. matlab如何用二分法求函数零点,用二分法求函数的零点及二分法定义
  16. springboot微信公众号管理系统vue内容文章文件上传jsp源码mysql
  17. 写博客的2年,我有12万+粉丝了,还上了百度百科!
  18. 有便宜又好用的云服务器推荐?
  19. 三表左连接(LEFT JOIN) — 两表之间的关系
  20. 【数据结构与算法】专栏系列文章目录

热门文章

  1. DNS入门介绍之三BIND安装配置全过程
  2. 实现将一个字符串转化成对应的整形数字
  3. Android视频播放之VideoView
  4. Which one is faster: Java heap or native memory?
  5. 概率整形 Peobabilistic Shaping PS
  6. simulink中使用memory模块实现变量的累加和(离散积分器)
  7. 双边滤波(bilateral filter)彩色图 matlab实现代码
  8. UNIX环境高级编程》笔记--getrlimit和setrlimit函数
  9. Python-爬取2345电影并写入文件
  10. php是什么症状脾虚什么症状怎么治,脾虚的5个症状是什么呢