我用Java实现了两种算法。
为了比较它们的有效性,我调用每个函数1000次并比较执行时间(使用System.currentTimeMillis()
)。
执行第一个需要2500毫秒,第二个需要1300毫秒。
对于这些结果,我认为在JavaCard中有显著的差异(在执行时间方面)。
但是如果我在JavaCard上加载2个applet,它们对应于所描述的函数,第一个需要2000毫秒,第二个需要1750毫秒…
如何解释在Java中,它看起来快了2倍,但在JavaCard中却没有?我注意到我不写EEPROM,但在RAM中,所以它不能是问题的根源。
你有什么理由来解释这个现象吗?
你运行的算法是在两个不同的平台上,所以最终的机器语言是不一样的。
在Java中进行基准测试并不简单。你不能只在循环中调用一个方法,就期望得到一致和可靠的结果。您必须考虑许多因素,编译器优化和GC只是其中的几个。为Java挑选一个性能测试工具来正确地执行它。