Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Clojure在内存占用方面的表现如何?_Clojure_Memory Management - Fatal编程技术网

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

Clojure在内存占用方面的表现如何?,clojure,memory-management,Clojure,Memory Management,作为背景,我正在Clojure中编写一个web服务(在本例中使用Compojure I)。 我并不担心性能,这似乎已经足够好了,而且我总是可以启动更多服务器实例 即使Clojure实现的速度比相应的Java实现慢2-10倍,我还是希望在原始性能之前使用更干净的代码 当然,这取决于您正在做什么,但我想知道,在Java和Clojure中任何类型的长时间运行的服务器解决方案的内存占用方面,您是否有过真实的体验?我已经有一台基于Compojure的主动web服务器运行了四个多月,没有任何故障(也就是说,

作为背景,我正在Clojure中编写一个web服务(在本例中使用Compojure I)。 我并不担心性能,这似乎已经足够好了,而且我总是可以启动更多服务器实例

即使Clojure实现的速度比相应的Java实现慢2-10倍,我还是希望在原始性能之前使用更干净的代码


当然,这取决于您正在做什么,但我想知道,在Java和Clojure中任何类型的长时间运行的服务器解决方案的内存占用方面,您是否有过真实的体验?

我已经有一台基于Compojure的主动web服务器运行了四个多月,没有任何故障(也就是说,没有OutOfMemoryException或类似的东西……)因此Clojure在长时间运行的服务器应用程序中看起来相当健壮

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

Clojure确实相对内存不足——除了通常的JVM开销之外,它还做了很多事情,比如在后台生成动态类,这会消耗内存。它还生成很多临时对象(例如构建序列对象),并依赖GC来清理


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

另一个问题是JVM中的一个简单设计缺陷:它使用UTF-16作为其内部字符串编码,因此在美国ce中也是如此ntric数据集所有字符串占用的内存都是它们应该占用的两倍。

事实上,类生成可能会消耗内存。对于长时间运行和/或繁重的进程,我发现学习一些java内存类型和垃圾收集,并学习调整JVM参数是值得的。如果UTF-16字符导致您现在内存不足,则正确如今,您显然遇到了相当大的设计问题:-)JDK 9+和“紧凑字符串”优化不再如此: