В List есть стирание типов, но класс Object не имеет ничего общего с Java Generics и стиранием типов.
То же самое произойдет без использования дженериков вообще.
Например:
Animal a = new Tiger();
System.out.println(a.getClass());
также распечатает тигра.
Это - подсказка к компилятору, что переменная будет в большой степени использоваться и что Вы рекомендуете, чтобы это было сохранено в регистре процессора, если это возможно.
самые современные компиляторы делают это автоматически и лучше в выборе их, чем мы люди.
На поддерживаемых компиляторах C это пытается оптимизировать код так, чтобы значение переменной было сохранено в фактическом регистре процессора.
Регистр уведомил бы компилятор, что кодер полагал, что эта переменная будет писаться/читаться достаточно для выравнивания по ширине ее устройства хранения данных в одном из нескольких регистров, доступных для переменного использования. Чтение/запись из регистров обычно быстрее и может потребовать меньшего набора кода операции.
В наше время, это не очень полезно, поскольку оптимизаторы большинства компиляторов лучше, чем Вы в определении, должен ли регистр использоваться для той переменной, и как долго.
Это не было релевантно в течение по крайней мере 15 лет, поскольку оптимизаторы принимают лучшие решения относительно этого, чем Вы можете. Даже когда это было релевантно, это имело намного больше смысла на архитектуре ЦП с большим количеством регистров, как SPARC или M68000, чем это сделало на Intel с его недостатком регистров, большинство которых резервируется компилятором в его собственных целях.
Это говорит компилятору пытаться использовать регистр ЦП, вместо RAM, сохранить переменную. Регистры находятся в ЦП и намного быстрее к доступу, чем RAM. Но это - только предложение к компилятору, и это не может выполнить.
Я удивлен, что никто не упомянул, что Вы не можете взять адрес регистровой переменной, даже если компилятор решает сохранить переменным в памяти, а не в регистре.
Настолько использующий register
Вы ничего не выигрываете (так или иначе, компилятор решит для себя, куда поместить переменную), и проиграйте &
оператор - никакая причина использовать его.
Вы смешиваете со сложным окрашивающим график алгоритмом компилятора. Это используется для выделения регистра. Ну, главным образом. Это действует как подсказка к компилятору - это правда. Но не проигнорированный в целом, так как Нельзя взять адрес регистровой переменной (помнят, компилятор, теперь на Вашем милосердии, попытается действовать по-другому). Который способом говорит Вам не использовать его.
ключевое слово использовалось долго, длинная спина. Когда было только так мало регистров, которые могли считать их всех использованием Вашего указательного пальца.
, Но, поскольку я сказал, удержанный от использования не означает, что Вы не можете использовать его.
Фактически, register сообщает компилятору, что переменная не имеет псевдонима с что-либо еще в программе (даже не char).
Это может быть использовано современными компиляторами в различных ситуациях и может немного помочь компилятору в сложном коде - в простом коде компиляторы могут понять это на своих own.
В противном случае он не служит никакой цели и не используется для распределения регистров. Его указание обычно не приводит к снижению производительности, если ваш компилятор достаточно современный.