何かを理解するのを手伝ってください。
を使用して..import sun.misc.Unsafe;
0-127
範囲外の文字を防ぐために、文字をメモリアドレスに配置する必要がある場合は、これを行います
if (0 != (c & 0xFF80)) {
throw new RuntimeException("Only Ascii characters are supported. 0-127.");
} else {
// Since Java's chars are 16 bits long, i cast it
// to byte (8 bits) and then `putByte()`
UNSAFE.putByte(address, (byte) c);
}
私のテストがそのメモリの内容をチェックするとき
char c1 = Ascii.a;
asciiEncoder.encode(address, c1);
assertThat(unsafe.getChar(address), is(c1));
このテストは、一部のマシンで成功したり失敗したりするようです。繰り返しますが、これは一部の MAC では機能し、他の MAC では機能せず、一部の Windows では機能し、他の Windows では機能しません。
何が失敗していますか?'a' 以外の文字が返されます。
私が理解しているように、割り当て時にメモリがクリーンアップされていない場合、これは可能ですが、これはこれを処理しませんか?
@Before
public void setUp() {
address = unsafe.allocateMemory(64); // Isn't this mem clean?
}
これを 8 ビットに変更すると、テストは常にパスします
@Before
public void setUp() {
address = unsafe.allocateMemory(8);
}
理解を助けてください