Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要避免System.exit()?_Java_Blackberry_Java Me - Fatal编程技术网

Java 为什么要避免System.exit()?

Java 为什么要避免System.exit()?,java,blackberry,java-me,Java,Blackberry,Java Me,我在Anthony Rizk的《BlackBerry开发入门》一书中读到,虽然System.exit()方法将退出应用程序,但建议避免这种情况,并在退出时关闭所有屏幕以正确清理应用程序。我的问题是,为什么要避免System.exit()?根据我对BB开发的记忆,System.exit()只是关闭应用程序,而不会破坏您创建的对象,将它们留给垃圾收集器。因此,应用程序将无法有效地从内存中删除。一个接一个地关闭屏幕实际上会释放它们 我可能对细节有点不太了解,但网上有足够的关于最佳实践的信息:)据我所知

我在Anthony Rizk的《BlackBerry开发入门》一书中读到,虽然
System.exit()
方法将退出应用程序,但建议避免这种情况,并在退出时关闭所有屏幕以正确清理应用程序。我的问题是,为什么要避免
System.exit()

根据我对BB开发的记忆,System.exit()只是关闭应用程序,而不会破坏您创建的对象,将它们留给垃圾收集器。因此,应用程序将无法有效地从内存中删除。一个接一个地关闭屏幕实际上会释放它们


我可能对细节有点不太了解,但网上有足够的关于最佳实践的信息:)

据我所知,通过调用System.exit()杀死容器是不正确的。正确的方法是创建某种destroy()方法,该方法允许清理线程并关闭已打开的任何资源


用外行的话来说,System.exit()可能会留下挥之不去的数据/会话信息。

这是因为它可能会短路您自己的有序退出方法,例如刷新缓冲输出流/写入程序、注销会话、删除文件、提交DBMS事务,

这是一个非常有趣的问题

Java SE API和BB Java API的
System.exit()行为有所不同:

  • 在Java SE API中:终止当前运行的Java虚拟机
  • 在BB Java API中:终止当前运行的Java应用程序
另外,请查看Carol Hamer和Andrew Davison在“学习黑莓游戏开发”中对此的描述:

警告:BlackBerry平台不会在单独的虚拟环境中启动您的应用程序 机器,这意味着你必须非常小心清理。遗骸 早期运行(如静态变量和内存中的其他数据)可能会影响应用程序的后续运行。这还意味着存在一个全局名称空间,因此如果两个类具有相同的名称,则可能会出现错误

因此,是的,每个BB设备只有一个JVM。是的,在BB应用程序中,
System.exit()
调用只会停止应用程序,将所有静态数据留在RAM中,除非您进行初步清理

因此,您不应避免使用
System.exit()
-关闭BB应用程序是合法/正确的方法,但只需在调用之前进行清理即可

更新:


哎呀。我创建了一个测试应用程序(使用JDE 4.7.0+Storm 9530 4.7.0模拟器)来测试调用
System.exit()
后静态内容是否真的留在RAM中。结果证明它不会再留在那里了。下次我进入应用程序时,静态变量是null(正如我们在JavaSE中所期望的那样)。因此,我不清楚Carol Hamer和Andrew Davison所说的“早期运行的剩余部分(如静态变量和内存中的其他数据)可能会影响应用程序的后续运行”是什么意思。应用程序将从内存中删除。当进程退出时,所有内存将释放到操作系统。所有系统资源也会释放到操作系统,包括fds、windows、套接字等。。。我上一次使用的操作系统不是这样的是在1994年。当你谈论操作系统时,你是对的,当你谈论JVM时,你是不对的。@favoretti讨论的主题是一个JVM,它已通过
system.exit()
退出。这就是我的评论。您的答案仍然不正确。在BB应用程序
系统中,exit()
不会终止JVM,只会终止应用程序。每个BB设备只有一个JVM。所有应用程序都在唯一的JVM中运行。这也是我的想法。虽然我已经有一段时间没有做BB编程了,EJP也非常自信,但我还是闭嘴了:)把它作为清理后的最后一条指令,这样做是正确的吗?(我通常是这样做的,这样可以避免在堆栈中逐个迭代屏幕)。