在Java中,我没有多想就做了以下事情:
public class Main {
public void run() {
// ...
}
public static void main(String[] args) {
new Main().run();
}
}
然而,最近我变得不确定这样做是否安全。毕竟,在创建main
对象之后,没有对该对象的引用(嗯,有this
引用,但这算不算?),因此看起来垃圾回收器可能会在执行某项内容时删除该对象。因此,main
方法应该如下所示:
public static void main(String[] args) {
Main m = new Main();
m.run();
}
如果正在执行对象方法,则表示某人拥有该引用。因此,在执行方法时不能对对象进行GC。
问题内容: 在Java中,我做了很多类似的事情而没有考虑太多: 但是,最近我不确定这样做是否安全。毕竟,在对象创建之后就没有对它的引用了(嗯,有引用,但是这个值吗?),所以看起来存在垃圾回收器可能会在执行过程中删除该对象的危险的东西。因此,该方法应如下所示: 现在,我很确定第一个版本可以使用,并且我从未遇到任何问题,但是我想知道在所有情况下这样做是否安全(不仅在特定的JVM中,而且最好根据语言规范
问题内容: 我有一个Java应用程序正在泄漏内存。我知道在垃圾回收期间哪些对象没有被释放,但是我无法确定引用它们的对象。 JVM内部保存的对象图是否具有某种可见性? 否则就有可能找出哪些对象引用了另一个对象? 问题答案: 在真正的基础上,您可以使用命令jhat和jmap从正在运行的Java进程中读取堆文件,然后对其进行处理- 它在本地端口上启动小型Web服务器。它并不是很容易阅读,但是您不必购买分
问题内容: 首先,我想澄清一下我的理解,因为以下问题是相同的。 上面代码的输出是 这意味着,尽管一旦GC运行,实际的对象对象就会被垃圾回收,但是内存中仍然有一个类对象,该对象此时不指向任何对象。 现在考虑到上述理解为真,我对工作原理感到困惑。在下面的代码中 输出: 现在的 问题 是,据说输入是弱引用,这意味着在上面的代码中, 成为实际对象时可以进行垃圾回收,因为不再有对该对象的强引用,但是 和作为
有人能给我解释一下原因吗?
问题内容: 我要求显式垃圾回收器调用。但是窗口并没有从屏幕上消失,为什么垃圾回收器不回收JFrame的对象? 问题答案: 当被创建时,它注册本身在一些内部摇摆的数据结构,其允许它接收到类似的鼠标点击的事件。这意味着在您告诉Swing使用摆脱窗口之前,存在对潜伏在某处的对象的引用。
主要内容:1 什么是Java 垃圾回收,2 Java 垃圾回收的优势,3 如何取消对象引用,4 finalize()方法,5 gc()方法,6 Java 垃圾回收的例子1 什么是Java 垃圾回收 在Java中,垃圾意味着未引用的对象。 垃圾回收是自动回收运行时未使用的内存的过程。换句话说,这是销毁未使用对象的一种方法。 我们在C语言中使用free() 函数,在C ++中使用delete()。但是,在Java中它是自动执行的。因此,java提供了更好的内存管理。 2 Java 垃圾回收的优势 它