Clojure在内存占用方面的表现如何?

jra*_*amb 11 memory-management clojure

至于背景,我正在Clojure中编写一个Web服务(在这种情况下使用Compojure).我并不担心性能,这似乎足够好,我总是可以解决更多的服务器实例.

即使Clojure实现比相应的Java实现慢2-10倍,我也总是喜欢在原始性能之前使用更干净的代码.

当然,这取决于你在做什么,但我想知道你在Java和Clojure的任何类型的长期服务器解决方案的内存占用情况下是否有任何实际经验?

mik*_*era 13

我有一个活跃的基于Compojure的Web服务器运行超过四个月没有一个故障(即没有OutOfMemoryExceptions或类似的......).所以Clojure在长期运行的服务器应用程序中似乎非常强大.

Web服务器在Amazon EC2上运行,大约为.230mb内存占用.

确实,Clojure是相对内存饥渴的 - 除了通常的JVM开销之外,它还会做很多事情,比如在后台生成内存的动态类生成.它还会生成许多临时对象(例如序列对象的构造),并依赖于GC来清除事物.

这实际上是Clojure中的设计决策 - 由于内存很便宜且现代垃圾收集性能很好,Clojure倾向于相当自由地分配内存以最大限度地提高灵活性和性能.

  • 实际上,一代人可以吃掉记忆.对于一个长期运行和/或繁重的过程,我发现了解java内存类型和垃圾收集并了解调整JVM参数是值得的. (2认同)