Ich verwende MappedByteBuffer, um Dateilese-/schreibvorgänge zu beschleunigen(). Meine Fragen wie folgt:Müssen wir MappedByteBuffer.force() verwenden, um Daten auf die Festplatte zu schreiben?
Ich bin nicht sicher, ob ich brauche .force() -Methode verwenden, um den Inhalt auf der Festplatte oder nicht zu spülen. Es sieht so aus, als ob ohne .force() die .getInt() immer noch perfekt funktionieren könnte (naja, da dies ein Speicher-gemappter Puffer ist, nehme ich an, dass .getInt() die Daten von der Platte holt, was bedeutet, dass die Daten in die Datenbank übertragen wurden bereits Platte.
ist .force() -Methode eine blockierende Methode?
eine blockierende Methode einen synchronisierten Block?
Es gibt einen großen Unterschied in der Leistung mit oder ohne .force Aufruf () Was ist der Vorteil des manuellen Aufrufs von .force()? In welcher Situation sollten wir es verwenden? Ich gehe davon aus, dass die Daten immer noch auf die Festplatte hinter der Szene geschrieben werden, ohne sie aufzurufen.
Wenn wir .force() aufrufen müssen, hilft das Aufrufen eines anderen Threads, die Leistung zu verbessern? Werden die Daten wegen Synchronisationsproblemen beschädigt?
import java.io.FileNotFoundException; Import java.io.IOException; importieren Sie java.io.RandomAccessFile; Import java.nio.MappedByteBuffer; importieren Sie java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode;
public class Haupt {
public static void main(String[] args) throws IOException {
System.out.println("start");
RandomAccessFile raf = new RandomAccessFile("test.map", "rw");
FileChannel fc = raf.getChannel();
MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE, 0, 2000000);
int total = 0;
long startTime = System.currentTimeMillis();
for (int i = 0; i < 2000000; i += 4) {
mbb.putInt(i, i);
//mbb.force();
total += mbb.getInt(i);
}
long stopTime = System.currentTimeMillis();
System.out.println(total);
System.out.println(stopTime - startTime);
System.out.println("stop");
}
}
Version des JDK? (Nicht, dass es wirklich so viel verändert hat) –
Ich sehe nicht, welchen Unterschied das machen würde. – EJP
Keine nach dem Blick auf die Javadoc :-) –