2017-12-30 76 views
0

Funktioniert StandardOpenOption.SYNC mit MappedByteBuffers und speichern Sie uns aufrufende MappedByteBuffer.force()?Müssen wir MappedByteBuffer leeren, wenn der zugrundeliegende Kanal mit StandardOpenOption.SYNC geöffnet wird

Set<OpenOption> options = new HashSet<>(); 
options.add(StandardOpenOption.READ); 
options.add(StandardOpenOption.WRITE); 
options.add(StandardOpenOption.CREATE); 
options.add(StandardOpenOption.SYNC); 

FileChannel channel = FileChannel.open("file.tmp", options); 
MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_WRITE, 0, channel.size()); 

buf.putInt(500); 
buf.force(); // Needed or not? 

Edit:

Ich gehe davon aus jdk verwendet O_SYNC Flagge und mmap() -Aufruf, so diese Frage zu Linux-Welt erstreckt: Müssen wir nennen msync(), wenn Basiswert fd mit O_SYNC Flagge geöffnet wird?

+0

Die Option SYNC scheint nur für 'write()' Aufrufe zu gelten. – EJP

+0

Yeah Es scheint so, aber ich konnte keine Dokumentation zu verifizieren :( – vkx

+0

mmap force/msync Leistung fast gleich O_SYNC + schreiben auf Linux, aber auf Windows mmap/msync gleichwertige Weise ist 30-40x langsamer, das ist, warum ich wollte um zu wissen, ob es uns spart spart – vkx

Antwort

0

Ich kann kein Dokument finden, um es zu überprüfen.

Getestet auf Linux/Windows mit und ohne SYNC-Option, Leistung war ähnlich, so nehme ich an, Dateioption SYNC/O_SYNC gilt nicht für mmap/MappedByteBuffer-Operationen.

Verwandte Themen