1. 类的成员是基本数据类型,即使没有初始化,Java也会确保它获得一个默认值。
基本类型 | 默认值 |
boolean | false |
char | ‘\u0000’ (null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.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的运行机制进行微调,而不是通过使用这个命令来实现性能的优化.