Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung

schnitt_tt

Mitglied
Hallo,

Da ich mir unsicher bin, ob die Verwendung von short / byte sinnvoll ist würde ich gerne das Thema etwas näher betrachten bzw "Daumen-Regeln" bekommen. Grundsätzlich finde ich es besser wenn ein Programm / Objekt weniger Resourcen benötigt. Da ich mir dadurch vom Grundsatz mehr "Performance"
verspreche. Aber zu welchen Preis bekomme ich das als Entwickler ?

Man könnte ja auch mit dem Gedanken ins Rennen gehen: "Megabyte" -> "das war gestern", "Arbeitspeicher kostet nix", "die Prozessoren werden schneller" etc ..... aber das finde ich keine gute Einstellung.


Beispiell: Objekt hat eine Variable: Speicherverbrauch bei 1.000.000 Objekten

Java:
			         Byte 	KiloByte	Megabyte		
					
byte		1	 1.000.000,00   	976,56	   0,95
short		2	 2.000.000,00   	1953,13        1,91
int  		4	 4.000.000,00   	3906,25	   3,81

Jedoch muß teilweise ein Cast programmiert werden. (was per se vermieden werden soll (Daumenregel?). bzw bei Overloading von Methoden gibts Fallstricke ( was ich so im Netz gefunden habe).

Java:
    public static void test()
    {
        short a = 1;
        short b = 2;
        short ergebniss;
        
        ergebniss = a + b;            //geht nicht
        
        ergebniss = (short)(a + b);   //geht   
    }

folgende Grundregeln hab ich mir mal überlegt:

Falls Anwendung / Objekt folgende Fällen entspricht sollte man sich Gedanken über primitive Datentypen machen:

a) Massdatenverarbeitung ( k.a. vielleicht 1.000.000 Objekte als Grundgröße)
b) Netzwerk-Anbindung
c) Verwendung einer Datenbank

wie seht Ihr das ???


Fallstricke

da fällt mir nur das mit dem "cast" ein ....

auch hier, wie seht Ihr das ?
 
Ein Cast bei primitiven Datentypen ist nur bedingt schlecht, hier bietet die JVM für jede Umwandlung einen speziellen Bytecode, welcher meistens auch an entsprechende CPU-Opcodes durchgereicht werden kann. Innerhalb von Berechnungen läuft es dann sowieso als mindestens Integer ab.

Der short bringt also nur bei der Datenhaltung Vorteile eben dem niedrigeren Speicherbedarf. Generell nutze ich short immer dann wenn ich weiß, dass ich Unmengen an Daten habe, die definitiv in einen short passen. Für normale Zwecke reicht es normalerweise immer int zu nutzen.
 
"Performance" hat mit speicher und cpu zu tun. man kann zwar mit short einiges an speicher einsparen, dafür kostet es beim casten einiges an cpu d.h. unter dem strich ist das ergebnis nutzlos. unser java lehrer hat die meinung vertreten, bei ganzzahlen immer nur int zu verwenden. daran solltest du dich auch halten.
 
Zuletzt bearbeitet:
Wie ich auch sagte, Java rechnet intern immer mit int wenn der Datatype kleiner ist (also auch bei Byte). Wenn man allerdings Speicher sparen muss ist es trotzdem sinnvoll und soviel CPU Cycles gehen bei diesen spezifischen Bytecodes nicht drauf wie bei einem normalen CHECKCAST (für Klassencasts) oder Autoboxings (was implizit ein INVOKEVIRTUAL / INVOKESPECIAL für Integer.intValue() oder Integer.valueOf() ist).
 
Gerechnet wird, wie hier schon gesagt, immer mit int.

Aber wie kürzlich auch erst in einem anderen Thread erwähnt: Ein byte und ein int belegen gleich viel Speicher. Bei Klassen wie
Java:
class ClassA {  int a; }
class ClassB {  byte b; }
werden 1000000 Objekte genau 4 MB für die ganzen 'int's benötigen, aber auch 4 MB für die ganzen 'byte's.

NUR bei Arrays wird mit den kleineren Typen wirklich Speicher gespart: ein
new int[1000000] belegt 4 MB und ein
new byte[1000000] belegt 1 MB
...
 
Gerechnet wird, wie hier schon gesagt, immer mit int.

Aber wie kürzlich auch erst in einem anderen Thread erwähnt: Ein byte und ein int belegen gleich viel Speicher. Bei Klassen wie
Java:
class ClassA {  int a; }
class ClassB {  byte b; }
werden 1000000 Objekte genau 4 MB für die ganzen 'int's benötigen, aber auch 4 MB für die ganzen 'byte's.

NUR bei Arrays wird mit den kleineren Typen wirklich Speicher gespart: ein
new int[1000000] belegt 4 MB und ein
new byte[1000000] belegt 1 MB
...

Stimmt, danke für die Ergänzung 😀 Wenn ich Unmengen an Datensätzen meine bin ich jetzt von einem Array ausgegangen, ist aber ja nicht immer so.
 
@all

*grübel ... dh solange ich Klassen-atribute habe macht shor/bye grundsätzlich keinen Sinn ... lediglich
wenn ein Array ins Spiel kommt, kann man sich darüber Gedanken machen ob man das Array mit short typisiert ... ok .. dann mal danke an alle ..
 

Neue Themen


Zurück
Oben