java中exit怎么用_关于java:将调用System.exit(0); 从主要运行垃圾收集之外的对象?...

我计划使用由我的main方法调用的对象来退出整个程序。 该对象有一个仅运行System.exit(0).的方法。我的问题是,这样做安全吗? 如果我从另一个对象运行System.exit(0),垃圾回收是否仍会从内存中清除整个程序,还是我有从内存中清除调用类的问题? 我的想法是,或者由于JVM将终止,调用类将被垃圾回收,或者由于对象的堆栈框架位于主堆栈框架之上,所以我可能无法从内存中清除调用类。 这主要是我对Java不够了解的问题...感谢您的帮助!

它会暂停整个jvm,所以我不知道您担心什么? 如果关闭计算机,它会不会清除RAM?

因此,如果我有另一个类,则从该类中创建一个对象,然后调用System.exit(0);。 在那个物体上,那完全可以吗?

它与Java的内部运作无关。 进程退出,操作系统将回收其所有资源(包括内存)。

System.exit()是静态函数,因此在哪里调用它都无所谓。终止Java虚拟机的效果是相同的。 JVM在终止时使用的任何资源都将回馈给OS。

来源:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit(int)

System.exit(any int)将终止应用程序。本机和堆的内存都将释放给操作系统。

这将终止" java"过程。在Linux上,执行

ps -eaf | grep java

查看System.exit调用后的进程,您将看到它已经退出并且没有任何痕迹。这意味着该进程未在运行,并且任何资源:操作系统要求分配给它的内存,CPU。

在GC方面,需要澄清的是,GC还是任何Java应用程序(进程)的组成部分,并且也将随之终止。 System.exit将不提供GC运行或进行任何清理的准备。

如果您想进行清理,则允许使用一个关闭钩子,在这种情况下,System.exit()将调用关闭钩子,以进行清理,例如关闭线程等。

使用System.exit(0)将从堆栈和堆中刷新整个应用程序。在运行程序时使用VisualVM进行确认。我无法理解,但是我有一个应用程序,可以将内存利用率提高到几GB。我已经在其中一个对象中放入了System.exit()语句,并看到所有内存都已释放。

当应用程序终止时,其堆栈和堆不再存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值