Когда и как являются NIO прямыми освобожденными буферами?

Если нулевые значения не позволяются

, Если Ваш метод называют внешне, запустите с чего-то вроде этого:

public void method(Object object) {
  if (object == null) {
    throw new IllegalArgumentException("...");
  }

Затем в остальной части того метода, Вы будете знать, что object не является пустым.

, Если это - внутренний метод (не часть API), просто документ, что это не может быть пустым, и вот именно.

Пример:

public String getFirst3Chars(String text) {
  return text.subString(0, 3);
}

Однако, если Ваш метод просто передает значение, и следующий метод передает его и т.д., это могло стать проблематичным. В этом случае можно хотеть проверить аргумент как выше.

, Если пустой указатель позволяется

, Это действительно зависит. Если находят, что я часто делаю что-то вроде этого:

if (object == null) {
  // something
} else {
  // something else
}

, Таким образом, я перехожу и делаю две совершенно других вещи. Нет никакого ужасного фрагмента кода, потому что я действительно должен сделать две разных вещи в зависимости от данных. Например, я должен работать над входом, или я должен вычислить хорошее значение по умолчанию?

<час>

на самом деле редко для меня использовать идиому" if (object != null && ...".

может быть легче дать Вам примеры при показе примеров того, где Вы обычно используете идиому.

5
задан gibbss 7 August 2009 в 20:58
поделиться

1 ответ

Разрешено ли виртуальной машине перемещать буфер до того, как он будет окончательно освобожден?

Он не будет перемещать его, потому что прямой буфер не является частью кучи GC.

Если я создам новый буфер в собственном код с использованием NewDirectByteBuffer, чей ответственность заключается в том, чтобы освободить резервная память?

Освободить ее - это ваша ответственность (собственный код). JVM не могла знать, какой метод использовался для выделения этого резервного хранилища (мог быть malloc'd, мог быть статическим буфером и т. Д.)

Что произойдет, если я создам новый буфер в собственном коде с использованием NewDirectByteBuffer и адрес уже используется прямым буфером?

Учитывая, что виртуальная машина не будет пытаться освободить память, адрес которой передан в NewDirectByteBuffer, ничего не произойдет, если вы передадите один и тот же адрес дважды.

6
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: