zoukankan      html  css  js  c++  java
  • Java学习笔记-对象与垃圾回收

    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语言实现

  • 相关阅读:
    对线性回归算法的评测
    HIVE cdh5.15.1搭建
    解决Shuffle$ShuffleError: error in shuffle in fetcher错误
    启动YARN资源管理器
    linux检测活体ip并邮件提醒
    Hadoop的NameNode进入安全模式
    Java操作Hadoop-HDFS API Maven环境搭建
    Hadoop CDH版本安装和启动(CentOS7)
    基于Redis的Nginx服务器集群session共享
    基于Memcached的Nginx服务器集群session共享
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664842.html
Copyright © 2011-2022 走看看