Интерфейс MemorySegment.Scope
- Включающий интерфейс:
MemorySegment
public static sealed interface MemorySegment.Scope
Иными словами, к сегменту памяти нельзя получить доступ, если связанная с ним область действия не является активной. Экземпляры областей действия можно сравнивать на равенство. То есть две области действия считаются равными, если они обозначают одно и то же время жизни.
Время жизни сегмента памяти может быть либо неограниченным, либо ограниченным. Неограниченное время жизни моделируется с помощью глобальной области действия. Глобальная область действия всегда alive. Поэтому сегмент, связанный с глобальной областью действия, имеет тривиальные временные границы и всегда доступен. С глобальной областью действия связаны следующие сегменты:
- Сегменты, полученные из глобальной арены;
- Сегменты, полученные из необработанного адреса с помощью фабричного метода
MemorySegment.ofAddress(long); и -
Zero-length memory segments.
Напротив, ограниченное время жизни моделируется с помощью области действия сегмента, которую можно сделать недействительной вручную — вызвав explicitly — или автоматически, сборщиком мусора. Область действия сегмента, которая становится недействительной автоматически, называется автоматической областью действия. Автоматическая область действия всегда alive, пока она достижима. С автоматической областью действия связаны следующие сегменты:
- Сегменты, полученные из автоматической арены;
- Сегменты, полученные из массива Java, например с помощью фабричного метода
MemorySegment.ofArray(int[]); - Сегменты, полученные из буфера с помощью фабричного метода
MemorySegment.ofBuffer(Buffer); и - Сегменты, полученные с помощью поиска загрузчика.
byte[] arr = new byte[10];
MemorySegment segment1 = MemorySegment.ofArray(arr);
MemorySegment segment2 = MemorySegment.ofArray(arr);
assert segment1.scope().equals(segment2.scope());
- С версии:
- 22
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Возвращает true, если переданный объект также является областью действия, моделирующей то же время жизни, что и данная область действия. |
int |
hashCode() |
Возвращает хеш-код этого объекта области действия. |
boolean |
isAlive() |
Возвращает true, если области памяти, на которых основаны связанные с этой областью действия сегменты памяти, всё ещё действительны. |
Подробное описание методов
isAlive
boolean isAlive()
true, если области памяти, на которых основаны связанные с этой областью действия сегменты памяти, всё ещё действительны.- Возвращает:
-
true, если области памяти, на которых основаны связанные с этой областью действия сегменты памяти, всё ещё действительны
equals
boolean equals(Object that)
true, если переданный объект также является областью действия, моделирующей то же время жизни, что и данная область действия. В этом случае всегда выполняется this.isAlive() == ((Scope)that).isAlive().hashCode
int hashCode()
- Переопределяет:
-
hashCodeв классеObject - Требования к реализации:
- Реализации этого метода должны соблюдать общий контракт
Object.hashCode(). - Возвращает:
- хеш-код этого объекта области действия
- См. также:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/foreign/MemorySegment.Scope.html