黑马程序员JVM系列学习——自动垃圾回收(一):方法区的回收

C/C++没有自动垃圾回收机制,一个对象如果不再使用需要手动释放,否则会出现内存泄漏。

内存泄漏:不再使用的对象在系统中未回收,可能导致内存溢出。

Java的自动垃圾回收机制 :GC机制。通过垃圾回收器来对不再使用的对象完成自动的回收,主要负责对堆上内存进行回收。

线程不共享的三部分,程序计数器,Java虚拟机栈以及本地方法栈,都是伴随着线程的创建而创建,线程的销毁而销毁,方法的栈帧会在执行完方法后自动弹出并释放掉对应的内存。不需要垃圾回收器来回收。 

方法区的回收:

类的生命周期:加载,连接(验证,准备,解析),初始化,使用,卸载。

方法区中能回收 的内容主要就是不再使用的类,类的卸载条件较为苛刻:

1.此类所有实例对象都已经被回收,在堆中不存在任何该类的实例对象以及子类对象。(对象名=null可以释放此对象)

2.加载该类的类加载器已经被回收。(类加载器=null)

3.该类对应的java.lang.Class对象没有在任何地方被引用。(class=null)

如果需要手动触发垃圾回收,可以调用System.gc()方法。该方法并不一定会立即回收垃圾,仅仅向Java虚拟机发送一个垃圾回收的请求,具体是否需要执行垃圾回收Java虚拟机会自行判断。

开发中此类场景一般很少出现,因为自定义的类由应用程序加载器进行加载,这个类加载器运行时不会被回收。

主要出现在在OSGi、JSP的热部署应用场景中。

每个jsp文件对应一个唯一的类加载器,当一个jsp文件被修改了,就直接卸载这个jsp类加载器,重新创建类加载器,重新加载jsp文件。

热部署(Hot Deployment)是指在软件运行过程中,无需停止整个应用程序或服务,而是在不中断现有服务的情况下,动态地更新、替换或添加新的代码、配置或资源。这意味着可以在应用程序在运行时进行更新或更改,而无需停止或重新启动整个应用程序。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值