- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在玩 Jython,并决定用 pystone 做一些快速而肮脏的基准测试。为了获得引用,我首先测试了 cPython 2.6,循环数量不断增加(我认为这可能是相关的,因为 Jython 应该在一段时间后才开始从 JIT 中获利)。
(richard garibaldi):/usr/local/src/pybench% python ~/tmp/pystone.py
Pystone(1.1) time for 50000 passes = 1.04
This machine benchmarks at 48076.9 pystones/second
(richard garibaldi):/usr/local/src/pybench% python ~/tmp/pystone.py 500000
Pystone(1.1) time for 500000 passes = 10.33
This machine benchmarks at 48402.7 pystones/second
(richard garibaldi):/usr/local/src/pybench% python ~/tmp/pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 19.6
This machine benchmarks at 51020.4 pystones/second
如您所见,cPython 的行为始终如一:完成测试所需的时间随循环次数线性增加。知道这一点后,我开始测试 Jython。
(richard garibaldi):/usr/local/src/pybench% jython ~/tmp/pystone.py
Pystone(1.1) time for 50000 passes = 2.29807
This machine benchmarks at 21757.4 pystones/second
(richard garibaldi):/usr/local/src/pybench% jython ~/tmp/pystone.py 500000
Pystone(1.1) time for 500000 passes = 10.931
This machine benchmarks at 45741.4 pystones/second
(richard garibaldi):/usr/local/src/pybench% jython ~/tmp/pystone.py 1000000
Pystone(1.1) time for 1000000 passes = 107.183
This machine benchmarks at 9329.86 pystones/second
在第一次运行期间,与它的 C 兄弟相比,Jython 运行得相当糟糕。当增加循环数量时,它开始感觉更好,接近 cPython,就像我最初的假设预测的那样。请注意,循环数增加了 10 倍,但 Jython 完成它们只花费了大约 5 倍的时间。所以,正如您想象的那样,我期待 Jython 在最终测试中表现出色。然而,令我非常失望的是,它的表现非常糟糕:比初始运行慢了两倍多。
您的假设是什么:为什么 Jython 的行为如此不一致?会不会是 GC 在某个时刻开始,并且花费了很多时间?我看过 PyStone 的代码,垃圾收集似乎没有关闭,但我希望 Java 的 GC 至少和 Python 的一样好......你认为这种放缓是永久性的,还是会消失在增加循环次数后的某个时刻? Jython 在真正长时间运行的进程中应该如何表现?
编辑:不幸的是,如果我将循环数增加到 200 万次,我会得到 java.lang.OutOfMemoryError
...
(当然,Jython 仍处于测试阶段,因此在最终版本中它应该会变得更好。)
我正在使用 Jython 2.5b1(trunk:5903:5905,2009 年 1 月 9 日,16:01:29)、Java(TM) SE Runtime Environment (build 1.6.0_07-b06-153) 和 Java HotSpot(TM) MacOS X 10.5 上的 64 位服务器 VM(内部版本 1.6.0_07-b06-57,混合模式)。
感谢您的回答。
最佳答案
很难对像 JVM 这样复杂的运行时环境进行基准测试。即使不包括 JIT 和 GC,您在运行之间也会有很大的堆、内存布局和缓存变化。
对 Jython 有帮助的一件事是在单个 VM session 中多次运行基准测试:一次预热 JIT,一次或多次单独测量。我做了很多 Jython 基准测试,不幸的是,通常需要 10-50 次尝试才能达到合理的时间
您可以使用一些 JVM 标志来观察 GC 和 JIT 行为,以了解预热期应该有多长,但显然您不应该在启用调试标志的情况下进行基准测试。例如:
% ./jython -J-XX:+PrintCompilation -J-verbose:gc
1 java.lang.String::hashCode (60 bytes)
2 java.lang.String::charAt (33 bytes)
3 java.lang.String::lastIndexOf (156 bytes)
4 java.lang.String::indexOf (151 bytes)
[GC 1984K->286K(7616K), 0.0031513 secs]
如果您执行所有这些操作并使用 HotSpot Server VM,您会发现 Jython 在 pystone 上比 CPython 稍快一些,但这决不能代表 Jython 的一般性能。对于 2.5 版本,Jython 开发人员更加关注正确性而不是性能;在未来一年左右的时间里,随着 2.6/2.7/3.0 版本的发布,性能将得到更多强调。您可以通过查看一些 microbenchmarks 来了解一些痛点。 (最初源自 PyPy)我运行。
关于java - 为什么 Jython 在使用 PyStone 进行测试时表现不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597483/
Pyston 官方发文表示,其团队(Marius 和 Kevin)将加入 Anaconda,并继续进行 Python 开源解释器 Pyston 的开发。 Pyston 最初是由 Dropb
我正在启动一个分布式计算项目,有点像那里的各种@home 项目(虽然不是做简单的科学计算,而是偶尔让远程用户参与涉及音频和视觉刺激呈现的任务)并且我需要了解运行我的应用程序的机器之间的相对系统性能,以
我有三台不同的笔记本电脑,上面装有 Python2.5。如果我运行 Pystone,我会得到基本相同的值。 Intel Pentium M @1.80GHz - 1.5GB RAM 英特尔 T2300
我最近一直在玩 Jython,并决定用 pystone 做一些快速而肮脏的基准测试。为了获得引用,我首先测试了 cPython 2.6,循环数量不断增加(我认为这可能是相关的,因为 Jython 应该
如果解释器正在运行 pyston、jython、ironpython、pypy 等,我想从正在运行的 Python 程序内部进行测试。 我想到的是 system.version 上的模式匹配和检查来自
我是 Pyston 的初学者。我什至不知道我在说什么是可能的或不可能的。如果有人知道我们可以使用 Pyston(Dropbox 的)将 Python 代码转换为 LLVM 位码,然后使用 Emiscr
我是一名优秀的程序员,十分优秀!