2015-05-26 3 views
1

Я реализовал два алгоритма на Java.Показатели производительности: Java vs JavaCard

Чтобы сравнить их эффективность, я вызываю каждую функцию 1000 раз и сравниваю время выполнения (используя System.currentTimeMillis()).

Для выполнения первого требуется 2500 мс, а для второго - 1300 мс.

С этими результатами я подумал о значительном различии (в терминах времени выполнения) в JavaCard.

Но если я загружаю 2 апплеты на более JavaCard, которые соответствуют функциям, описанным, первый из которых занимает 2000 мс, а вторая 1750 мс ...

Как объяснить, что в Java, это выглядит почти В 2 раза быстрее, но не в JavaCard? Я обратил внимание, что я не пишу в EEPROM, а в ОЗУ, поэтому он не может быть источником проблемы.

Есть ли у вас аргументы, объясняющие это явление? Заранее спасибо.

+3

Обязательный комментарий «Как написать правильный микро-тест в Java?» http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – reto

+3

Java и JavaCard - это две совершенно разные технологии - они имеют только подмножество синтаксиса, что это все. Просто слово «JavaCard» может немного ввести в заблуждение ... Я думаю, вы не должны искать какую-либо связь между Java и JavaCard. – vojta

+0

Покажите мне код алгоритма, пожалуйста. – JavaCardOS

ответ

2

Вы запускаете алгоритм на двух разных платформах, поэтому конечный машинный язык не совпадает.

0

Тестирование бенчмарки не является прямым в Java. Вы не можете просто вызвать метод в цикле и ожидать последовательных и надежных результатов. Вы должны учитывать многие факторы, оптимизацию компилятора и GC, чтобы назвать несколько. Возьмите инструмент тестирования производительности для Java, чтобы сделать это правильно.

Смежные вопросы