Как правило, в обычной программе Java у вас нет этой проблемы.
Но да, если вы используете что-то вроде sun.misc.Unsafe
, вы можете вызвать ошибку сегментации Но именно поэтому Unsafe
называется Unsafe
. Обычно вам не нужно его использовать, поэтому у вас нет этих проблем в вашем коде.
Для получения дополнительной информации:
Где документировано sun.misc.Ansafe?
Сообщение об ошибке, основанное на ошибке сегментации с sun.misc.Unsafe
https://github.com/eclipse/openj9/issues/4153
Вот один пример, как вы можете проверить:
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class MainClass {
public static void main(String[] args)
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);
long ten = 10;
byte size = 1;
long mem = unsafe.allocateMemory(size);
//Put here the wrong address!!!
unsafe.putAddress(1, ten);
//With this will work:
//unsafe.putAddress(mem, ten);
long readValue = unsafe.getAddress(mem);
System.out.println("result: " + readValue);
}
}
Когда я выполняю в Ubuntu 18.04, я получаю такой вывод:
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00007f05bdf04d27, pid=4145, tid=4147
JRE version: OpenJDK Runtime Environment (10.0.2+13) (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
В Windows я думаю, что это будет аналогичный вывод с описанием фатальной ошибки.
Удачи всем!