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?
Die Option SYNC scheint nur für 'write()' Aufrufe zu gelten. – EJP
Yeah Es scheint so, aber ich konnte keine Dokumentation zu verifizieren :( – vkx
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