首页 技术 正文
技术 2022年11月20日
0 收藏 682 点赞 3,448 浏览 1340 个字

Java存在垃圾回收机制,JVM会去回收垃圾,释放资源,而不是像C++一样有程序员去完成

垃圾回收机制的特点

  • 垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(例如数据库连接、网络IO等资源)
  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行
  • 在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收

对象在内存中的状态

  • 根据引用变量所引用的状态,可分为以下三种:

    • 可达状态
    • 可恢复状态
    • 不可达状态

强制垃圾回收

  • 程序只能控制一个对象何时不再被任何引用变量引用,绝不能控制它何时被回收
  • 强制回收只是通知系统进行垃圾回收,而系统是否回收确不确定,但垃圾回收机制会在收到通知后尽快进行垃圾回收
  • 强制回收有两种方式:
    • 调用System类的gc()静态方法:System.gc()
    • 掉用Runtime对象的gc实例方法:Runtime.getRuntime().gc()

finalize方法

  • 默认的清理对象的资源机制
  • 定义在Object中,其原型为protected void finalize() throws Throwable
  • 在finalize()方法返回后,对象消失,垃圾回收机制开始执行,任何类型的异常都被抛出
  • finalize()方法的4个特点:
    • 永远不要主动调用某个对象的finalize()方法,该方法应交由垃圾回收机制调用
    • finalize()方法何时被调用,是否被调用具有不确定性,不要把finalize()当成一定会执行的方法
    • 当JVM执行可恢复对象的finalize()方法时,可能使该对象或系统中的其他对象重新变成可达状态
    • 当JVM执行finalize()方法时出现异常,垃圾回收机制不会报告异常,程序继续执行

对象的软、弱和虚引用

  • java.lang.ref提供了3个类:SoftReference(软引用)、PhantomReference(虚引用)、WeakReference(弱引用)。以上三个引用都具有get()方法,用于获取被他们所引用的对象

    • 强引用(StrongReference):Java最常见的引用方式。对象被强引用处于可达状态
    • 软引用(SoftReference):对象处于软引用,可能会在内存不够用时被回收
    • 弱引用(WeakReference):垃圾回收机制一运行就会被回收
    • 虚引用(PhantomReference):虚引用完全类似于没有引用,主要用于跟踪对象被垃圾回收的状态,不能单独使用,必须和引用队列联合使用

修饰符的适用范围

  外部类/接口 成员属性 方法 构造器 初始化块 成员内部类 局部成员
public    
protected      
包访问控制符 o o
private      
abstract        
final    
static      
strictfp        
synchronized            
native            
transient            
volatile            
default            

注:strictfp即FP-strict,精确浮点型。native主要用于修饰方法,类似于抽象方法,用C语言实现

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898