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

Java学习笔记-对象与垃圾回收的更多相关文章

  1. jvm学习笔记一(垃圾回收算法)

    一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...

  2. Java学习笔记--对象克隆

    转自:Edward_qing_Lee 的专栏 http://blog.csdn.net/edward_qing_lee/article/details/8249102 一.java 方法参数 理解: ...

  3. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  4. Java学习笔记 04 类和对象

    一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...

  5. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. java学习笔记05--字符串 .

    java学习笔记05--字符串 . 一.String类 由字符所组成的一串文字符号被称之为字符串.在java中字符串不仅仅是字符数组,而且是String类的一个实例,可以使用String类来构建. 字 ...

  8. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  9. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

随机推荐

  1. JQuery实践--Why JQuery

    给页面增加动态功能的工作流模式:选择一个元素或一组元素,然后以某种方式对其进行操作. 利用原始的JavaScript完成这些任务中的任何一个,都会需要数十行代码,JQuery让这些常见的任务变得简单 ...

  2. Eclipse 调试 darknet 代码

    一.准备 1. 安装Java8 我们采用Eclipse Neon版本的IDE,所以需要Java8的运行环境,下面为安装Java8的命令,如下所示: sudo add-apt-repository pp ...

  3. P1169 [ZJOI2007]棋盘制作——悬线法

    ---恢复内容开始--- 给你一个矩阵,选出最大的棋盘,棋盘的要求是黑白相间(01不能相邻),求出最大的正方形和矩形棋盘的面积: 数据n,m<=2000; 这个一看就可能是n2DP,但是写不出. ...

  4. 7.26T3小游戏

    小游戏 题目描述 有一个简单的小游戏.游戏的主人公是一个勇士,他要穿过一片黑森林,去 解救公主.黑森林的地图可以用一张 V 个点.E 条边的无向图来描述,起点是 1 号点,终点是 V 号点.勇士从起点 ...

  5. NSString的创建

    create #progma mark  create NSString void stringCreate(){ //char *s="A String";->c NSSt ...

  6. 第一次Java测试及感触(2018.9.20)

    在本周周四进行了java测试,有一点感触,测试的题目是用Java实现一个ATM机的管理系统.之前老师提前给我们样卷,结果考试的时候换了题型,瞬间脑子空白,一时不知道怎么下手,因为暑假虽然涉猎了java ...

  7. python3安装web.py

    今天准备测试代理池IPProxyPool获取到ip的质量,在安装web.py的时候遇到了些问题,在此记录一下. 1.安装资料 web.py官网:http://webpy.org/ web.py的git ...

  8. Hive 参数

    hive.exec.max.created.files •说明:所有hive运行的map与reduce任务可以产生的文件的和 •默认值:100000  hive.exec.dynamic.partit ...

  9. 重读APUE(7)-link/unlink与mkdir/rmdir

    link–用于创建一个现有文件的链接:实际上是新建一个目录项,指向当前文件的i节点: unlink–用于删除一个现有文件的连接:实际上是对引用i节点的目录项进行删除,并且对链接计数-1:系统会检查文件 ...

  10. NodeJS的exports、module.exports与ES6的export、export default深入详解

    前言 决定开始重新规范的学习一下node编程.但是引入模块我看到用 require的方式,再联想到咱们的ES6各种export .export default. 阿西吧,头都大了.... 头大完了,那 ...