qiu*_*fei 6 java clojure hashmap
我将一个键与哈希映射关联10000000次.这是Java代码和输出:
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
mp.put(1, 1);
}
long end = System.currentTimeMillis();
System.out.println("Elapsed time: " + (end - start) + " msecs");
}
}
$ javac TestMap.java && java -cp . TestMap
Elapsed time: 38 msecs
Run Code Online (Sandbox Code Playgroud)
然后我在REPL中用clojure调用java:
user=> (import java.util.HashMap)
java.util.HashMap
user=> (def mp (HashMap.))
#'user/mp
user=> (time (dotimes [n 10000000] (.put mp 1 1)))
"Elapsed time: 10024.797 msecs"
nil
Run Code Online (Sandbox Code Playgroud)
这两个代码都做同样的事情,但是clojure版本的运行速度非常慢!!
有什么问题?
num*_*_cn 13
添加类型提示更好:
user> (import 'java.util.HashMap)
java.util.HashMap
user> (def mp (HashMap.))
#'user/mp
user> (time (dotimes [n 10000000] (.put mp 1 1)))
"Elapsed time: 13932.248126 msecs"
nil
user> (time (dotimes [n 10000000] (.put ^HashMap mp 1 1)))
"Elapsed time: 117.915992 msecs"
nil
Run Code Online (Sandbox Code Playgroud)
像这样的性能问题的第一步是打开反射警告并删除任何.
(set! *warn-on-reflection* true)
Run Code Online (Sandbox Code Playgroud)
循环和重复也有最低的开销.
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |