当前位置: 首页 > 网络应用技术

一篇文章带您了解经典的Java垃圾回收机制

时间:2023-03-07 16:37:42 网络应用技术

  摘要:垃圾回收机制是监护线程的最佳例子,因为它始终在后台运行。

  在C/C ++中,程序员负责对对象的创建和破坏。通常,程序员忽略了无用对象的破坏。在某些情况下,为了创建新对象,可能没有足够内存可用性。整个程序将结束异常,从而导致超ememoryerrs。

  但是在Java中,程序员不需要关心不再使用的所有对象。垃圾回收机制会自动破坏。

  垃圾恢复机制是监护线的最佳例子,因为它始终在后台运行。

  垃圾回收机制的主要目标是通过破坏无法访问的对象来释放桩内存。

  1.无法访问的对象:如果对象不包含对其的任何引用,则称为不可能的对象。请注意,隔离岛的对象无法访问。

  2.垃圾回收的资格:如果无法访问对象,则说该对象有资格获得GC(垃圾回收)。在上图,i = null之后;堆区域中的整数物体4有资格进行垃圾回收。

  即使程序员不负责销毁无用的对象,如果不再需要该对象,也强烈建议使对象不可用(因此有资格执行GC)。

  通常有四种不同的方法可以使物体适合垃圾回收。

  1.取消参考变量

  2.重新分配参考变量

  3.方法内创建的对象

  4.隔离岛

  以上所有示例的方法都在单独的文章中讨论:如何使对象满足垃圾收集条件

  一旦我们遇到了垃圾收集物的物体,垃圾收集器就不会立即销毁它。当JVM运行垃圾收集器程序时,它只会摧毁对象。但是当JVM运行垃圾收集器时,我们无法预测。

  我们还可以要求JVM运行垃圾收集器。有两种方法:

  1.使用System.gc()方法:系统类包含静态方法GC()请求JVM运行垃圾收集器。

  2.使用runtime.getRuntime()。GC()方法:运行类以允许应用程序在运行应用程序中与JVM交互。因此,通过使用其GC()方法,我们可以要求JVM运行垃圾收集器。

  输出:

  笔记:

  固定手稿:

  根据我们的要求,我们可以介绍执行清理活动的finalize()方法,例如关闭数据库连接。

  笔记:

  1.垃圾收集器而不是称为JVM的finalize()方法,尽管垃圾收集器是JVM的模块之一。

  2.对象finalize()方法在可用时可用,因此建议覆盖最终确定方法来处理系统资源或执行其他清洁。

  3.对于任何给定的对象,finalize()方法将永远不会被多次调用。

  4.如果finalize()方法抛出了不令人满意的异常,请忽略异常并终止对象的末端。

  有关finalize()方法的示例,请参见Java程序输出的第十组垃圾集合

  让我们给我们一个真实的例子,我们使用垃圾收集器的概念。

  假设您要参加Byte Beating实习,他们告诉您编写一个程序,以计算公司在公司工作的员工人数(不包括实习生)。要制定此程序,您必须使用垃圾收集器的概念。

  这是您在公司中获得的实际任务:

  问题:编写一个程序来创建一个名为“员工”的类,该类别具有以下数据成员1。用于存储分配给每个员工的唯一ID的ID。2。员工名称3。员工年龄。

  此外,提供以下方法 -

  1.用于初始化名称和age.ID的参数化构造函数应在此处初始化构造函数。

  2.显示ID,名称和年龄方法显示()。

  3.显示下一个员工ID的方法,应该nextid()。

  不了解垃圾回收机制的初学者可能会这样写代码:

  立即获取正确的输出:现在,垃圾收集器(GC)将看到两个空对象。现在,NextID降低了,GC(垃圾收集器)只会在我们的程序员介绍我们的课堂上时才调用方法finalize()。如前所述,我们必须要求GC(GarbageCollector)。为此,我们必须写下以下三个步骤,然后才能关闭孩子的括号。

  1.将引用引用到null(ie x = y = null;)

  2.致电,systemm.gc();

  3.呼叫,system.runfinalization();

  现在,员工人数的正确代码(不包括实习生)

  本文分享了华为云社区的诚意,作者:Hai Biao。