至于背景知识,我正在用Clojure编写web服务(本例中使用Compojure )。我不担心性能,这似乎已经足够好了,我总是可以启动更多的upp服务器实例。
即使Clojure实现比相应的Java实现慢2-10倍,我也总是希望在原始性能之前有一个更干净的代码。
当然,这取决于您在做什么,但我想知道当涉及到Java与Clojure中任何类型的长期运行的服务器解决方案的内存占用时,您是否有任何实际经验?
发布于 2010-10-30 20:38:10
我已经有一个基于active Compojure的web服务器运行了四个多月,没有任何故障(也就是没有OutOfMemoryExceptions或者类似的东西...)。因此,Clojure在长时间运行的服务器应用程序中似乎相当健壮。
web服务器在亚马逊EC2上运行,运行时间约为。230mb内存占用。
的确,Clojure相对需要内存-除了通常的JVM开销之外,它还会做很多事情,比如在后台动态生成类,这会占用内存。它还会生成许多临时对象(例如,序列对象的构造),并依赖GC来清理。
这实际上是Clojure的一个设计决策--由于内存很便宜,而且现代垃圾收集性能非常好,Clojure倾向于相当自由地分配内存,以便最大限度地提高灵活性和性能。
发布于 2010-10-31 22:14:47
另一个问题是JVM中的一个简单的设计缺陷:它使用UTF-16作为其内部字符串编码,因此在以美国为中心的数据集中,所有字符串占用的内存是应有的两倍。
https://stackoverflow.com/questions/4058430
复制相似问题