我们目前正在使用JRuby运行Resque并且存在内存泄漏问题。 Resque和Ruby / REE的一个好处是它使用了fork语义,它将内存泄漏隔离到每个作业而不是每个VM(每个作业的fork)。
看起来似乎没有分支有意义的JVM的选项,但是想知道是否有一些事情可以将内存隔离到线程,因此在线程中的停止事件时,该线程创建的所有内存都将被销毁,无论如何还没有提到它。
答案 0 :(得分:3)
线程肯定不是进程。如果您正在使用线程,那么您将与剩余的进程共享一个公共内存池,因此实际上没有任何“由该线程创建的内存”的概念。可以实现一个VM,使得线程获得自己的内存空间,但在JRuby的情况下,它将首先破坏拥有本机线程的许多好处。
我的建议是与JRuby团队(例如我)合作,弄清楚什么是泄漏,我们会解决它。 MRI方法是一种丑陋的创可贴,只会让人们对代码中的内存和资源管理感到懒惰。