Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Java JVM与Swift风格ARC中内存的GC开销_Java_Garbage Collection_Jvm - Fatal编程技术网

Java JVM与Swift风格ARC中内存的GC开销

Java JVM与Swift风格ARC中内存的GC开销,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,我所在的公司对JVM开发平台有着非常不同的观点 根据本文- 他们说oracle jvm需要3-5倍的内存过剩,也就是说,要运行1GB jvm,我们需要3-5GB的额外RAM来抵消jvm开销,而swift风格的ARC是解决GC问题的答案 我提出了一些反驳,认为他们进行研究的不是Oracle/Sun JVM,一些实验性VM和ARC也有自己的问题,比如循环引用 有没有研究过JVM内存的GC开销到底是多少/大约是多少,我找不到任何研究 我的问题总结如下 1) GC是否有任何可见的开销。因为如果事实属实,

我所在的公司对JVM开发平台有着非常不同的观点

根据本文-

他们说oracle jvm需要3-5倍的内存过剩,也就是说,要运行1GB jvm,我们需要3-5GB的额外RAM来抵消jvm开销,而swift风格的ARC是解决GC问题的答案

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

有没有研究过JVM内存的GC开销到底是多少/大约是多少,我找不到任何研究

我的问题总结如下

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

此外,Apache spark、hbase、cassandra等大数据应用程序的内存规模为TB/PB。如果GC中有这样的开销,为什么他们要在这样的平台上开发

2) ARC被认为不如其他运行时GC跟踪算法。如果这是真的,那么如果有任何文章直接比较ARC编译时malloc/free与JVM GC运行时清理的效果,也会很有帮助

Chris Lattner声称GC消耗了3-5倍的内存-

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

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

此外,Apache spark、hbase、cassandra等大数据应用程序的内存规模为TB/PB。如果GC中有这样的开销,为什么他们要在这样的平台上开发

在处理大数据时,通常使用内存映射文件和堆外内存。这将使大部分数据由应用程序而不是GC管理。这与C++编写的数据库可能如何操作没有区别。 ARC被认为不如其他运行时GC跟踪算法

我无法评论ARC有多聪明。Java没有对GC应该如何操作设置任何限制,但是子文本是;它必须至少处理循环引用。任何不足之处都被认为是不可接受的

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

具有数据集(如1GB)的作业


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

我认为你在声称“Apache spark、hbase、cassandra以TB/PB运行”时混淆了RAM空间和磁盘空间。spark主要在内存中运行。不,我没有感到困惑,我只是说内存对那些大数据应用来说非常重要。数据应用可以运行在小于1GB的情况下,仍然可以处理1PB的数据。你问的是在一台服务器上使用RAM(JVM中的GC),所以提到PB显然让你觉得这是一个令人困惑的问题。好吧,也许这让人困惑,但我的意思是,与常规web应用程序相比,这些应用程序更占用内存。例如,spark可以完全在内存中执行map reduce作业,因此如果此GC开销为真,则具有1GB等数据集的作业将需要6GB(5GB为5x开销)才能运行,这对我来说并不正常。该论文的论点基于单线程环境。但是数据处理应用程序通常是高度并行的,这对ARC来说是一个缺点,因为它必须使用原子操作来保证线程安全,这可能会非常昂贵。本文也没有涉及参考计数,他们基本上有一章没有考虑智能指针(参考计数的一种形式)。谢谢。我不知道内存映射文件/直接内存访问。今天我学到了一些东西。Chris Lattner声称JVM必须有3-5倍的额外内存才能顺利运行。你对此有何看法?我明白,Swift ARC中也有一些问题,只是想有不同的看法。再次感谢您的输入:)@王励勤:那封邮件上写的是“3-4x”,而不是5倍。然而,这仍然是无稽之谈,因为这意味着在32位JVM上(它只支持略多于1GB的堆),实际使用超过250到300MB的RAM会导致严重的性能问题,但请尝试寻找过去十年中使用这么少内存的应用程序。那时候我是如何启动EclipseIDE的?此外,JVM支持不同的GC算法,使得这种简单的语句变得毫无意义,例如“扫描过程几乎涉及到所有的RAM”声明。显然,他从未听说过“卡片标记”@WangLiqin当你谈论Lattner的声明时,你也应该考虑到Swift主要用于移动设备(iOS),这是ARC与GC相比赢得巨大成功的地方。使用ARC,您只需使用所需的内存,而不是多使用一个字节,释放开销均匀分布,从而实现平稳的操作和用户体验。