Verwendung von byte

Status
Nicht offen für weitere Antworten.

Wolfgang Lenhard

Bekanntes Mitglied
Hi,
zur Repräsentation von kleinen Zahlen, also z. B. einstellige Werte wird auch in den Beispielen von Sun praktisch nie "byte" verwendet, sondern praktisch ausschließlich "int". Woran liegt das? Könnte man da nicht unheimlich viele Ressourcen sparen, v. a. wenn große Mengen an Daten vorkommen? Oder spricht etwas gegen die Verwendung von byte?

Viele Grüße,
Wolfgang Lenhard
 
S

SlaterB

Gast
Speicherplatz spielt keine Rolle, Handling ist viel wichtiger,

wer will schon
byte x = (byte) 3;
byte y = (byte) 4;
byte z = (byte) x+y;
schreiben, wenn auch
int x = 3;
int y = 4;
int z = x+y;
geht,

die Grundeinheit von Java ist int,
über byte kann man bei Bedarf nachdenken
 

didjitalist

Bekanntes Mitglied
im zweifel muss man eh davon ausgehen, dass die jeweiligen VM intern ausschließlich mit einem ganzzahligen datentyp arbeitet.
 

Ark

Top Contributor
Der Umgang mit byte ist auch seitens der VM relativ aufwendig (wenn ich das richtig in Erinnerung habe). Außerdem: Wo ist denn eine solche Stelle, wo man doch hätte byte verwenden können, aber int zum Einsatz kommt? Man muss bedenken, dass meistens etwas auf 1 oder n ausgelegt ist, und n ist eben ein int (so z.B. der Index für Arrays). Man hätte sogar long nehmen können, aber bereits int ist so groß, dass es praktisch nie erschöpft wird.

Ark
 

Wolfgang Lenhard

Bekanntes Mitglied
Ok, also dann allokiert die VM letzendlich mit großer Wahrscheinlichkeit für ein byte genauso viel Speicher wie für ein int, nur mit dem Nachteil, dass das Handling schwieriger ist? Kann man das so sagen? Vom Typ her sollte ein int ja 4 mal so viel Speicher benötigen.

Ein Beispiel, wo Sun ein int verwendet, obwohl ein byte dicke reichen würde:
Code:
int n = JOptionPane.showOptionDialog(frame,
    "Would you like some green eggs to go "
    + "with that ham?",
    "A Silly Question",
    JOptionPane.YES_NO_CANCEL_OPTION,
    JOptionPane.QUESTION_MESSAGE,
    null,
    options,
    options[2])
( How to Make Dialogs (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components) )

Offen gesagt ist mir byte praktisch noch nie über den Weg gelaufen, selbst in der GUI nicht. Beispiel: Offen gesagt benötigt wohl kaum jemand 2^32 Panels auf einer JTabbedPane, da wären die 128 bereits überdimensioniert, die ein byte ermöglicht.

Die Frage stellt sich mir aber in erster Linie, wenn es darum geht, große Datenmengen im Speicher zu behalten. Vielleicht mache ich mal ein kleines Testprogramm ... (werde berichten)
 

Wolfgang Lenhard

Bekanntes Mitglied
Ok, ein kleiner, völlig unvollkommener Benchmark. Nichts desto trotz:

Code:
public class MemTest1 {

	byte[] byteArray = new byte[5000000];
	
	public MemTest1(){
		for(int i = 0; i < byteArray.length; i++)
			byteArray[i] = 127;
		System.out.println("Used memory: " + getUsedMemory());
	}
	
	public static void main(String[] args){
		new MemTest();
	}
	   private static long getUsedMemory() {
		      System.gc();
		      long totalMemory = Runtime.getRuntime().totalMemory();
		      System.gc();
		      long freeMemory = Runtime.getRuntime().freeMemory();
		      long usedMemory = totalMemory - freeMemory;
		      return usedMemory;
		   }

}

Ergebnis:
Used memory: 621328


Nun mit int ...
Code:
public class MemTest2 {

	int[] intArray = new int[5000000];
	
	public MemTest2(){
		for(int i = 0; i < intArray.length; i++)
			intArray[i] = 127;
		System.out.println("Used memory: " + getUsedMemory());
	}
	
	public static void main(String[] args){
		new MemTest();
	}
	   private static long getUsedMemory() {
		      System.gc();
		      long totalMemory = Runtime.getRuntime().totalMemory();
		      System.gc();
		      long freeMemory = Runtime.getRuntime().freeMemory();
		      long usedMemory = totalMemory - freeMemory;
		      return usedMemory;
		   }

}

Ergebnis:
Used memory: 2186000


Das Ergebnis ist also eindeutig (auch wenn ich mir der Unvollkommenheit des Ansatzes bewusst bin): Bei der Verwendung eines int-Array wird ca. 3 1/2 so viel Speicher reserviert (VM: 1.6.0_12, Vista). Es lohnt sich also tatsächlich bei großen Datenmengen.
 
S

Spacerat

Gast
Natürlich spricht gegen die Verwendung von Byte eigentlich nur das was SlaterB schon gesagt hat (stetes rückcasten von "int"). "int" wird schon jahrelang (und das nicht nur in Java) sozusagen als Standardtyp dazu verwendet, um triviale Zahlen (ohne Verwendung von L, D oder F) zu definieren. Sonst würde folgendes
Code:
double d = 0;
float f = 0;
byte b = 127; // 128 funzt nicht...
int i = 12345;
short s = -32768;
long l = 1234567;
nämlich so aussehen
Code:
double d = 0.0D;
float f = 0.0F;
byte b = 127B; // das geht nicht...
short s = -32768S; // das geht auch nicht...
int i = 12345I; // ... und das schon gar nicht...
long l = 1234567L;
Das ganze heisst glaub' ich Autocasting. Man kann Werte im Bereich des Zieldatentyps einfach mit einem Standarddatentyp (i.d.R. "int") initialisieren. Wäre dem nicht so, müsste man für jeden Typ das Postfix (B, S, I, L, D oder F) schreiben. Warum man dafür gerade "int" verwendet, beruht auf der Tatsache, das der Adressbus eines 16-Bit-Prozessors meistens 32 Bit breit war (M68k, I286 - I468 ).
 
Zuletzt bearbeitet von einem Moderator:

ice-breaker

Top Contributor
Wie schon erwähnt, aber was wie ich persönlich finde nicht klar genug rausgekommen ist, dass du natürlich byte verwenden kannst, es im Arbeitsspeicher auch weniger Platz belegen wird.
Sobald du aber mathem. Operationen ausführst, wird dein Byte erst ein int gecastet die Berechnung druchgeführt und im nächsten Schritt wieder zu einem zurückgecastet, Operationen mit Bytes sind deshalb eben sehr rechenintensiv.
 

Wolfgang Lenhard

Bekanntes Mitglied
Ok, vielen Dank für die Antworten. Ich sehe jetzt klarer: int ist der Standardtyp und sollte generell verwendet werden, außer es sprechen gewichtige Gründe für byte. Einer ist, wenn zahlreiche Daten im Speicher gehalten werden müssen und der Speicher begrenzt ist. Mathematische Operationen laufen aber effektiver mit int.
 

Ebenius

Top Contributor
wer will schon
byte x = (byte) 3;
byte y = (byte) 4;
byte z = (byte) x+y;
In Zeile 1 und 2 des Beispiels ist der Cast natürlich unnötig, da die Literale offensichtlich klein genug sind. In Zeile 3 muss eine Klammer um den gesamten Additionsterm.

Das ganze heisst glaub' ich Autocasting.
Es heißt "Conversion", in dem Fall "Widening Primitive Conversion", siehe 5.1.2 Widening Primitive Conversion. Cast's gibt's nur bei Objekt-Derivaten.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
D Verwendung von Selenium Allgemeine Java-Themen 2
P ClassCastException bei Verwendung eines Interfaces Allgemeine Java-Themen 7
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
M Verwendung der Cipher von gnu crypto (Serpent) Allgemeine Java-Themen 3
B Verwendung von Packages im Java Code Allgemeine Java-Themen 10
P Richtige Verwendung eines Timers Allgemeine Java-Themen 8
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Problem bei der Verwendung von AES Allgemeine Java-Themen 2
J Port verwendung Allgemeine Java-Themen 13
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
X Wie 'teuer' ist die Verwendung des Stack Trace ? Allgemeine Java-Themen 8
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
L Verwendung? Allgemeine Java-Themen 2
D Fehlerhafte Thread Verwendung beim arbeiten mit Sockets Allgemeine Java-Themen 6
N allg. Frage zur Verwendung von this Allgemeine Java-Themen 3
G Verwendung von DataInputStream und URL Allgemeine Java-Themen 2
C Seltsame Konstanten (und Verwendung) Allgemeine Java-Themen 15
X Exception bei Verwendung von systray4j Allgemeine Java-Themen 5
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Thallius unsigned byte Allgemeine Java-Themen 18
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
R Byte Array Zeichensuche Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
O Byte-Array zu String Allgemeine Java-Themen 7
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
E Byte zu String & umgekehrt Allgemeine Java-Themen 3
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
E int in byte Allgemeine Java-Themen 6
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
G byte ? : Allgemeine Java-Themen 7
E Byte-Array to String: Zeichenkaputt Allgemeine Java-Themen 11
R In einem Byte-Array nach einer gewissen Zahlenfolge suchen Allgemeine Java-Themen 7
hdi Speicherbelegung byte, short, int Allgemeine Java-Themen 8
J byte - hex - byte.. casten Allgemeine Java-Themen 8
R byte[] to String Konvertieren Allgemeine Java-Themen 14
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
M byte array splitten Allgemeine Java-Themen 3
J Hex-String zu byte transformieren Allgemeine Java-Themen 7
T Zu doof für byte-Umrechnung ... Allgemeine Java-Themen 3
W CRC32 aus byte array Allgemeine Java-Themen 5
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
L byte -> byte[1] -> byte Allgemeine Java-Themen 2
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
Kr0e Synchronisieren: boolean,byte,char ? Allgemeine Java-Themen 2
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Semox Byte-Manipulation eines Bildes Allgemeine Java-Themen 7
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
C int zu byte cast - verständnis Allgemeine Java-Themen 3
R int to byte[] Array Allgemeine Java-Themen 4
MQue byte[] Array to Integer Allgemeine Java-Themen 4
MQue Byte to Int convertieren Allgemeine Java-Themen 2
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
G zu lange Byte code dateien Allgemeine Java-Themen 6
G String in byte- Array Allgemeine Java-Themen 3
E Byte [] nach hex, dann nach dec Allgemeine Java-Themen 2
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
G 2 x byte zusammenkopieren Allgemeine Java-Themen 7
G byte nach int Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
W Konflikt byte->int, in.read->arraycopy Allgemeine Java-Themen 7
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
F byte in hex-String oder: Wer hat in Mathe aufgepasst Allgemeine Java-Themen 3
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
J NumberFormatException bei String->byte[] Allgemeine Java-Themen 12
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
T Object -> byte[] Allgemeine Java-Themen 5
G Byte[] zeichenweise lesen Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
B int -> byte Allgemeine Java-Themen 2
G file --> byte[] Allgemeine Java-Themen 7
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
I String -> byte[] -> String Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
MQue int in byte Allgemeine Java-Themen 18
G Maximalgröße von byte[] buffer Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben