Java的垃圾回收机制详解
作者:网络转载 发布时间:[ 2012/11/5 13:14:55 ] 推荐标签:
在创建对象时应注意几个关键应用规则:
<1> 避免在循环体中创建对象,即使该对象占用内存空间不大。
<2> 尽量及时使对象符合垃圾回收标准。比如 myObject = null。
<3> 不要采用过深的继承层次。
<4> 访问本地变量优于访问类中的变量。
(2)应用阶段
在对象的引用阶段,对象具备如下特征:
<1> 系统至少维护着对象的一个强引用(Strong Reference);
<2> 所有对该对象的引用全部是强引用(除非我们显示地适用了:软引用(Soft Reference)、弱引用(Weak Reference)或虚引用(Phantom Reference))。
强引用(Strong Reference):是指JVM内存管理器从根引用集合出发遍历堆中所有到达对象的路径。当到达某对象的任意路径都不含有引用对象时,这个对象的引用被称为强引用。
软引用(Soft Reference):软引用的主要特点是有较强的引用功能。只有当内存不够的时候,才回收这类内存,因此内存足够时它们通常不被回收。另外这些引用对象还能保证在Java抛出OutOfMemory异常之前,被设置为null。它可以用于实现一些常用资源的缓存,实现Cache功能,保证大限度地使用内存你而不引起OutOfMemory。
下面是软引用的实现代码:
import java.lang.ref.SoftReference;
...
A a = new A();
...
// 使用a
...
// 使用完了a, 将它设置为soft引用类型,并且释放强引用
SoftReference sr = new SoftReference(a);
a = null;
...
// 下次使用时
if (sr != null) {
a = sr.get();
} else {
// GC由于低内存,已释放a,因此需要重新装载
a = new A();
sr = new SoftReference(a);
}
软引用技术的引进使Java应用可以更好地管理内存,稳定系统,防止系统内存溢出,避免系统崩溃。因此在处理一些占用内存较大且生命周期较长,但使用并不繁地对象时应尽量应用该技术。提高系统稳定性。
弱引用(Weak Reference):弱应用对象与软引用对象的大不同在于:GC在进行垃圾回收时,需要通过算法检查是否回收Soft应用对象,而对于Weak引用,GC总是进行回收。Weak引用对象更容易、更快地被GC回收。Weak引用对象常常用于Map结构中。
import java.lang.ref.WeakReference;
...
A a = new A();
...
// 使用a
...
// 使用完了a, 将它设置为Weak引用类型,并且释放强引用
WeakReference wr = new WeakReference(a);
a = null;
...
// 下次使用时
if (wr != null) {
a = wr.get();
} else {
a = new A();
wr = new WeakReference(a);
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11