【发布时间】:2018-12-13 12:25:50
【问题描述】:
我想测量 C# 和 Java 应用程序在内存使用方面的差异。我的理论是,由于语言非常相似,因此 C# 和 Java 之间,或者可能是 CLR 和 JVM 之间的内存使用情况非常相似。
但是,我想对此进行测试,并希望发表一篇关于它的文章。在这两种环境之间测试内存的方法是什么,在测量它们时我必须考虑哪些事情? (例如,VM 对内存使用有很大影响吗?我应该使用什么技术来测量内存?我应该写一个没有框架的简单程序,还是包含一个像 Spring 这样的 Web 框架?)
所以,澄清一下:我不是在寻找意见,而是在寻找一种方法和正确的环境来创建一个客观地比较两个平台的测试。
【问题讨论】:
-
我通常同意您关于内存使用或多或少相等的假设。两者都编译成中间语言(字节码/MSIL),然后由运行时执行。两者都使用垃圾收集器。这也是一个大问题:在强制 GC 运行后你想要内存占用吗?考虑到 GC 通常只在绝对必要时运行,这甚至是一个有意义的测量吗?
-
我认为这取决于您要测试什么。包括像 ASP.NET 的 Spring 这样的框架,您实际上将测试框架,而不是语言本身。否则,创建大量类似的对象并可能对它们进行一些计算。实际看到会很有趣
-
你可以阅读这个article
-
嗨@Christopher,谢谢,好问题。我想创建一个简单的应用程序,它只分配几百万个对象,并测量它的内存使用情况。我不确定运行/强制 GC 是否真的有用。我可能会展示清除内存的运行时效率,但我不确定它是否展示了两者之间的效率。
-
@OlegI 我也这么认为。但我正在考虑一个更现实的用例,比如在容器中运行 REST API。也许是一个hello world,或者更多。
标签: java c# memory memory-management