【发布时间】:2014-01-12 14:46:46
【问题描述】:
案例:
我用 Java 编写了一个 minimax 算法,然后我将代码移植到 C++ 中,维护相同的类和方法。然后我对 C++ 代码进行 valgrind,直到通过将 delete 函数放入析构函数(如果可能)来修复所有内存泄漏。修复所有漏洞后,我在井字游戏中测试了该算法,然后将该代码以相同的方式移植到 C++ 中。我确信 C++ 版本的性能会更好,但是我很惊讶地看到 C++ 版本在 125 秒内解决了 100 个(不是随机的)游戏实例,而 Java 版本在 30 秒内解决了它们!
然后,我使用 System Monitor 检查了这两个程序的内存使用情况:测试结束时 Java 代码的内存使用量增加了大约 20%,而 C++ 版本的内存仅增加了 5%。
然后,在我看来,很明显这个delete 策略是节省内存但会扼杀时间性能,这不是我想要的,至少在这种情况下是这样。是否有另一种删除策略来更好地设计需要小运行时间但允许高内存使用的软件?
【问题讨论】:
-
优化是一件棘手的事情,¿你确定删除会给你带来这么多麻烦吗?您有什么方法可以分析您的 C++ 执行时间,以便找出在删除调用上花费的时间?
-
是的,我可以尝试测量删除周期所消耗的时间。我会做的,我会更新你。
-
发布您的代码将有助于分析问题。
-
@bancsy 是的,我知道,但代码包含数千行 Java 和 C++。
-
Java 和 C++ 是不同的语言。想象一下,您尝试通过从您的母语保加利亚语逐字直译来说葡萄牙语;结果不会很漂亮,不管一些以葡萄牙语为母语的人有多漂亮。
标签: java c++ memory garbage-collection