Это может быть полностью отключено, но я все равно опубликую это.
Мне кажется, что это похоже на то, как это работает в C (как предложено @ John3136).Глядя на «официальную» документацию (http://www.docjar.com/html/api/sun/misc/Unsafe.java.html),, довольно ясно, что выделенная вами память является собственной памятью. Это означает, что она находится в памяти JVM, но в куче, выделенной для JVM самой ОС.
Когда ОС выделяет кусок памяти, она выделяет определенный диапазон адресов этой памяти, и (кроме нескольких других вещей, таких как статическая память и код), куча растет снизу, а стек сверхуадресного пространства (надеюсь, это знакомо). Так что, если в куче выделена память, и вы снова ссылаетесь на нее, нет никакого способа выйти за пределы, выделенные ОС. На самом деле, яконечно, если вы попытаетесь сделать UNSAFE.putOrderedLong(null, ptr+4, 100L)
, он все равно будет работать, если ваш компьютер достаточно новый. Теперь то, что хранится именно там, является загадкой даже для самой ОС, но поскольку UNSAFE
работает на таком низком уровне, это определенновозможно.