【问题标题】:How to measure the difference in memory usage between C# and Java?如何衡量 C# 和 Java 之间的内存使用差异?
【发布时间】: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


【解决方案1】:

对于 Windows,有一个名为 VMMap 的工具。这是相当低级的内存分析实用程序。可以将它附加到任何正在运行的进程,因此您可以使用它分析 .NET 应用程序和 Java 应用程序。

这也是新的Konrad Kokosa book 中提出的工具之一。

另一方面,Linux 平台并不是那么简单。

我希望这就是您为此目的所需要的一切。

【讨论】:

  • 谢谢你,这很有帮助。我会用 Java 和 C# 编写简单的程序,在 Mac、Linux 和 Windows 上运行它,我会在上面分享结果。像 VMMap 这样的工具看起来非常有用,但在运行时内部也有一些视图可能会很好,比如 VM/CLR。感谢分享,感激不尽!
  • @ErikPragt 很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2016-05-29
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多