Java7: Faszination File AIO ...

T

tuxedo

Gast
Wer's selbst testen will und ggf. nicht genug Speicher hat: Einfach die "count" Variable ein wenig runterschrauben...

Wieso schreib ich eigentlich dazu dass man den "count" ggf. runtersetzen soll um den Heap nicht zu fluten wenn's keiner liest?!?

Denn gnau das passiert bei dir... 10Mio Einträge scheinen bei dir nicht so ohne weiteres in den Speicher zu passen.. :autsch:

Manchmal hilft's wenn man 1 und 1 zusammen zählt.

--> RTFM :rtfm:
 
Zuletzt bearbeitet von einem Moderator:
T

tuxedo

Gast
@tfa

Brauchst du auch nicht. Ist ein klassicher "OutOfMemory" Fehler. Hab mal exemplarisch eins der 4 Bilder angehängt.
 

GUI-Programmer

Top Contributor
OK, der Fehler lag bei der Person vor der Tastatur!

Hab es nun hinbekommen mit 9 000 000 Einträgen (count). Aber mal was anderes:
1. Warum muss man nach jeden Durchlauf die HashMap.dat wieder löschen, da ansonsten diese Exception hier fliegt:
Java:
Creating map: 43ms
Adding key: 0
Adding key: 1000000
Adding key: 2000000
Adding key: 3000000
Adding key: 4000000
Adding key: 5000000
Adding key: 6000000
Adding key: 7000000
Adding key: 8000000
Filling map takes 10701ms
Start writing...
done writing.
File has size: 216000016
Writing takes 811 ms
Write-Speed: 266.3378742293465 mb/sec
Start reading + filling map...
map has size: 9000000
Exception in thread "Thread-4" java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Unknown Source)
	at java.nio.HeapByteBuffer.getLong(Unknown Source)
	at Java7FileAioTest.readSet(Java7FileAioTest.java:244)
	at Java7FileAioTest.access$1(Java7FileAioTest.java:239)
	at Java7FileAioTest$2.completed(Java7FileAioTest.java:51)
	at Java7FileAioTest$2.completed(Java7FileAioTest.java:1)
	at sun.nio.ch.Invoker.invokeUnchecked(Unknown Source)
	at sun.nio.ch.Invoker.invokeUnchecked(Unknown Source)
	at sun.nio.ch.WindowsAsynchronousFileChannelImpl$ReadTask.completed(Unknown Source)
	at sun.nio.ch.Iocp$EventHandlerTask.run(Unknown Source)
	at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

2. Warum liegt bei mir die beste Schreibgeschwindigkeit um die 208 Mb/s bei etwa 7 000 000 Einträgen? Weniger und mehr Einträge geben eine schlechtere. Inwiefern hängt das mit den Cache zusammen?

3. Wow!!! Eine Schreibgeschwindigkeit von 208 Mb/s!!! CrystelDiskMark und normales Kopieren mit den Windows-Explorer erreichen in etwa 150 Mb/s!!!
 
T

tuxedo

Gast
1. Warum muss man nach jeden Durchlauf die HashMap.dat wieder löschen, da ansonsten diese Exception hier fliegt:

Wirf doch mal zur Abwechslung einen Blick in den Code...

Aber gut, weil ich so guter Dinge bin verrat ich's dir: Beim zweiten Start werden die Daten einfach angehängt, aber das programm geht davon aus dass dem nicht so ist. Ergo passt die Implementierung nicht mehr zur Datei. Deshalb der Fehler. Ich war bis dato einfach zu faul das zu ändern...

2. Warum liegt bei mir die beste Schreibgeschwindigkeit um die 208 Mb/s bei etwa 7 000 000 Einträgen? Weniger und mehr Einträge geben eine schlechtere. Inwiefern hängt das mit den Cache zusammen?

Kann ich dir nicht sagen. Hab Windows nicht implementiert. Linux übrigens auch nicht ;-)
Was hälst du davon wenn du versuchst es raus zu finden?

3. Wow!!! Eine Schreibgeschwindigkeit von 208 Mb/s!!! CrystelDiskMark und normales Kopieren mit den Windows-Explorer erreichen in etwa 150 Mb/s!!!

Du kannst auch Äpfel mit Birnen vergleichen: "Wow, Äpfel sind viel runder als Birnen."

Mein Test schreibt 1Mio Einträge á 12bytes pro Schreibaktion. macht rund 1,2MB Blockgröße. Evtl. benutzt Windows und dein Benchmark eine andere Blockgröße?
Und wie hier schon erwähnt wurde: Je mehr man kopiert (insgesamt) desto eher stößt man an die Grenze des Caches. Hat man die Grenze erreicht, bricht die Geschwindigkeit ein. Mit 9Mio Einträgen in der Map bist du bei nur 108MB. Hier wurde aber von Cache-Grenzen bei 300MB berichtet... Womit wir wieder beim Thema Äpfel und Birnen wären..

Und um's nochmal klarzustellen
:

Dieser Test sollte nur zeigen dass Java überhaupt solch einen "hohen" Durchsatz (mit Hilfe von AIO) schafft. Das ist kein Festplattenbenchmark oder ähnliches....

- Alex
 
Zuletzt bearbeitet von einem Moderator:

GUI-Programmer

Top Contributor
Beim zweiten Start werden die Daten einfach angehängt, aber das programm geht davon aus dass dem nicht so ist.

Also einfach vorher das FileSystem überprüfen ob die Datei bereits existerst und wenn ja, dann löschen. Oder gibts einen besseren Vorschlag, sodass die Datei nicht gelöscht und erstellt werden muss?

Mein Test schreibt 1Mio Einträge á 12bytes pro Schreibaktion. macht rund 1,2MB Blockgröße. Evtl. benutzt Windows und dein Benchmark eine andere Blockgröße?

OK, dann weiß ich bescheid. Werd das ganze mal nochmals auf ganz unterschiedlichen Systemen testen:
- 5 Jahre alter PC mit Windows XP
- Ubuntu 11.10 in meiner VirtualBox
- Netbook Asus Eee PC R105 mit Intel Atom, 2Gb RAM und Windows 7 Starter
Melde dann irgwann das Ergebnis.
 
T

tuxedo

Gast
Und was will uns das Ergebnis dann sagen? Dass es auf furchtbar langsamen/alten Maschinen langsamer geht und auf super schnellen ggf. schneller? Das wissen wir mittlerweile.

Interessant wird's erst, wenn du bei gleichen Vorrauseetzungen und Parametrisierung mit einer anderen Implementierung auf der gleichen Maschine mehr hin bekommst wie mit AIO...
 

GUI-Programmer

Top Contributor
Und was will uns das Ergebnis dann sagen? Dass es auf furchtbar langsamen/alten Maschinen langsamer geht und auf super schnellen ggf. schneller? Das wissen wir mittlerweile.

Interessant wird's erst, wenn du bei gleichen Vorrauseetzungen und Parametrisierung mit einer anderen Implementierung auf der gleichen Maschine mehr hin bekommst wie mit AIO...

OK, du hast ja eigentlich Recht. Das mit den unterschiedlichen Systemen ist wahrscheinlich nur für mich interessant. Und *mehr hin bekommen* werde ich wahrscheinlich vorerst nicht, aber interessant wärs schon.
 
T

tuxedo

Gast
CompletionHandler sind AFAIK neu seit Java7. Für den Rest gibt's tonnenweise Doku im Netz, da schon seit Java5 (oder früher?) verfügbar. Schau ma besten mal in die Java Insel...
Wie CompletionHandler funktionieren zeigt ja mein Sample. Mir fällt jetzt spontan auch nicht ein was es dazu noch mehr zu erklären gäbe (was nicht schon im JavaDoc steht)?! Ist ja nicht wirklich "kompliziert", man muss nur anders denken... Von Java Seite wirft man das ganze nur einmal an und übergibt einen CompletionHandler. Der wird dann von <irgendwo aus der JVM> gerufen wenn die losgetretene Aktion fertig ist. Der Trick ist, mit einem CompletionHandler die nächste Aktion auszulösen und erneut einen CompletionHandler zu übergeben. Damit geht das Spiel von vorne los. Und das eben so lang, bis man entscheidet "so, genug jetzt, keine weitere Aktion und somit auch kein CompletionHandler mehr".

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
VfL_Freak JDK installieren Problem mit Erstellungspfad nach Wechsel von Java7 auf Java8 Allgemeine Java-Themen 1
H "File too large" - genauere IOException-Behandlung Allgemeine Java-Themen 5
H Sicherer File Tresor Allgemeine Java-Themen 13
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
D Read JSON File Problem Allgemeine Java-Themen 9
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
N File Path mit Variablen angeben Allgemeine Java-Themen 1
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
F jar File ausführen Allgemeine Java-Themen 14
M File Binary Representation Allgemeine Java-Themen 1
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
T Jar File zu exe... Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
F Input/Output FileNotFoundException, obwohl File existiert Allgemeine Java-Themen 5
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
A File lesen Codierung Charset Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
I TrueZip add file to archive Allgemeine Java-Themen 10
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
J ftp - delete file ohne appache Allgemeine Java-Themen 8
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
C Authentifizierung mit java.nio.file? Allgemeine Java-Themen 5
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
Cromewell JavaFX FXML-File lädt unter Ubuntu nicht Allgemeine Java-Themen 7
D Java Anwendung mit dll File Allgemeine Java-Themen 5
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
B Objekte anhand von Properties file Allgemeine Java-Themen 41
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
H Security Manager (IIOException: Can't read input file!) Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
Thallius Custom File Chooser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
M pdf File bzw. ausgefüllte pdf Formulare drucken Allgemeine Java-Themen 2
S Input/Output File Not Found FileReader Allgemeine Java-Themen 6
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
P Java Dynamic Web Project -> config File Allgemeine Java-Themen 1
S runnable jar file in Verbindung mit itext Allgemeine Java-Themen 3
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
O Freies Tool zum Jar-File obfuscaten gesucht! Allgemeine Java-Themen 5
F File.listFiles ohne .sort Allgemeine Java-Themen 6
B XML File JAXB Allgemeine Java-Themen 0
S Platzverbrauch, File oder String Allgemeine Java-Themen 14
J Runnable jar-File: Fehlermeldung Allgemeine Java-Themen 2
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
P java.nio.file unter Java 6 verwenden Allgemeine Java-Themen 4
A TXT File einlesen unterschiedliche Zeilenlänge Allgemeine Java-Themen 9
B Finde letztes veränderte File Allgemeine Java-Themen 4
E Zip-File entpacken: unterschiedlicher Zeitaufwand bei unterschiedlicher Puffergröße Allgemeine Java-Themen 2
Guybrush Threepwood File.canWrite() und UAC Allgemeine Java-Themen 7
N Input/Output Mit Windows 7 erzeugtes zip-File in Java 7 öffnen Allgemeine Java-Themen 5
B Garbage Collection Logfile: Binary File Allgemeine Java-Themen 2
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
V C-Header Datei aus .java File herstellen Allgemeine Java-Themen 10
D File mit Inhalt kopieren und dieses File dann neu erstellen ? Allgemeine Java-Themen 4
T @NotBlank verwendet nicht message aus .property-File Allgemeine Java-Themen 4
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
P Aus einem File Zeilen auslesen. Allgemeine Java-Themen 15
V ProcessBuilder exe file Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben