Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 AppDomain类抽象?_Java_.net_Jakarta Ee_Coldfusion_Appdomain - Fatal编程技术网

Java AppDomain类抽象?

Java AppDomain类抽象?,java,.net,jakarta-ee,coldfusion,appdomain,Java,.net,Jakarta Ee,Coldfusion,Appdomain,我很好奇是否有类似于.Net的AppDomain的Java抽象 特别是,我很好奇,因为我发现对于我们的Coldfusion/J2EE服务器,我们需要每隔几天重新启动一次,因为内存泄漏速度很慢,我们还不能很容易地找到它。这可能会破坏我们长期运行的进程,我们真的很想找到一种方法,当人们超过某个时间段/内存阈值时,慢慢地将他们推到新的JVM上 从我有限的.Net经验来看,我非常确定这是IIS和AppDomains能够通过回收内存压力下的AppDomains来相当无缝地管理的一种情况。请让我知道,如果我

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

特别是,我很好奇,因为我发现对于我们的Coldfusion/J2EE服务器,我们需要每隔几天重新启动一次,因为内存泄漏速度很慢,我们还不能很容易地找到它。这可能会破坏我们长期运行的进程,我们真的很想找到一种方法,当人们超过某个时间段/内存阈值时,慢慢地将他们推到新的JVM上

从我有限的.Net经验来看,我非常确定这是IIS和AppDomains能够通过回收内存压力下的AppDomains来相当无缝地管理的一种情况。请让我知道,如果我对AppDomains的帮助在这种情况下的方式


有什么建议吗?

基于时间或特定标准(如不断增长的内存消耗和内存使用)回收单个JVM是我使用的应用服务器WebSphere的高级版本的一项功能。如果你的应用程序服务器没有这个功能,那么制作一些shell脚本来提供类似的功能应该是可行的

假设:

a) 。来自用户的请求被散布在一组更大的JVM中。 b) 。所有请求都是无状态的,或者存在某种状态复制功能。复制是WebSphere和WebLogic的一种功能,我想其他应用服务器也有这种功能

在这样的环境中,不需要“缓慢”地将人员移动到其他服务器。我们只需要知道,我们可以安全地停止任何一个serve/JVM,并且这些会话将在另一个实例上进行

不幸的是,没有

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

最近,SUN向J2ME引入了一个有限版本的隔离API,重点是在不主动提供“多进程”的环境中提供“多进程”。最近,我们还询问了Sun在标准JVM中实现隔离API的情况,他们的回答是,他们计划在有限的支持下发布JVM。他们计划提供加载/卸载隔离的能力,但不提供它们之间通信的能力

此外,有一个古老的研究成果是构建一个兼容的JVM版本,称为JanosVM(Java1.1),但我怀疑它在今天是否有任何用处


希望这能有所帮助……

我认为伊安尼斯的回答有点误导。简单地说“不,你不能”并不是故事的全部。问题集中在卸载服务器进程中的Java类,以便在不重新启动进程的情况下从JVM进程中删除泄漏的代码。OP要求的不是AppDomain提供的类似进程的内存隔离特性,而是在运行的JVM中卸载类的能力。我说的是流程,因为在后台,AppDomain不是一个流程,而是享受操作系统提供的一流流程的一些隔离方面。提到的隔离JSR指的是这种“类似流程”的隔离。卸载java类加载器,从而卸载类,而无需循环承载JVM的操作系统进程是可能的。这里提到了两种方法:。在Java中实现这一点并不简单,也不优雅,但这是可能的

谢谢你的评论。不幸的是,我的web应用程序当前既不是无状态的,也不可能复制,因为会话不可序列化。也许我最好把里面的东西都序列化。你说得对。谢谢你的回复。