我将自定义Java Random Forest实现与利用Cython的SciKit实现进行比较。算法非常相似,我在相同的数据集上测试过它们。 java实现需要比Python更多的内存。我知道这可能是由许多事情引起的,但我想知道它有多少可能是潜在的C与Java空间效率。假设两种算法都是最佳编写或至少大部分是最优的,那么我对内存使用情况有多大的不同?
答案 0 :(得分:1)
您可以使用" time"如果你在Linux或Mac上,请执行命令。这将允许您查看每个程序(Java,Python,C)运行所需的时间。如果你想测试内存效率,你可以使用一个调试器(比如gdb for C)并逐步查看代码,以确切了解发生了什么"引擎盖下#34;。我认为当它真正归结为它时,你需要进行一些基准测试。
我发现有时Java在某些情况下会比C运行得更快,但有时C会有更好的内存使用和优化。我希望这会有所帮助。
答案 1 :(得分:1)
我希望苹果到苹果的Java实现可以与Python版本相媲美。正如你所说,这里有很多因素,但如果你看到内存使用量存在很大差异,最可能的原因是它与Java实现的编写方式有关。
我的经验是,通常当Java程序使用的内存超出应有的数量时,原因是应用程序正在执行以下操作:
换句话说,它与Java无关,它与应用程序的设计有关,因为它不必要地在堆中存储大量数据。
在内存增加500%的情况下,这不太可能是Java所固有的。这意味着Java将为算法中使用的每个字节提供5个字节的开销。如果这是现实,Java将是非常昂贵的。运行在谷歌或AWS上运行的大部分云软件并不是真的可行,而且对Android没有任何意义。没有消息来源,没有人能告诉你为什么会看到这个消息。
除了只是坚持不需要的东西之外,我唯一能想到的就是当Cython在每个单词中放入8个字节时使用64位来保存单个字节。如果是这种情况,那么您可以在Java版本中修复它。