首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JVM与Swift样式ARC中内存的if GC开销

JVM与Swift样式ARC中内存的if GC开销
EN

Stack Overflow用户
提问于 2016-11-05 18:34:09
回答 1查看 447关注 0票数 2

我工作的公司对于JVM开发平台有一种非常不同的观点。

基于本文- http://people.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf

他们说,oracle jvm需要3-5倍的内存开销,即运行1GB的JVM,我们需要3-5 GB的额外RAM来抵消JVM开销,而快捷风格ARC是GC问题的答案。

我提出了一些反驳,认为他们进行研究的不是Oracle/Sun,一些实验性的VM和ARC也有自己的问题,比如循环引用。

对于JVM中的内存GC的开销究竟是多少,我找不到任何研究。

我的问题总结

( 1) GC是否有可见的开销?因为如果事实属实的话,RAM的3-5倍的成本似乎真的不合理。

此外,像Apache、hbase、cassandra这样的大数据应用程序在in /petabyte内存范围内运行。如果GC中存在这样的开销,为什么要在这样的平台上进行开发呢?

2) ARC被认为比其他运行时GC跟踪算法要差。如果这是真的,如果有任何论文直接比较ARC编译时malloc/free vs JVM JVM运行时清除的效果,也会有帮助。

Chris Lattner声称GC在这里消耗3-5倍内存- https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160208/009422.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-05 20:00:07

GC是否有可见的开销。因为如果事实属实的话,RAM的3-5倍的成本似乎真的不合理。

这很可能是个误会。您可以在使用99%堆的情况下运行JVM,但是它将定期使用GC。如果您给应用程序更多的内存,它将能够更有效地工作。向堆中添加更多内存可以提高吞吐量。我已经看到了这项工作高达3倍。除了在极端情况下,您不太可能看到增加更多的好处。

此外,像Apache、hbase、cassandra这样的大数据应用程序在in /petabyte内存范围内运行。如果GC中存在这样的开销,为什么要在这样的平台上进行开发呢?

在处理大数据时,通常使用内存映射文件和堆外内存。这使应用程序管理的大部分数据不是GC。这与用C++编写的数据库的操作方式没有什么不同。

ARC被认为不如其他运行时GC跟踪算法。

我不能评论ARC有多聪明。Java没有对GC的操作方式施加任何限制,但是子文本是这样的;它至少必须处理循环引用。任何更少的事情都被认为是不可接受的。

顺便说一下,Java通过直接ByteBuffers使用malloc/free。

使用数据集(如1GB)的作业

什么使一个数据集1GB。在磁盘上压缩,可能是100 MB。作为原始的未压缩数据,它可能是1GB。在作为数据结构的内存中,它可能是2GB,如果使用另一个1或2GB来处理该数据结构,吞吐量可能会更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40441787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档