我正在对不同的排序算法进行分析。目前我正在分析插入排序和快速排序。作为分析的一部分,我需要测量内存消耗。
我正在使用Visual VM进行性能分析。但是,当我对随机数据集执行插入排序时,假设是70,000,我得到了不同范围的堆内存使用。例如,在第一次运行中,堆内存消耗是75KB,然后在下一轮中下降到35KB。如果我再执行几次,这个值就会随机波动。
这是正常的吗,还是我错过了什么?我已经绘制了数据大小与内存消耗的图表,但由于这种波动,我将无法绘制图表。
java版本"1.8.0_65“
发布于 2017-02-02 05:23:12
这是Java的garbage collector在工作,它按照自己的步调开始工作。也许,最好是在显式调用System.gc()之后测量所使用的内存量,这样就不会记下垃圾信息。
EDIT:应该在执行测试之后调用System.gc(),以显式地请求垃圾收集器开始工作。虽然System.gc()确实只被视为一个请求,并且在数学上不能100%确定它是否会尊重您的请求,但对于您的分析来说,它很可能是安全的,尤其是当您多次运行它的时候。
关于测量内存使用情况,这是相当棘手的,特别是对于低值。请参阅this answer,其中包含一些很好的细节:
发布于 2017-02-02 08:14:22
您可能会发现JMH对于运行基准测试很有用,同时还可以将副作用与JVM虚拟机隔离开来。
通读the code samples以了解如何使用它。
https://stackoverflow.com/questions/41989942
复制相似问题