maillist上面对 “VM & BEAM Specs : idea for improving, the lists support”的争论很有意思,我也随手测一把看看
JDK 1.5.0_11
Erlang/OTP R11B-5
$ javac ListAppend.java
$ /home/jdk/bin/java -server ListAppend
Total time:3439ms
$ erlc list_append.erl
$ erl -noshell -noinput -s list_append main -s init stop
Total time:4408ms
$ erlc +native list_append.erl
$ erl -noshell -noinput -s list_append main -s init stop
Total time:3855ms
Java代码:
[code]import java.util.*;
public class ListAppend {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
LinkedList list = new LinkedList();
for (int i=0; i<10000000; i++) {
list.add("element");
}
System.out.println("Total time:" + (System.currentTimeMillis()-begin) + "ms");
}
}[/code]
这里list里面的引用都是指向同一份String实例的。
Erlang代码:
[code]-module(list_append).
-export([main/0]).
main() ->
test(10000000, []).
test(0, _List) ->
{_, Duration} = statistics(wall_clock),
io:format("Total time:~pms~n", [Duration]);
test(N, List) ->
test(N-1, [element|List]).[/code]
这里使用element而不是"Element",因为Erlang的列表里面保存的是值。
JDK 1.5.0_11
Erlang/OTP R11B-5
$ javac ListAppend.java
$ /home/jdk/bin/java -server ListAppend
Total time:3439ms
$ erlc list_append.erl
$ erl -noshell -noinput -s list_append main -s init stop
Total time:4408ms
$ erlc +native list_append.erl
$ erl -noshell -noinput -s list_append main -s init stop
Total time:3855ms
Java代码:
[code]import java.util.*;
public class ListAppend {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
LinkedList list = new LinkedList();
for (int i=0; i<10000000; i++) {
list.add("element");
}
System.out.println("Total time:" + (System.currentTimeMillis()-begin) + "ms");
}
}[/code]
这里list里面的引用都是指向同一份String实例的。
Erlang代码:
[code]-module(list_append).
-export([main/0]).
main() ->
test(10000000, []).
test(0, _List) ->
{_, Duration} = statistics(wall_clock),
io:format("Total time:~pms~n", [Duration]);
test(N, List) ->
test(N-1, [element|List]).[/code]
这里使用element而不是"Element",因为Erlang的列表里面保存的是值。