在我工作的地方,当用户注销我们的应用程序(一个applet)时,他们使用AppletContext.showDocument(URL)
方法,提供所需的注销JSP。但他们也有代码说,如果由于某种原因他们无法让AppletContext
只是调用Applet.destroy()
方法。
我们正在使用瘦客户端架构,这意味着我们基本上有一堆连接到服务器的哑终端。我之所以提到这一点是因为我们经常会有几十个(如果不是100个)JVM实例运行 - 每个applet一个。
在destroy()
方法中,他们会处置他们获取的所有资源,然后获得对Runtime
的引用并致电runFinalization()
和gc()
- 但它不会执行{ {1}}或同等的。
System.exit()
末尾添加对System.exit()
的调用,它会对瘦客户端服务器上运行的其他JVM做些什么?答案 0 :(得分:0)
对于上下文,这是必要的,因为当页面处于活动状态时,浏览器(或Java插件或两者)会挂起到您的applet实例。即使您从DOM中删除它或尝试其他技巧来释放该内存,直到您导航到另一个页面,您的applet实例将被保留,因此您需要在destroy()中完全清理。我已经完成了内存分析,显示它在某处的本机代码中被引用。
回答你的问题:
System.exit()
。如果它被允许,在现代浏览器上它会杀死该浏览器的JVM实例,而不是其他浏览器。在过去,它可能会关闭整个浏览器:)编辑:
实际上,答案1的故事还有更多......除了OS X之外,其他地方都是如此,其中下一代插件在6u27左右不是默认值(在10.6上,它是用于OS X更新5的Java,以及从第1天起10.7。