for(int i=0;i<len;i++)
if(i>=0)
arr[i]=i;
;;;;;;;;;;;;;;;;;;;;;;;
//.....
for(int i=1;i<len;i++)
if(i>0)
i=arr[i];
В java раньше вроде в какой-о версии, каждый доступ к массиву проверялся на границы, в добавок.
Как во втором цикле будет удалена проверка if( i> 0), откуда компилятору известно что arr[i] будет больше 0.
А вдруг его через другой поток, через другой процесс хакер в редакторе исправил,
или Космические Лучи, в Ram попали, что тогда будет?
Не понимаю, как вообще можно удалить проверку. И как ее вернуть.
А еще не понимаю, как собирают статистику, типа помимо того что бы проверить некое условие N раз, дак еще и N раз Счетчик для каждого блока увеличить, и еще наверное сравнить этот счетчик, с каким-то минимум для оптимизации. (А после оптимизации все эти счетчики и сбор статистики убираются надеюсь?)
А еще не могу понять, как на эмуляторах при исполнение клиентского кода, как кода выше, эмулятор обрабатывает адрес, типа максимально эффективно, вообще не обрабатывать, но тогда ошибки в памяти вызовут ошибку на хосте, а хакер дак и вообще может через эмулятор взломать внешнею систему.
А делать доп проверки то же дорого будет, так как это каждая вторая операция.