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

最新文章

  1. jQuery邮箱自动补全代码
  2. linux下使用yum安装mysql
  3. Linux中查找最耗性能的JAVA代码
  4. 《PHP扩展开发及内核应用》
  5. Jquery拖拽原理
  6. 【转】rvm安装ruby,gem,rails,之后仍然无法找到rails命令
  7. 对JavaScript对象数组按指定属性和排序方向进行排序
  8. Android数据库专家秘籍(七)经验LitePal查询艺术
  9. C++中vector 容器的基本操作
  10. 用css3过滤做遮罩效果
  11. 《javascript设计模式与开发实践》阅读笔记(14)—— 中介者模式
  12. 记录java/javascript让浮点数显示两位小数的方法
  13. 添加一个非模态对话框在revit中
  14. 前端---JQuery初识
  15. Beta阶段敏捷冲刺一
  16. redis安装命令
  17. .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示
  18. 打开AVD时报”Data partition already in use. Changes will not persist!”
  19. MySQL 联合索引测试
  20. 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章

热门文章

  1. 2018 南京网络预赛Sum - 线性筛
  2. 洛谷P1197 星球大战【并查集】
  3. 2、细节&Class对象
  4. CF46F Hercule Poirot Problem
  5. 005_linuxC++之_指针的引入
  6. Vue Parent Send Ajax Data to Child Component
  7. ADC-DAC
  8. [Luogu] 网络
  9. nodejs基础(管道、流)实现:复制、压缩、加密、解压,解密,写入文件
  10. cdh版hbase构建Phoenix 遇到的坑