Java AppDomain喜欢抽象吗?

Bob*_*ght 11 .net java coldfusion appdomain java-ee

我很好奇是否有任何类似于.Net的AppDomain的Java抽象.

特别是,我很好奇,因为我发现使用我们的Coldfusion/J2EE服务器,我们需要每隔几天重新启动它,因为我们还没有能够轻松跟踪内存泄漏.这可能会破坏我们长期运行的流程,而且我们真的想要一种慢慢地将人们推向新JVM的方法,因为他们已经超过了某个时间段/内存阈值.

从我有限的.Net经验来看,我非常肯定这是IIS和AppDomains能够通过回收内存压力下的AppDomain无缝管理的一种情况.如果我在这个场景中帮助AppDomains,请告诉我.

有什么建议?

Tod*_*out 11

我认为这里接受的答案有点误导.简单地说"不,你不能"不是整个故事.问题集中在卸载服务器进程中的Java类,以便在没有进程重启的情况下从JVM进程中删除泄漏代码.OP不要求AppDomain提供类似进程的内存隔离功能,而是要求在正在运行的JVM中卸载类.我说类似于流程,因为在引擎盖下,AppDomain不是一个进程,而是享受操作系统提供的一流进程的一些隔离方面.提到的隔离JSR指的是这种"类似进程"的隔离.可以卸载java ClassLoaders和类,而无需循环托管JVM的OS进程.这里提到了几种方法:SO 148681.在Java中执行此操作并非易事或优雅,但它是可能的.


Yia*_*nis 8

很不幸的是,不行.

Java世界中类似的概念是Isolate,它首先出现在JSR 121中.这是一个未来JVM功能的API,它允许在同一JVM中运行的不同应用程序之间进行安全分离和通信.JSR出版后(2004年左右),Sun的一个研究团队在巴塞罗那项目中工作.该项目试图在Sun的HotSpot 1.5 VM中实现Isolation API.两年后,他们发布了SPARC/Solaris的原型.由于稳定性问题,Windows/Linux版本从未发布.

最近,SUN向J2ME推出了限量版Isolation API,重点是在没有主动提供它们的环境中提供"多个进程".最近,我们还询问了Sun在为标准JVM实现Isolate API方面的状态,他们的回应是他们计划发布一个支持有限的JVM.他们计划提供加载/卸载隔离的功能,但无法在它们之间进行通信.

此外,还有一个古老的研究efford来构建一个名为JanosVM(java 1.1)的与Isolates兼容的JVM版本,但我怀疑它今天有什么用处.

希望这可以帮助...