至于后台,我正在Clojure中编写一个Web服务(在本例中使用Compojure)。 我并不担心性能,这似乎足够好,我总是可以解决更多的服务器实例。
即使Clojure实现比相应的Java实现慢2-10倍,我也总是喜欢在原始性能之前使用更干净的代码。
当然,这取决于你在做什么,但我想知道你在Java和Clojure的任何类型的长期服务器解决方案的内存占用情况下是否有任何实际体验?
至于后台,我正在Clojure中编写一个Web服务(在本例中使用Compojure)。 我并不担心性能,这似乎足够好,我总是可以解决更多的服务器实例。
即使Clojure实现比相应的Java实现慢2-10倍,我也总是喜欢在原始性能之前使用更干净的代码。
当然,这取决于你在做什么,但我想知道你在Java和Clojure的任何类型的长期服务器解决方案的内存占用情况下是否有任何实际体验?
我有一个活跃的基于Compojure的Web服务器运行超过四个月没有一个故障(即没有OutOfMemoryExceptions或类似的......)。所以Clojure在长期运行的服务器应用程序中似乎非常强大。
Web服务器在Amazon EC2上运行,大约为。 230mb内存占用。
确实,Clojure是相对内存饥渴的 - 除了通常的JVM开销之外,它还会做很多事情,例如在后台运行动态类生成会占用内存。它还会生成许多临时对象(例如序列对象的构造),并依赖于GC来清除事物。
这实际上是Clojure中的一个设计决策 - 由于内存很便宜且现代垃圾收集性能很好,Clojure倾向于相当自由地分配内存以最大限度地提高灵活性和性能。
我有一个活跃的基于Compojure的Web服务器运行超过四个月没有一个故障(即没有OutOfMemoryExceptions或类似的......)。所以Clojure在长期运行的服务器应用程序中似乎非常强大。
Web服务器在Amazon EC2上运行,大约为。 230mb内存占用。
确实,Clojure是相对内存饥渴的 - 除了通常的JVM开销之外,它还会做很多事情,例如在后台运行动态类生成会占用内存。它还会生成许多临时对象(例如序列对象的构造),并依赖于GC来清除事物。
这实际上是Clojure中的一个设计决策 - 由于内存很便宜且现代垃圾收集性能很好,Clojure倾向于相当自由地分配内存以最大限度地提高灵活性和性能。
另一个问题是JVM中的一个简单设计缺陷:它使用UTF-16作为其内部字符串编码,因此在以美国为中心的数据集中,所有字符串都占用了应有的内存的两倍。