// new运算符为对象动态分配内存并返回对它的引用
Person p1 = new Person("John Doe");
// 在使用p1期间进行一些有意义的工作
...
...
...
// p1不再使用
// 使p1有资格进行垃圾回收
p1 = null;
// 调用垃圾收集器
System.gc(); // p1将被垃圾收集
输出将是:
Person对象 - John Doe -> 成功被垃圾收集
// 创建两个Person对象
// new运算符为对象动态分配内存并返回对它的引用
Person p1 = new Person("John Doe");
Person p2 = new Person("Jane Doe");
// 在使用p1和p2期间进行一些有意义的工作
...
...
...
// p1不再使用
// 使p1有资格进行垃圾回收
p1 = p2;
// 现在p1引用p2
// 调用垃圾收集器
System.gc(); // p1将被垃圾收集
输出将是:Person对象 - John Doe -> 成功被垃圾收集
class PersonTest {
static void createMale() {
// 在createMale()完成后 , 方法内的p1对象变得不可达
Person p1 = new Person("John Doe");
createFemale();
// 调用垃圾收集器
System.out.println("在createMale()中调用GC");
System.gc(); // p2将被
垃圾收集
}
static void createFemale() {
// 在createFemale()完成后,方法内的p2对象变得不可达
Person p2 = new Person("Jane Doe");
}
public static void mAIn(String args[]) {
createMale();
// 调用垃圾收集器
System.out.println("在main()中调用GC");
System.gc(); // p1将被垃圾收集
}
}
输出将是:在createMale()中调用GC
Person对象 - Jane Doe -> 成功被垃圾收集
在main()中调用GC
Person对象 - John Doe -> 成功被垃圾收集
情况4:匿名对象当对象的引用ID未分配给变量时,该对象变得不可达,从而可以进行垃圾收集 。// 创建一个Person对象
// new运算符为对象动态分配内存并返回对它的引用
new Person("John Doe");
// 由于没有变量分配,对象无法使用,因此它变得有资格进行垃圾回收
// 调用垃圾收集器
System.gc(); // 对象将被垃圾收集
输出将是:Person对象 - John Doe -> 成功被垃圾收集
编程调用GC尽管一个对象变得有资格进行垃圾收集,但它不会立即被垃圾收集器销毁 , 因为JVM会按照一定的时间间隔运行GC 。然而,使用以下任一方法,我们可以从JVM中编程地请求运行垃圾收集器(但仍然不能保证任何这些方法一定会运行垃圾收集器 。GC完全由JVM决定) 。
•使用
System.gc()
方法•使用Runtime.getRuntime().gc()
方法// 创建两个Person对象
// new运算符为对象动态分配内存并返回对它的引用
Person p1 = new Person("John Doe");
Person p2 = new Person("Jane Doe");
// 在使用p1和p2期间进行一些有意义的工作
...
...
...
// p1和p2不再使用
// 使p1有资格进行垃圾回收
p1 = null;
// 调用垃圾收集器
System.gc(); // p1将被垃圾收集
// 使p2有资格进行垃圾回收
p2 = null;
// 调用垃
圾收集器
Runtime.getRuntime().gc(); // p2将被垃圾收集
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Java 21,虚拟线程、结构化并发和作用域值
- 四个鲜为人知的Python迭代过滤函数
- 五个帮助初学者提高编码技术的简单方法
- AI绘画 | 纯净美丽的白色薄纱少女
- “维护者都快累死了!”Linux 宣布:LTS 版本的维护期,将从 6 年变回 2 年
- 深度学习的关键特征是什么
- 解决梯度消失问题的神经网络结构及其广泛应用
- AI绘画 | 黑发及腰的魅力少女
- 深度网络的退化问题
- 数字人点燃杭州亚运会主火炬!亚运史首个!到底是如何实现的?