gpt4 book ai didi

java - 测量 Java 方法重构性能

转载 作者:行者123 更新时间:2023-12-02 00:37:01 26 4
gpt4 key购买 nike

我接到了一项奇怪的任务。我必须在庞大的代码库(简单的部分)中重构某些方法并提供性能增益报告。我应该关注执行速度和内存使用情况。他们想知道方法的性能改进!

所以我有一个这样的方法:

public void processHugeFile(File f) {
long start = java.lang.System.currentTimeMillis();

// lots of hashmaps, lots of arrays, weird logic,...

long end = java.lang.System.currentTimeMillis();
logger.log("performance comparison - exec time: " + (end - start));
}

然后我必须重构它:

public void processHugeFile(File f) {
long start = java.lang.System.currentTimeMillis();

// just lists, some primitives, simple logic,...

long end = java.lang.System.currentTimeMillis();
logger.log("performance comparison - exec time: " + (end - start));
}

最后我只需要处理日志即可。

但是内存使用又如何呢?我尝试过 getRuntime().totalMemory() - getRuntime().freeMemory() 和 getHeapMemoryUsage().getUsed() 但它们似乎不起作用。另外,JVM 分析器关注的是对象而不是方法,我指的是相当大的代码库。

有人可以给我一些提示吗?

非常感谢。

最佳答案

从广义上讲,重构不是提高性能的手段,而是提高代码库的可读性和可维护性的手段。 (这可能会帮助您更加自信和轻松地进行优化和架构更改。)我假设您已经意识到这一点,并且您的意思是您正在尝试清理过程中的一些缓慢代码。

这实际上是一个分析器工具,而不是手动工具。通过这种方式您永远无法获得精确的测量结果。例如,System.currentTimeMillis() 调用会增加其自身的开销,并且对于短期方法来说,其花费的时间可能比方法本身更长。 运行时只能帮助您粗略了解内存使用情况。

我不同意分析器没有帮助。例如,JProfiler 会很高兴地绘制随时间变化的堆大小图,包括生成大小。它将按分配站点、对象类型分割内存使用情况。它将通过包含/独占时间向您显示性能瓶颈。而所有这一切都无需触及您的代码。

您真的非常想使用像 JProfiler 这样的分析器,而不是手动编码的东西。

关于java - 测量 Java 方法重构性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com