Java学习笔记(疯狂Java讲义第三版)——对象与垃圾回收

我们是如何使用对象的?

当程序创建对象、数组等引用类型实体时,例如A a = new A();这类语句的时候,系统都会在内存中为之分配一块内存,对象本身就保留在这块内存中。注意,我们是无法直接访问这块内存的,也就是说我们是无法直接访问对象的,我们只能通过对象的引用来间接的访问对象本身。例如:A a = new A();我们只能通过a变量来间接的使用new A()这个对象。那么对于一个没有引用的变量我们也就无法访问到它,例如 new A();这个对象我们只能将它创建出来,但是由于无法访问到所以也就没办法使用了。

总结一下,对象是存在内存中一块名为“堆”的内存区域中的。无法直接访问堆内存中的任何东西也就无法访问对象,只能通过引用变量来间接的访问了。

什么是Java中的“垃圾”?

对于没有引用的对象来说,我们无法访问到他,同时它本身永远在堆内存中占有一块空间。那么这块空间就变成了“垃圾空间了”
Java的垃圾回收机制就是用来清空这类空间的。这是Java的一大特色。对于C语言来说,就没有垃圾回收机制,无法自动的回收垃圾空间,只能靠程序员进行判断,这给编程会带来很大的困难。而Java有了垃圾回收机制之后就变得十分的简单了。

垃圾回收机制特征

1、垃圾回收机制只负责回收堆内存中的对象。
2、程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。
个人理解,这句话的要重点理解:“无法精确控制”和“合适的时候进行”。也就是垃圾回收机制的运行有一套自己的运行模式,程序员是无法随意控制的。但是程序员可以用适当的方式来提醒垃圾回收机制某些堆内存中的对象已经成为了垃圾,提醒垃圾回收机制对其进行及时的回收。垃圾回收机制就会在它人为合适的时候进行相应的回收操作。

3、在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消行动。
个人理解:这段话的含义是在垃圾回收机制决定回收一个对象时,还会对他进行下检查,看看是否真的不再需要被引用变量引用。需要的可能会让其重新获得引用,进而复活,取消垃圾回收。

对象在内存中的状态(书中原文)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值