【问题标题】:Compile application using Jython使用 Jython 编译应用程序
【发布时间】:2012-07-08 19:31:49
【问题描述】:

我在 Python 中编写了一些使用 Java 库的代码,并使用 Jython 对其进行了解释,但它有点慢。我可以在每次启动脚本时以某种方式编译此代码而不是解释它吗? (我读过关于 jythonc 但它在新版本的 Jython 中已被弃用)

【问题讨论】:

    标签: java python compilation jython


    【解决方案1】:

    Jython、javac 和 jythonc

    Jython 始终在启动时编译您的应用程序 - 即,如果您启动应用程序,则 Python 代码将编译为 Java VM 字节码; VM 然后执行这个字节码。 Jython 和 javac 的区别在于 javac 创建包含字节码的 .class 文件,而 Jython 在运行时创建字节码。

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

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

    提高性能

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

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

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

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

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

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

    【讨论】:

    • 感谢您的解释。目前我的代码很少(大部分工作都在做库 - htmlunit)。我看到启动代码时有一点延迟(例如,当我在代码开头添加 print "Starting" 并启动脚本时,我会在启动后 3-4 秒看到输出),根据您的说法,这是 Jython 编译我的应用程序的时间。我想经常(从另一个 C++ 应用程序)启动这个脚本,所以我想避免在启动时出现 3-4 秒的延迟。
    • @user1307957 初始延迟可能是初始化逻辑(例如连接到数据库),无论哪种方式都很慢。可能是 Jython 将 Python 代码编译成 JVM 代码。也可能是 VM 将 JVM 代码编译成机器代码。除非你测量原因,否则你无法判断。但是,您可以进行时间/空间折衷,让您的程序在后台运行,并通过 IPC 机制控制是否从 C++ 进行初始化,从而降低初始化任务的频率。
    • 再次感谢。另一个问题是如何使用 C++ 中的 Java 库有更好的方法吗?
    • @user1307957 用于将 Java 嵌入到 C++ 中(=每个进程一个进程)查看 stackoverflow.com/questions/7506329/… 等。对于 C++/Java IPC(=一个 C++ 进程,一个 Java 进程)查看stackoverflow.com/questions/6175209/…
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-07-14
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多