Sid*_*Sid 5 java performance native
我在我的项目中使用Java,它进行了大量的数学计算.在项目的下一次迭代中,将添加一些更多的计算.根据我对Java的了解,我怀疑这会导致性能问题.将繁重的计算委托给Fortran或C等低级语言是明智的决定吗?我可以触发本机调用与低级语言进行通信.一旦Fortran或C执行计算,Java将采取控制措施.这会改善性能吗?
注意不要低估现代Java VM.第一代的速度非常慢,特别是在浮点运算时,但现代的确非常快.
话虽如此,其他选择可能会更快.
当然,你应该运行一些基准测试.不要假设一个比另一个更快,得到一些具体的性能测量并在此基础上做出决定.
还要考虑"原生"解决方案的额外性能(如果有的话)是否值得编写和集成它的额外麻烦.
Java中的整数和浮点数学都是直接传递给硬件的,因此这样的计算原则上不会比C语言或者FORTRAN慢.事实上,像超越函数(sin(),等)这样的东西的库例程是用C实现的,所以再没有理由去寻找其他库.sqrt()log()
我希望你的问题给我们一些信息.你提到有很多计算正在进行,这就是数字运算.但是你没有告诉我们这些数字是如何组织和访问的.这可能是有趣且有用的信息.如果您使用复杂的对象结构来保存数据,那么访问这些结构需要时间.如果您的结果创建了新对象,那也很昂贵.如果使用数组,那些也是对象.Java中的多维数组是数组的数组,通过多个维度进行索引可以解析为比其他语言慢的对象引用.虽然我没有基准来证明它,但我怀疑你可能会更好地用一维数组替换多维数组并且有点"
一个非常简单的优化可能是简单地使用-serverJVM 的选项(如果可用)来获得更多预编译的好处,如果你还没有这样做的话.
然而,在你盲目地重新设计你的程序之前,我是第二个人建议你描述你的计算.令人惊讶的地方可能存在瓶颈.