【问题标题】:What is the exact purpose of calling System.exit() in java在 java 中调用 System.exit() 的确切目的是什么
【发布时间】:2013-08-13 15:18:58
【问题描述】:

我对 system.exit 有点困惑。我从这个link 中创建了一些东西。

但我心里有些疑惑。如果我使用系统退出,创建的对象、变量等会发生什么。一旦我调用system.exit,一切都会被破坏吗?如果“是”,那么为什么我们在 system.exit() 之前强制进行垃圾收集?如果“否”创建的对象在 JVM(内存)中存储多长时间?如果退出系统后再次运行程序,如果调用 System.exit(); 后之前的对象没有销毁,会发生什么?

谢谢。

【问题讨论】:

  • 有什么建议或意见吗?任何热烈欢迎。谢谢
  • “一旦我调用 system.exit,所有东西都会被破坏吗?” - 不完全是(或立即)。 System.exit 启动 JVM 的“正常”终止。该过程的一部分将是清理和释放内存,但到那个阶段,所有的 Java 代码都将被终止......
  • AFAIK System.exit 只是结束当前正在运行的 JVM,因此其中的所有内容都丢失了。为什么说“我们在 system.exit() 之前强制进行垃圾回收”?
  • @AndrewMartin 我对 system.exit 有点困惑。我从这个“链接”中创建了一些东西。仔细看我把那个链接链接到旧帖子。我遵循它,但有些观点令人怀疑。这就是我发这篇文章的原因。

标签: java object garbage-collection jvm systemexit


【解决方案1】:

你应该知道的关于exit的简短回答:

  • 它很有用,因为它是设置exit status 的唯一方法。

  • 通常,您应该使用它的唯一位置是在 main 方法的末尾。

  • 它会导致 JVM 终止(杀死进程,因此必然释放所有内存)。

【讨论】:

    【解决方案2】:

    如果我使用系统退出,创建的对象、变量等会发生什么。一旦我调用 system.exit,一切都会被破坏吗?

    只有用户线程会被系统退出销毁。

    为什么我们在 system.exit() 之前强制进行垃圾回收?

    我们不这样做,它也不会很有用,因为这可能不会做任何事情。

    创建的对象在 JVM(内存)中存储多长时间?

    直到不再需要它们并进行清理,JVM 才真正退出

    如果退出系统后再次运行程序,如果调用 System.exit(); 后之前的对象没有销毁,会发生什么?

    它们在程序结束时被销毁。无论如何,即使运行多次,每个程序都会获得自己的一组新变量。程序之间不共享变量。

    【讨论】:

      【解决方案3】:

      我认为在这种情况下,将 JVM 视为在计算机上运行的程序很有用。 System.exit() 终止该程序。程序中的任何内容都不会被计算机的操作系统或 JVM 运行时保存,尽管该程序当然可以将内容写入长期存储。但是变量、创建的objs等都没有了,无法恢复。

      【讨论】:

        猜你喜欢
        • 2011-04-12
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 2012-09-03
        • 2016-11-24
        • 2015-09-02
        • 1970-01-01
        • 2011-02-21
        相关资源
        最近更新 更多