Java与Cython内存效率

时间:2016-05-02 19:12:52

标签: java performance

我将自定义Java Random Forest实现与利用Cython的SciKit实现进行比较。算法非常相似,我在相同的数据集上测试过它们。 java实现需要比Python更多的内存。我知道这可能是由许多事情引起的,但我想知道它有多少可能是潜在的C与Java空间效率。假设两种算法都是最佳编写或至少大部分是最优的,那么我对内存使用情况有多大的不同?

2 个答案:

答案 0 :(得分:1)

您可以使用" time"如果你在Linux或Mac上,请执行命令。这将允许您查看每个程序(Java,Python,C)运行所需的时间。如果你想测试内存效率,你可以使用一个调试器(比如gdb for C)并逐步查看代码,以确切了解发生了什么"引擎盖下#34;。我认为当它真正归结为它时,你需要进行一些基准测试。

我发现有时Java在某些情况下会比C运行得更快,但有时C会有更好的内存使用和优化。我希望这会有所帮助。

答案 1 :(得分:1)

我希望苹果到苹果的Java实现可以与Python版本相媲美。正如你所说,这里有很多因素,但如果你看到内存使用量存在很大差异,最可能的原因是它与Java实现的编写方式有关。

我的经验是,通常当Java程序使用的内存超出应有的数量时,原因是应用程序正在执行以下操作:

  1. 一次输入一个输入记录并将其放入集合
  2. 一次处理一个集合中的每条记录
  3. 换句话说,它与Java无关,它与应用程序的设计有关,因为它不必要地在堆中存储大量数据。

    在内存增加500%的情况下,这不太可能是Java所固有的。这意味着Java将为算法中使用的每个字节提供5个字节的开销。如果这是现实,Java将是非常昂贵的。运行在谷歌或AWS上运行的大部分云软件并不是真的可行,而且对Android没有任何意义。没有消息来源,没有人能告诉你为什么会看到这个消息。

    除了只是坚持不需要的东西之外,我唯一能想到的就是当Cython在每个单词中放入8个字节时使用64位来保存单个字节。如果是这种情况,那么您可以在Java版本中修复它。