java 基础知识(基本类型\finalize)

1. 类的成员是基本数据类型,即使没有初始化,Java也会确保它获得一个默认值。

 

 

基本类型默认值
booleanfalse
char‘\u0000’ (null)
byte(byte)0
short(short)0
int0
long0L
float0.0f
double0.0d

 

 

static   静态初始化(变量、静态块)

代码仅执行一次,当你首次生成这个类的一个对象时,或者首次访问属于哪个类的静态成员是。

finalize()方法:

为了释放 new对象以外产生的(本地方法产生的内存)内存,java 允许你在类中定义一个名为finalize()的方法,做一些重要的清除工作。

工作原理:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

 

 

在Java里的对象回收:

Java 里对象并非总是被“垃圾回收”的。

1. 对象可能不被回收

2.垃圾回收并不等于“析构”。

3. 垃圾回收只与内存有关。

 

垃圾回收器存在: 是为了回收程序不再使用的内存。所以对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),它们必须同内存及回收有关。

 

 

 

 

小弟今天碰到一个比较混淆的问题,想请教一下各位从事java行业的前辈:
在java中,finalize()、java.lang.System.gc()、java.lang.Runtime.gc()的在实际工作中的区别是什么啊?分别又是在什么时候调用的?在此先谢过了



finalize() 是对应object的, 当garbage collector (GC) 决定这个object不再被使用,而要进行清理的时候,会调用finalize(), 默认的finalize就相当于C++的destructor. 你可以override finalize()来自己定义清理过程(例如转到其它的thread而不是彻底清理掉)或者增加一些额外的清理(比方说同时手动清理GC会认为要继续被使用但是实际可以被清理掉的object)

System.gc() 和 Runtime.gc() 功能上是完全一样的, 会手动要求安排GC运行(不是强制立刻执行), 唯一的区别就是System.gc()写起来比Runtime.getRuntime().gc()简单点. 其实基本没什么机会用得到这个命令, 因为这个命令只是建议JVM安排GC运行, 还有可能完全被拒绝. GC本身是会周期性的自动运行的,由JVM决定运行的时机,而且现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择,就算真的有性能上的需求,也应该去对GC的运行机制进行微调,而不是通过使用这个命令来实现性能的优化.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值