在Java中调用System.exit()的确切目的是什么?

8

我对system.exit有一点困惑。我从这个链接上找到了一些答案。

但是我心中仍有疑虑。如果我使用system exit,那么创建的对象、变量等会发生什么?当我调用system.exit时,所有东西都被销毁了吗?如果是"是",那么为什么我们要在system.exit()之前强制进行垃圾收集?如果是"否",那么创建的对象在JVM(内存)中存储多长时间?如果退出系统后再次运行程序,如果以前的对象没有被销毁,会发生什么?

谢谢。


有关编程的内容,请将以下文本从英语翻译成中文。仅返回翻译后的文本:任何建议或意见?欢迎任何帮助。谢谢 - maXfenda
1
可能是重复的问题:https://dev59.com/IHA65IYBdhLWcg3wogIb - Andrew Martin
1
“我调用 system.exit 后,所有东西都会被销毁吗?” - 不完全是这样(或不是立即的)。System.exit 开始了 JVM 的“正常”终止。其中一部分过程将是清理和释放内存,但在此阶段,所有 Java 代码都已终止... - MadProgrammer
据我所知,System.exit只会结束当前正在运行的JVM进程,因此其中的所有内容都将丢失。你为什么要说“我们在System.exit()之前强制进行垃圾回收”? - Averroes
我们在应用程序中调用GC来告诉JVM清理我们正在使用的对象的内存(JVM通常有一个限定的内存配额)。一旦我们调用System.exit,我们就终止了我们的应用程序所在的JVM。然后,JVM使用的内存的内存管理将传递给操作系统。 - Averroes
显示剩余2条评论
3个回答

6

如果我使用系统退出,创建的对象、变量等会发生什么?我调用system.exit后所有东西都被销毁了吗?

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

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

我们不需要这样做,而且这样做可能没有什么用处。

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

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

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

当程序完成时,它们将被销毁。无论如何,即使多次运行相同的程序,每个程序都获得自己新的一组变量。程序之间不存在变量共享。


5

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


5

关于exit,你需要知道的简要答案:

  • 它非常有用,因为这是唯一设置退出状态的方法。

  • 通常情况下,只有在main方法结束时才应使用它。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接