Ansicht umschalten
Avatar von Onkel Wanja
  • Onkel Wanja

mehr als 1000 Beiträge seit 24.06.2000

Re: Ehrlich?

gawag schrieb am 24.09.2017 03:56:

Ich habe nichts gegen die eine oder die andere Sprache, nur mal als Denkanstoß: Bei C/C++ optimierst du immer auf einem existierenden Prozessor. Wenn du nicht auf deinem Zielsystem bist (weil die CPU zur Compilezeit noch nicht existiert), kann Bytecode zum Beispiel schneller sein.

Viele Optimierungen sind nicht Architekturspezifisch. Viele davon sind in C/C++ möglich und in Java nicht.

Das wäre zum Beispiel?

Z.B. Cache-Freundlichkeit. Also irgendwelche Daten im Speicher direkt hintereinander anordnen zu können. In Java geht das nur sehr bedingt und nicht mit beliebigen Objekttypen.

Für sows nimmt man ein Array und wenn man an der Stelle wirklich ein Geschwindigkeitsproblem hat, gibt es Taktiken :

https://mechanical-sympathy.blogspot.de/2012/10/compact-off-heap-structurestuples-in.html
Das Pattern kann man hier in der Klasse "DirectMemoryTrade" sehen. Statt "unsafe" zu nutzen, sollte man aber besser auf ein Array zugreifen.

Und für das Gegenteil, des "False sharing" gibt es ebenso eine Lösung: Padding geht auch in Java.
https://mechanical-sympathy.blogspot.de/2011/07/false-sharing.html

Oder das Behandeln von Typen als andere Typen durch Casten von Pointern. Je nach dem was gemacht werden soll, kann eine Menge von 8-Bit Integern schneller als eine Menge von 32-Bit oder 64-Bit Integer behandelt werden.

Die Klasse ByteBuffer ermöglicht ähnliches.
und den Umgekehrten Weg geht man normalerweise mit Shift-Operationen.
Typcasts sind in jeder Sprache ein konstanter Schmerz im Arsch.

Oder Speichermanagement. Durch spezielleres/gezielteres Speichermanagement kann viel rausgeholt werden.

Wenn man das wirklich braucht, kann man sich auch in Java eine Off-heap-Struktur bauen, in der Regel über einen "direct byte buffer".

Oder atomare Variablen. In Java wird glaub ich immer irgendwie mit Mutexen gearbeitet aber es gibt auch atomare Operationen und Lock-Free Programming. Beides in Java glaub ich nicht verfügbar.

Völlig veraltete Information.
https://www.youtube.com/watch?v=7HBEXs48qmo

Oder unions. Das sind praktisch mehrere Variablen die denselben Speicher belegen.

Das klingt für mich nach syntaktischem Zucker für Arrays und/oder Bitshifting/masking.

Gruß,
-Wanja-

Bewerten
- +
Ansicht umschalten