Jython - 使用Python数据结构或Java数据结构更快吗?

时间:2012-06-24 14:24:46

标签: java python jython

我试图了解是否应该使用Python类和/或Java类。

如果制作专业词典/地图类,应该是Python的dict中的一个子类,还是来自Java的HashMap或TreeMap等?

使用Python的诱人之处仅仅是因为它们更简单,更性感。但Jython运行相对缓慢的一个原因(我觉得这样做)似乎与动态类型有关。我最好说我对这一切并不是那么清楚,并且没有花费数小时的时间仔细研究Python / Jython解释器代码,这让我感到羞耻。

无论如何,我发现Java类可能运行得更快,因为代码可能需要做更少的工作。 OTOH也许它必须做得更多。或许其中没有任何内容。有人知道吗?

2 个答案:

答案 0 :(得分:5)

使用Jython的关键是你可以编写Python代码并让它在JVM上运行。不要通过将Python变成Java来破坏它。

如果 - if - 事实证明您的数据结构太慢,您可以直接将其替换为Java版本。但这是编程的优化阶段,后来会出现。


我想我应该尝试回答你的问题。我会猜测使用本机Java结构会更快(因为JVM可以比Python解释器更多地推断它们),但这可能与Jython接口所需的额外处理相抵消。只有测试才能证明!

答案 1 :(得分:4)

通常,决策不应该是速度之一 - 无论如何,Python类都将以Java类的形式实现,即使它们不从它们继承。因此,速度应该大致相当,并且每次操作最多可以节省几个方法调用。

更大的问题是你计划用你的班级做什么。如果您将它与Python API一起使用,您将需要使用Python类型或类似行为的内容,以便不必执行整个Mapping协议的工作(只有你班级改变的位数)。如果您正在使用Java API,那么您肯定需要满足静态类型检查 - 这意味着您需要继承Java的类。

如果在你的情况下这不容易回答,那就从Python开始,因为你(正确地;-)发现它们“更简单,更性感”。如果你的课程没有超出你项目的范围,那么如果速度确实成为一个问题,那么以后应该改变这一点应该是微不足道的 - 那时你也可能会考虑诸如“它是否有助于实现它”之类的问题完全在Java级别?“你有希望认识到的是现在要考虑的过早优化。