Python中文
首页
教程
问答
标签
搜索
登录
注册
我的python程序比java版本的同一程序执行得更快。什么给予?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p><strong>更新:2009-05-29</strong></p> <p>谢谢你的建议和建议。<strong>我使用了您的建议,使我的生产代码比几天前的最佳结果平均快2.5倍。</strong>最后,我能够使java代码最快。在</p> <p>经验教训:</p> <ul> <li><p>下面我的示例代码显示了原始int的插入,但生产代码实际上存储的是字符串(我的错)。当我更正python的执行时间从2.8秒变为9.6秒时。所以一开始,java在存储对象时实际上速度更快。</p></li> <li><p>但这还不止于此。我一直在执行以下java程序:</p> <p>java-Xmx1024m速度测试</p></li> </ul> <p>但是,如果将初始堆大小设置为如下所示,则会获得巨大的改进:</p> <pre><code>java -Xms1024m -Xmx1024m SpeedTest </code></pre> <p>这个简单的更改将执行时间减少了50%以上。我的python speed6.seconds是最后的测试结果。Java 6.5秒。在</p> <p><strong>原始问题:</strong></p> <p>我有以下python代码:</p> ^{pr2}$ <p>它在我的机器上执行了大约3.3秒,但我想让它更快,所以我决定用java编程。我假设,由于java是编译的,而且通常被认为比python快,我会看到一些巨大的回报。在</p> <p>以下是java代码:</p> <pre><code>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<iterations; i++) { counts.add(i); } totalTime = System.currentTimeMillis() - startTime; System.out.println("TOTAL TIME = "+( totalTime/1000f) ); System.out.println(counts.size()); } } </code></pre> <p>所以这个java代码和python代码基本上是一样的。但它只需8.3秒而不是3.3秒。在</p> <p>我从一个真实的例子中提取了这个简单的例子来简化事情。关键的元素是,我有(set或hashSet)以很多成员结束,就像示例一样。在</p> <p>以下是我的问题:</p> <ol> <li><p>为什么我的python实现比java实现快?</p></li> <li><p>有没有比hashSet(java)更好的数据结构来保存一个惟一的集合?</p></li> <li><p>怎样才能使python实现更快?</p></li> <li><p>什么能使java实现更快?</p></li> </ol> <p>更新:</p> <p>感谢所有到目前为止做出贡献的人。请允许我补充一些细节。在</p> <p>我没有包括我的生产代码,因为它相当复杂。会让你分心。我上面的例子是最简单的。我的意思是javaput调用似乎比python set的add()慢得多。在</p> <p>生产代码的java实现也比python版本慢2.5-3倍——就像上面提到的。在</p> <p>我不关心虚拟机预热或启动开销。我只想比较一下我的起始时间和总时间的代码。请不要关心其他事情。在</p> <p>我用足够多的桶初始化hashset,这样它就不必重新计算了。(我总是提前知道集合最终将包含多少元素)我想有人可能会认为我应该将它初始化为iterations/0.75。但如果您尝试它,您将看到执行时间不会受到显著影响。在</p> <p>我为那些好奇的人设置了Xmx1024m(我的机器有4GB的ram)。在</p> <p>我使用的是java版本:java(TM)SE运行时环境(build 1.6.0_13-b03)。在</p> <p>在生产版本中,我在hashSet中存储了一个字符串(2-15个字符),因此我不能使用原语,尽管这是一个有趣的例子。在</p> <p>我已经运行代码很多次了。我非常确信python代码比java代码快2.5到3倍。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>另一个可能的解释是,Python中的集合是用C代码本机实现的,而Java中的HashSet是用Java本身实现的。因此,Python中的set应该天生就快得多。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
当用户用PYTHON设置一个或一个不带值的URL时,他们怎么能输入一个/a的代码呢?
6 回答
当用户登录到站点时,如何显示不同的导航栏
3 回答
当用户登录时,在Flask中向用户显示处理结果
10 回答
当用户的Flask会话结束时,我如何从Redis后端中移除所有Celery结果?
8 回答
当用户的Okta配置文件字段当前为blan时,更新该字段
5 回答
当用户的付款逾期2天时,从Django模型检索数据
10 回答
当用户的消息以问号结尾时,如何让机器人说些什么?
4 回答
当用户的系统上可能也安装了Python 2.7时,如何在用户的系统上运行Python 3脚本?
6 回答
当用户确定打印数量时,使用Matplotlib打印动画
10 回答
当用户离开时是否可以删除整个网页?
2 回答
当用户给出一个单词时如何打印?
10 回答
当用户继续更改TKin中的值(使用trace方法)时,使用Entry并更新输入的条目
10 回答
当用户编辑表单字段时,从Django时间字段中删除秒数
8 回答
当用户被更改时,消息不会来自web套接字
2 回答
当用户访问表单时,如何使表单为只读,而不具有更改权限
4 回答
当用户试图更改对象的值时,使用描述符类引发RuntimeError
10 回答
当用户调整GUI的大小时,是否有方法更改GUI内容的大小?
9 回答
当用户调整风的大小时,pythontkinter小部件的大小会不均匀
7 回答
当用户购买某个类别时,是否查找其他类别的销售?
7 回答
当用户转到上一页时,Django和芹菜插入操作
10 回答