Я пытался проверить скорость Math.pow()
на умножение "вручную" и наткнулся на эту ошибку:
В Java Runtime Environment обнаружена фатальная ошибка:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc = 0x000000005ac46888, pid = 1508, tid = 6016
Версия JRE: среда выполнения Java (TM) SE (8.0_25-b18) (сборка 1.8.0_25-b18)
Java VM: Java HotSpot (TM) 64-разрядная серверная VM (25.25-b02 смешанный режим windows-amd64 сжатые oops)
Проблемная рамка:
V [jvm.dll + 0x496888]Не удалось записать основной дамп. Minidumps по умолчанию не включены в клиентских версиях Windows
Код, генерирующий его:
long t = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
double val = i*i*i*i*i /* 256 times *i */ *i*i*i;
sum ^= Double.doubleToLongBits(val);
}
System.out.println((System.nanoTime() - t) / 10000000);
Я понимаю, что это действительно экстремальный случай, но все же, это правильный код, и самое худшее, что может случиться, должно быть связано с Inf в значении, а не с JRE. Это действительно стандартное поведение, описанное oracle, или просто ошибка, которую никто не хочет исправлять, потому что, если вы ее видите, вы действительно плохой человек.
Для записи с NetBeans 8.0.2
ОБНОВЛЕНИЕ 1
Кажется, проблема в величине умноженного числа.
long t = System.nanoTime();
for(int j = 0; j < 10000000; j++) {
int i = j % 50;
double val = i*i*i*i*i /* 256 times *i */ *i*i*i;
sum ^= Double.doubleToLongBits(val);
}
System.out.println((System.nanoTime() - t) / 10000000);
будет просто отлично.
ОБНОВЛЕНИЕ 2
Пытался запустить его с консоли с помощью
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
и прошел просто отлично, поэтому я предполагаю, что это должно быть либо проблема с этим конкретным JRE, либо с NetBeans.