python和java执行速度最快_我的python程序执行速度比我的java版本相同的程序 是什么赋予了?...

更新日期:2009-05-29

感谢所有的建议和意见。我使用你的建议,使我的生产代码比几天前的最佳结果平均快2.5倍。最后我能够使java代码最快。

教训:

>我的下面的示例代码显示了原始int的插入,但是生产代码实际上是存储字符串(我的坏)。当我更正python执行时间从2.8秒到9.6。所以就在这个蝙蝠身上,java的存储实际上比较快。

>但它并不止于此。我一直在执行java程序如下:

java -Xmx1024m SpeedTest

但是如果您将初始堆大小设置如下,您将获得巨大的改进:

java -Xms1024m -Xmx1024m SpeedTest

这个简单的改变将执行时间减少了50%以上。所以我的SpeedTest的最终结果是python 9.6秒。 Java 6.5秒。

原始问题:

我有以下python代码:

import time

import sys

def main(args):

iterations = 10000000

counts = set()

startTime = time.time();

for i in range(0, iterations):

counts.add(i)

totalTime = time.time() - startTime

print 'total time =',totalTime

print len(counts)

if __name__ == "__main__":

main(sys.argv)

它在我的机器上执行了大约3.3秒,但是我想让它更快,所以我决定用java编程。我认为,因为java被编译,通常被认为比python更快,我会看到一些很大的回报。

这是java代码:

import java.util.*;

class SpeedTest

{

public static void main(String[] args)

{

long startTime;

long totalTime;

int iterations = 10000000;

HashSet counts = new HashSet((2*iterations), 0.75f);

startTime = System.currentTimeMillis();

for(int i=0; i

{

counts.add(i);

}

totalTime = System.currentTimeMillis() - startTime;

System.out.println("TOTAL TIME = "+( totalTime/1000f) );

System.out.println(counts.size());

}

}

所以这个java代码与python代码基本上是一样的。但是它执行在8.3秒而不是3.3。

我从一个现实世界的例子中提取了这个简单的例子来简化事情。关键的因素是我拥有(set或者hashSet),其结果与很多成员非常相似。

这是我的问题:

>我的python实现如何比我的java实现更快?

>有没有比hashSet(java)拥有更好的数据结构来容纳一个唯一的集合?

什么会使python实现更快?

>什么会使java实现更快?

更新:

感谢所有贡献的人迄今为止。请允许我添加一些细节。

我没有包括我的生产代码,因为它是相当复杂的。并会产生很多分心。我上面提到的情况是最简化的。这就意味着java put调用似乎比python set`s add()慢得多。

生产代码的java实现也比python版本慢2.5-3倍 – 就像上面那样。

我不关心vm预热或启动开销。我只想比较从startTime到我的totalTime的代码。请不要关心自己在其他事项。

我初始化了具有足够的桶的哈希集,所以它不应该重新打开。 (我将永远知道这个集合将最终包含多少个元素)。我想可以说我应该将它初始化为迭代/ 0.75。但是,如果你尝试它,你会看到执行时间没有明显的影响。

我为那些好奇的人设置了Xmx1024m(我的机器有4GB的RAM)。

我正在使用java版本:Java(TM)SE运行时环境(build 1.6.0_13-b03)。

在生产版本中,我正在hashSet中存储一个字符串(2-15个字符),所以我不能使用原语,尽管这是一个有趣的例子。

我已经运行代码很多次了。我非常有信心,python代码是Java代码的2.5到3倍之多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值