2011-09-06 6 views

답변

0

두 가지의 차이점은 FileChannel.force()으로 전화를 걸어 기본 저장 장치에 데이터를 보내야한다는 것입니다. O_DIRECT에 대해 잘 모르겠습니다.

0

JVM을 사용하여 O_DIRECT IO를 수행 할 수 없습니다. 이유 중 하나는 (필자가 생각하기에) 파일 내용이 512 바이트 경계에 정렬되어야하는 메모리입니다. ByteBuffers으로 할당 된 메모리가이 속성을 충족하지 못합니다.

이 512 바이트 정렬과 비슷한 또 다른 문제점은 512 바이트의 배수 인 IO 작업 만 수행 할 수 있다는 것입니다. 따라서 700 바이트의 파일을 읽으려면 문제가 발생합니다.

Here is a similar thread that presents these issues. 설명 된 방법은 in my blog how to implement direct IO into the JVM입니다. 또한 StandardOpenOption 클래스에 O_DIRECT 옵션을 추가하는 방법에 대한 힌트가 있습니다 (JDK 소스의 /src/solaris/native/sun/nio/fs/genUnixConstants.c 파일에 상수를 추가해야 함)

관련 문제