새 Java 7 nio.file.StandardOpenOption이 이전 FileChannel.force() 메소드와 다른지 확실하지 않습니다.Java FileChannel.force()와 StandardOpenOption.Sync의 차이점은 무엇입니까?
O_DIRECT도 할 수 있습니까?
새 Java 7 nio.file.StandardOpenOption이 이전 FileChannel.force() 메소드와 다른지 확실하지 않습니다.Java FileChannel.force()와 StandardOpenOption.Sync의 차이점은 무엇입니까?
O_DIRECT도 할 수 있습니까?
두 가지의 차이점은 FileChannel.force()
으로 전화를 걸어 기본 저장 장치에 데이터를 보내야한다는 것입니다. O_DIRECT에 대해 잘 모르겠습니다.
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
파일에 상수를 추가해야 함)