byte, short oder doch int?

Fohnbit

Top Contributor
Hallo,

ich muss ca. 200.000 Variablen im Speicher halten. Das ganze läuft auf einen Rasperry PI 2.

Macht es Sinn, die 200.000 als byte oder short zu speichern (um Speicher zu sparen) oder kann ich gleich alles als int deklarieren?

Mir gehts um den Speicherverbrauch.
Die Werte sind immer von 0-255

Ich muss bei Schleifen und Zuweisungen sonst immer (byte) angeben.

Danke!
 
Kommt drauf an, wo die Variablen liegen.
Gehts um byte[] vs int[], dürfte byte[] Speichereffizienter sein.
Gehts nur um byte vs int, dürfte der Speicherverbrauch gleich sein.

Beides aber ohne Gewähr, da spielt die JVM mit rein, kann je nach Implementierung auch völlig anders sein...
 
Hallo,

danke für den Link.

Wie? Es wird immer wegen der Geschwindigkeit mit int gerechnet?? Steht in dem Link.
4. Post

Genaugenommen wird in einer Klasse der Wert gehalten und diese sind in einer TreeMap.

Beispiel wo ich casten muss:
Java:
for (byte i = (byte) (app + 1); i <= appHeader.size(); i++) {

Auch die short muss ich öfters mal casten:
Java:
    public void onSw(boolean value) {
        if (value) {
            apps.setManualValue((short) 255);
        } else {
            apps.setManualValue((short) 0);
        }
    }

Daher die Frage, ob ich gleich einheitlich int nehmen soll ... aber möchte nicht unnötig Speicher verschwenden, da die Datenpunkte eventuell mal bis zu 1.000.000 betragen könnten.

byte wäre nur 1/4 von int
short wäre ein 1/2 von int

Aber wenn intern sowieso immer mit int gerechnet wird??
 
Aus diesem Grund werden embedded Systeme in der Regel in C/C++ programmiert. Diese Sprache ermöglicht es seinen Speicher genau selber zu bestimmen. Java ist für so etwas leider recht schlecht geeignet und man muss mit vielen Krücken leben wenn man es denn trotzdem unbedingt umsetzen will.

Gruß

Claus
 
Gerade gefunden:
https://de.wikibooks.org/wiki/Das_Performance-Handbuch:_Implementierung_mit_Java

Zugriffsgeschwindigkeit auf Typen
Die JVM ist ein 32 Bit System. Aus diesem Grund sind Zugriffe auf Variablen mit einer Breite von 32 Bit am schnellsten. Somit ist der Zugriff auf Referenzen und int Variablen besonders schnell. float Variablen, sind Fliesskommazahlen und können nicht ganz so schnell verarbeitet werden. Die primitiven Datentypen unterscheidet man auch in Datentypen erster Klasse und Datentypen zweiter Klasse. Datentypen erster Klasse sind int, long, float und double. Für diese Datentypen liegt ein kompletter Satz an arithmetischen Funktionen vor, so dass Berechnung relativ zügig vonstattengehen. Die Datentypen zweiter Klasse boolean, byte, short und char hingegen haben keine arithmetische Funktionen. Für Berechnungen werden diese innerhalb der JVM in den int Typ gecastet und nach Abschluss zurück umgewandelt. Dies führt zu erheblichen Zeitverzögerungen. (siehe auch Variablen / Datentypen und Operatoren).
 

Zurück
Oben