我对system.exit有一点困惑。我从这个链接上找到了一些答案。
但是我心中仍有疑虑。如果我使用system exit,那么创建的对象、变量等会发生什么?当我调用system.exit时,所有东西都被销毁了吗?如果是"是",那么为什么我们要在system.exit()之前强制进行垃圾收集?如果是"否",那么创建的对象在JVM(内存)中存储多长时间?如果退出系统后再次运行程序,如果以前的对象没有被销毁,会发生什么?
谢谢。
我对system.exit有一点困惑。我从这个链接上找到了一些答案。
但是我心中仍有疑虑。如果我使用system exit,那么创建的对象、变量等会发生什么?当我调用system.exit时,所有东西都被销毁了吗?如果是"是",那么为什么我们要在system.exit()之前强制进行垃圾收集?如果是"否",那么创建的对象在JVM(内存)中存储多长时间?如果退出系统后再次运行程序,如果以前的对象没有被销毁,会发生什么?
谢谢。
如果我使用系统退出,创建的对象、变量等会发生什么?我调用system.exit后所有东西都被销毁了吗?
只有用户线程会在系统退出时被销毁。
为什么我们要在system.exit()之前强制进行垃圾回收?
我们不需要这样做,而且这样做可能没有什么用处。
创建的对象存储在JVM(内存)中的时间有多长?
直到它们不再需要,并进行清理,或者JVM真正退出。
如果从系统退出后再次运行程序,如果我没有调用System.exit(),那么以前的对象会发生什么?
当程序完成时,它们将被销毁。无论如何,即使多次运行相同的程序,每个程序都获得自己新的一组变量。程序之间不存在变量共享。
在这种情况下,我认为将JVM视为在计算机上运行的程序是有用的。System.exit()终止该程序。计算机的操作系统或JVM运行时不会保留程序中的任何内容,当然,程序可以将东西写入长期存储。但是变量、创建的对象等都已经消失,无法恢复。
关于exit
,你需要知道的简要答案:
它非常有用,因为这是唯一设置退出状态的方法。
通常情况下,只有在main
方法结束时才应使用它。
它导致JVM终止(杀死进程,从而必然释放所有内存)。
System.exit
开始了 JVM 的“正常”终止。其中一部分过程将是清理和释放内存,但在此阶段,所有 Java 代码都已终止... - MadProgrammer