Java分析:java.lang.Object.hashCode占用了一半的CPU时间,但从未明确地调用过

Dav*_*d B 5 java benchmarking profiling hashcode hprof

我已经使用了多线程程序的基准测试,-agentlib:hprof=cpu=samples 并且惊讶地发现结果中有以下行:

rank   self  accum   count trace method
   1 52.88% 52.88%    8486 300050 java.lang.Object.hashCode
Run Code Online (Sandbox Code Playgroud)

我从未在程序中显式调用hashCode().这可能是什么原因?我如何理解这次"浪费"的来源以及它是否正常?

谢谢,大卫

Osc*_*Ryz 5

很可能你正在非常密集地使用一个地图,比如HashMap.

HashMap使用它hashCode来分发对象.如果您使用具有此数据结构的许多对象,那么您.equals和您的.hashCode方法的正确实施非常重要.

请参阅:Effective Java Item 8:覆盖equals时始终覆盖hashCode