T
tuxedo
Gast
Hallo zusammen,
ausnahmsweise hab ich mal keine Frage ...
Evtl. gehört's in die Plauderecke. Aber vom Thema her passt bei den "Java-Themen" schon...
Hab eben gerade ein wenig mit Asynchronous File IO in Java 7 gespielt...:applaus:
Und ich bin total geflasht.
Folgendes "sinnloses Test-Szenario":
HashMap<Integer, Long> mit 20Mio Einträgen wird in eine File "persistiert".
An den Anfang der File schreib ich noch in einem 8-byte Long die Größe der Hashmap.
Ergo:
8 byte + (20Mio * (4 byte Integer + 8 byte Long)) ...
Das sind also insgesamt 240000008 bytes, oder rund 240MB.
Geschrieben wird auf:
* Samsung SATA2 1TB Platte
welche hier drin steckt:
* Intel i7 860 4x2,8Ghz
* 8GB RAM
* Debian 6 AMD64
Damit ich nicht Byte-Weise schreibe, schreib ich immer 1Mio Einträge der HashMap (12byte/Eintrag) in einen ByteBuffer und schiebe den dann zum schreiben auf die Platte runter.
Und das dauert "wahnsinnige" 1196ms .... 20Mio Einträge mit 240MB... nur 1,2sek... *hammer* :toll:
Kein Plan wie ich 240B/sec mit der Platte erreichen soll. Wohlmöglich ist Java der meinung die Daten wären schon fertig geschrieben und ist "fertig mit Zeit messen", wobei das OS noch 1-2sekunden lang den Schreib-Puffer leert oder sowas...
Sehen kann ich die 1-2sek jedenfalls nirgendwo. Im Filebrowser sehe ich die File die 240MB erreichen qausi im selben Moment wie das Test-Programm fertig ist.
Egal. Interessant ist eben:
Kaum Aufwand in Java. Weder zeitmäßig noch implementierungsmäßig. Mit einem Profiler findet man eigentlich nix was man profilen könnte. Wird alles in den Tiefen, bzw. unterhalb der JVM erledigt.
Wer will da noch normales IO ???:L
ausnahmsweise hab ich mal keine Frage ...
Evtl. gehört's in die Plauderecke. Aber vom Thema her passt bei den "Java-Themen" schon...
Hab eben gerade ein wenig mit Asynchronous File IO in Java 7 gespielt...:applaus:
Und ich bin total geflasht.
Folgendes "sinnloses Test-Szenario":
HashMap<Integer, Long> mit 20Mio Einträgen wird in eine File "persistiert".
An den Anfang der File schreib ich noch in einem 8-byte Long die Größe der Hashmap.
Ergo:
8 byte + (20Mio * (4 byte Integer + 8 byte Long)) ...
Das sind also insgesamt 240000008 bytes, oder rund 240MB.
Geschrieben wird auf:
* Samsung SATA2 1TB Platte
welche hier drin steckt:
* Intel i7 860 4x2,8Ghz
* 8GB RAM
* Debian 6 AMD64
Damit ich nicht Byte-Weise schreibe, schreib ich immer 1Mio Einträge der HashMap (12byte/Eintrag) in einen ByteBuffer und schiebe den dann zum schreiben auf die Platte runter.
Und das dauert "wahnsinnige" 1196ms .... 20Mio Einträge mit 240MB... nur 1,2sek... *hammer* :toll:
Kein Plan wie ich 240B/sec mit der Platte erreichen soll. Wohlmöglich ist Java der meinung die Daten wären schon fertig geschrieben und ist "fertig mit Zeit messen", wobei das OS noch 1-2sekunden lang den Schreib-Puffer leert oder sowas...
Sehen kann ich die 1-2sek jedenfalls nirgendwo. Im Filebrowser sehe ich die File die 240MB erreichen qausi im selben Moment wie das Test-Programm fertig ist.
Egal. Interessant ist eben:
Kaum Aufwand in Java. Weder zeitmäßig noch implementierungsmäßig. Mit einem Profiler findet man eigentlich nix was man profilen könnte. Wird alles in den Tiefen, bzw. unterhalb der JVM erledigt.
Wer will da noch normales IO ???:L