Если известно, что переменная либо содержит конкретную битовую комбинацию, представляющую null
, либо информацию, которая может использоваться для определения местоположения заголовка объекта виртуальной машины Java, и если метод чтения заголовка объекта, которому дана ссылка, будет по своей сути перехватывать если задан битовый шаблон, связанный с null
, то JVM может получить доступ к объекту, идентифицированному переменной, в предположении, что он есть. Если переменная может содержать что-то, что не является допустимой ссылкой, но не является специфическим битовым шаблоном null
, любой код, который пытается использовать эту переменную, должен сначала проверить, идентифицировал ли он объект. Это сильно замедлит работу JVM.
Если Object
получено из Anything
, а объекты класса получены из Object
, но примитивы унаследованы от другого класса, полученного из Anything
, то в 64-битной реализации было бы целесообразно сказать, что о 3/4 возможных битовых комбинаций будут представлять double
значения ниже 2 ^ 512, 1/8 из них будут представлять long
значения в диапазоне +/- 1 152 921 504 606 846 975, несколько миллиардов представляют любое возможное значение любого другого примитива и 1/256 для идентификации объектов. Многие виды операций над объектами типа Anything
будут выполняться медленнее, чем с типом Object
, но такие операции не будут ужасно частыми; большая часть кода заканчивает приведением Anything
к более конкретному типу, прежде чем пытаться работать с ним; фактический тип, сохраненный в Anything
, должен быть проверен перед приведением, но не после того, как было выполнено приведение. Без различия между переменной, содержащей ссылку на тип кучи, однако, в отличие от переменной, содержащей «что-либо», невозможно было бы избежать увеличения накладных расходов значительно дальше, чем было бы или должно быть в противном случае.