Se scrivo questo in Java:Sono necessari 3 byte in Java? quando: String s = "abc"; Java
String s = "abc";
Vuol s occupano solo 3 byte nella memoria?
Se vero, come JVM trova la fine dell'oggetto String?
Questo richiede più byte in memoria?
Se scrivo questo in Java:Sono necessari 3 byte in Java? quando: String s = "abc"; Java
String s = "abc";
Vuol s occupano solo 3 byte nella memoria?
Se vero, come JVM trova la fine dell'oggetto String?
Questo richiede più byte in memoria?
Ci vuole più di 3 byte, continuate a leggere per una spiegazione completa da this page
Per ragioni che esploreremo in basso, l'utilizzo della memoria minima di una stringa Java (nel Hotspot Java 6 VM) è generalmente come segue:
Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45)/8)
o, per dirla in un altro modo:
- moltiplicare il numero di Chara circoli della Stringa per due;
- aggiungi 38;
- se il risultato non è un multiplo di 8, arrotondato al multiplo successivo di 8;
- il risultato è in genere il numero minimo di byte occupati nello heap dalla stringa.
This page dallo stesso sito Web coordinate anche i modi in cui è possibile risparmiare memoria utilizzando classi diverse di String
aggiungi 38? o aggiungi 45? – Al2O3
Aggiungi 38. Il 45 deve arrotondare per eccesso anziché per difetto. –
String Minimo utilizzo della memoria (byte) = 8 * (int) ((((num di chars) * 2) + 45)/8)
in teoria potrebbe essere inferiore a quello ... se si prendono in considerazione le stringhe che condividono i backing array. –
Questo è qualcos'altro, OP sta chiedendo informazioni sull'utilizzo della memoria e una singola stringa. – awm
Risposta breve: no, non da un punto lungo. Le stringhe JVM sono famose per essere piuttosto pesanti; l'oggetto contiene non solo un puntatore all'array di caratteri ma anche la sua lunghezza. E la memoria interna utilizza i codepoint UTF-16, quindi la tua domanda avrebbe potuto essere "ci vogliono 6 byte?" :-)
Un riferimento tecnico alla JVM fornirà la dimensione esatta degli oggetti stringa. È inoltre possibile trovare alcuni post del blog interessanti such as this one e articoli tecnici.
C'è molto di più nella domanda delle dimensioni esatte degli oggetti stringa. Possiamo entrare nella compressione di puntatori di oggetti, internamento di stringhe, ecc. C'è anche il fatto che, dal momento che le stringhe sono immutabili, spesso abbiamo la condivisione della memoria delle stringhe, come accade quando chiamate substring
per esempio.
Tuttavia, ciò che è sempre vero è: è più di 3 byte.
Leggere l'origine per la classe 'String'. – SLaks
Se si legge l'origine per la classe String, si vedrà che memorizza la lunghezza che è il modo in cui conosce la lunghezza della stringa. BTW "abc" utilizza circa 48 byte di memoria. –