返回信息流为什么下面第一个程序的速度和后面两个相差这么多,但瓶颈似乎并不在动态的泛型容器上。
package cn.byr.nuanyangyang.container;
public class SimpleArray {
public static void main(String[] args) {
final int sz = 10000000;
final int rep = 5;
int lst[] = new int[sz];
for (int i = 0; i < sz; i++) {
lst[i]=i;
}
long start = System.currentTimeMillis();
for (int j = 0; j < rep; j++) {
for (int i = 0; i < sz; i++) {
lst[i]=i;
}
}
long stop = System.currentTimeMillis();
System.out.println(stop - start); // 48
}
}
package cn.byr.nuanyangyang.container;
public class BoxedArray {
public static void main(String[] args) {
final int sz = 10000000;
final int rep = 5;
Integer lst[] = new Integer[sz];
for (int i = 0; i < sz; i++) {
lst[i]=i;
}
long start = System.currentTimeMillis();
for (int j = 0; j < rep; j++) {
for (int i = 0; i < sz; i++) {
lst[i]=i;
}
}
long stop = System.currentTimeMillis();
System.out.println(stop - start); // 6438
}
}
package cn.byr.nuanyangyang.container;
import java.util.ArrayList;
import java.util.List;
public class GenericContainer {
public static void main(String[] args) {
final int sz = 10000000;
final int rep = 5;
List<Integer> lst = new ArrayList<Integer>(sz);
for (int i = 0; i < sz; i++) {
lst.add(i);
}
long start = System.currentTimeMillis();
for (int j = 0; j < rep; j++) {
for (int i = 0; i < sz; i++) {
lst.set(i, i);
}
}
long stop = System.currentTimeMillis();
System.out.println(stop - start); // 6518
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #26936同步于 2013/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[黑Java系列]Java也惊喜:数组
nuanyangyang
2013/9/19镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
另外,下面这个Python程序,为什么用PyPy比Java还快?Python不是每个整数都是对象,就像Integer一样的吗?
换了一台机器,数据如下:
SimpleArray: 42 (0.042秒)
BoxedArray: 11213 (11.213秒)
PyPy: 0:00:00.305129
#!/usr/bin/env pypy
import datetime
sz = 10000000
rep = 5
lst = range(sz)
time1 = datetime.datetime.now()
for j in xrange(rep):
for i in xrange(sz):
lst[i] = i
time2 = datetime.datetime.now()
print time2-time1
【 在 nuanyangyang 的大作中提到: 】
: 为什么下面第一个程序的速度和后面两个相差这么多,但瓶颈似乎并不在动态的泛型容器上。
: [code=java]
: package cn.byr.nuanyangyang.container;
: ...................
【 在 nuanyangyang 的大作中提到: 】
: 另外,下面这个Python程序,为什么用PyPy比Java还快?Python不是每个整数都是对象,就像Integer一样的吗?
: 换了一台机器,数据如下:
: SimpleArray: 42 (0.042秒)
: ...................
猜是因为被缓存的整数对象比java范围大,或者有什么特殊的整数对象的缓存机制,,,所以解释器基本没有malloc?
【 在 bixiaopeng 的大作中提到: 】
: 猜是因为被缓存的整数对象比java范围大,或者有什么特殊的整数对象的缓存机制,,,所以解释器基本没有malloc?
继续猜。找找论文也行。
【 在 nuanyangyang 的大作中提到: 】
:
: 继续猜。找找论文也行。
因为不懂python啊,,我先请问下,pypy是某种python解释器的实现么?和我系统里面那个不一样的解释器。如果是这样,那快是因为pypy吗?。。。不然我也不知道该搜python的性质还是pypy在这样的场景做优化了。。。
【 在 bixiaopeng 的大作中提到: 】
: 因为不懂python啊,,我先请问下,pypy是某种python解释器的实现么?
是的。Python是一个语言,而它的解释器有多个。最流行的是官方的解释器,俗称“CPython”因为是用C语言写的。PyPy是另一个Python解释器,本身也是用Python语言写的。
: 和我系统里面那个不一样的解释器。如果是这样,那快是因为pypy吗?
是的。PyPy对Python做了深层的优化。一个关键词是“Specialisation”,还有“Tracing Just-in-time Compiling”。这种优化对于动态语言很有用。
: 。。。不然我也不知道该搜python的性质还是pypy在这样的场景做优化了。。。
如果感兴趣的话,就看看Python语言是什么吧。顺便去pypy.org转转。