Java不安全内存操作与Java与C相比

时间:2015-04-04 14:32:38

标签: java c memory unsafe

是否有任何基准可用于比较Java Unsafe与Java与C区域的内存访问与堆外内存?例如,Java LZ4(或L4Z?)压缩库声明他们使用Unsafe的Java端口是本机C实现速度的66%。

问:有什么可以给我一个(更好的)估计吗?

我想知道如果有一个不安全的东西以及我应该移植哪些部分,是否值得去某个库的C解决方案。使用具有大型阵列(兆字节)的堆外内存或堆内存可能不是那么大的保护程序。唯一值得一提的是使用不安全的我可以通过读取任何偏移量而不是字节等的整数来使用我想要的粒度。这将大大改善我试图加速的一个问题的算法。

1 个答案:

答案 0 :(得分:1)

是。唯一可以给你更好估计的是试验,类似于作者的运行,但在系统和使用你打算使用的程序而不是作者打算用来测试的系统和程序。

我认为作者“声称他们使用Unsafe的Java端口是本机C实现速度的66%”,他打算用任何可能的方式销售他的产品。

考虑到目前没有“本地C实现”,也不会有因为C被设计为 portable 。唯一的“本机”是机器代码,甚至在某些情况下引发了一些争论。有很好的C编译器和糟糕的C编译器。这两种品质形成“本机”机器代码。在测试中使用了哪一个?

将C或Java转换为机器代码或JVM字节码后,它不再是C或Java。它是机器代码或JVM字节码。这让我想到了下一点,我将以问题的形式表达:如果C中的程序和Java中执行相同任务的程序都被编译为相同的JVM字节码,那么程序更快?

我们无法衡量速度,直到我们将速度归因于指令,缓存未命中以及所有这些。虽然他们的代码可能是“原生C实现速度的66%”(无论这意味着什么),但他们可能已经针对自己的机器执行了一些非常偏斜的优化,以获得这些数据。

总之,如果您打算在作者计算机上运行这些测试,那么作者执行的测试是切合实际的,这不一定是您自己计算机上的软件。