Java语言 -- static及垃圾回收

1、finalize()

(1)作用:对象占用了某种特殊资源,比如打开了一个文件,使用后资源未被释放,那么可以借助fialnize来处理被疏忽的资源释放工作。

换句话说,finalize的方法是不推荐使用的。我们在使用某种资源后,应正常的释放资源,而不要依靠finalize来处理后续工作。finalize方法不一定会被JVM调用。

(2)工作原理:大致是,垃圾回收器准备处理垃圾时,将首先调用其finalize()方法,在下一次垃圾回收的动作发生时,才会回收对象的内存。

 

2、垃圾回收

(1)执行前提:垃圾回收不一定会发生,只有当内存濒临用完时,垃圾回收工作才会发生。这样安排是出于对JVM性能的考虑,因为,垃圾回收本身会占用很多资源。

(2)作用:

垃圾回收做两件事情:回收空间;将堆中的对象重新紧凑排列。

将堆中的对象进行重排,目的是留下大块的连续的空闲空间,这样可以提高在堆中分配空间的效率。

(3)算法:有多种算法,基本上都很占系统资源。

 

题外话:

JVM有很多附件技术来提升速度,JDK中的Java HotSpot技术,在代码每次被执行时都会做一些优化,所以执行的次数越多,它的速度就越快。

这让我联想起另外一件事:我们在做系统部署时,也可考虑让部署脚本在完成部署后,再自动执行一段对系统所有接口的调用——让脚本调用我们写好的客户端程序,程序里包含对系统所有接口的调用。依稀记得一些用maven的工程是这么做的。那么,总的说来,这样做的好处有两个:

(1)用于测试,看看系统的各个功能是否正常,部署是否成功;

(2)赶在用户使用系统之前,让代码先执行一遍,这样可以加快日后执行的速度,改善用户体验。

 

3、static

(1)作用:让静态数据和静态方法可以被直接使用,而不必创建任何对象,其中,静态数据的所有引用都只指向唯一的一个内存空间,它们共享同一个数据。也就是说,即使静态的数据和方法是在类中定义的,事实上它们与这个类的实例是没有任何关系的。

(2)适用情况:静态数据的适用情况就不必说了,静态方法的适用情况,也许是用于系统的执行入口;或者,“牧羊人的角色——负责看护与其隶属同一类型的实例群”? ......

对于静态方法的调用,一直存在一种疑惑,一直习惯于将某些工具类的方法设置为static,那么将其设置成static和将整个工具类做成单态的,从程序设计上来说,有什么区别呢?

目前考虑到的理由是:若这些方法对于这个工具类来说,并非是高内聚的,也就是说,这些方法相互之间没什么关联,只是找个容器——这个工具类,来定义,那么,就应该是设置成static,因为,它们本来就不该组合成一个对象。

有一种看法认为,静态方法与面向对象的思想是违背的。这样说,似乎有一些道理......

(3)存储:静态数据和静态方法是存储在JVM中的哪一块呢?待查过JVM后才有答案......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值