java - 使用 Jython 编译应用程序

标签 java python compilation jython

我在使用 Java 库的 Python 中编写了一些代码,并使用 Jython 对其进行解释,但速度有点慢。我能否以某种方式编译这段代码,而不是每次启动脚本时都解释它? (我读到了 jythonc,但它在新版本的 Jython 中被弃用了)

最佳答案

Jython、javac 和 jythonc

Jython 总是在启动时编译你的应用程序——也就是说,如果你启动你的应用程序,那么 Python 代码就会被编译成 Java VM 字节码; VM 然后执行此字节码。 Jython 和 javac 之间的区别在于 javac 创建包含字节码的 .class 文件,而 Jython 在运行时创建字节码。

jythonc 对 Python 代码的作用与 javac 对 Java 代码的作用相同:它将代码编译为 .class 文件并将其保存到磁盘。在性能方面,这并不比 Jython 的标准行为好,但它可以在其他 JVM 语言中使用/扩展 Jython 代码。

jythonc 不会以任何方式提高程序的性能。

提高性能

使用a profiler检测代码的热点。探查器将向您显示您的程序花费大部分时间的信息:

Example output of the NetBeans Profiler showing that the constructor of Anagrams took >70% of the time of the application run.

了解应用程序的热点后,您就会知道如何优化其性能。在上面的屏幕截图中,应用程序 70% 以上的时间花费在构造函数 ( <init> ) 中。

然后您可以使用多种技术来提高性能:

  1. 使用更好的算法。如果适用,这对性能的影响最大。

  2. 用执行时间换取空间。缓存您经常调用的函数的结果,尤其是当它们相对较慢时 - 例如通过数据库或网络访问检索的数据。

  3. 以开销较少的语言重新实现热点。在您的情况下,您可以在 Java 中重新实现热点并从 Jython 中调用它们。

关于java - 使用 Jython 编译应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11394412/

相关文章:

java - Git:每次克隆后文件名恢复为旧名称

java - 从自定义对话框 View 返回值

java - 在 Android 中缩放 SVG?

Python 情节 : How to remove grid lines not within the circle?

haskell——如何从非主模块创建二进制文件?

java - 具有列表作为字段的不可变 Java 类

PHP的表单括号技巧是对Django的___?

python - 安装菲奥娜: Must the gdal version be compatible with fiona?

c++ - 编译器跳过 C++ 中的可变参数模板/函数

java - 将java编译为 native 代码