DOMANDA Peso in Byte di un Oggetto

Salve ricordo in c++ che per sapere il peso in byte di un tipo come int, String, double basta usare il metodo sizeof(tipo).
Vorrei sapere se anche in Java esiste una cosa del genere ed eventualmente se si potesse fare anche per gli oggetti.
Per esempio per calcolare il peso in byte di un oggetto "Poligono".
 

BAT00cent

Utente Attivo
969
408
Hardware Utente
Non c'è e non ce n'è bisogno. Per i tipi primitivi il numero di byte è predeterminato su qualunque sistema:
boolean --> l'unico tipo primitivo per cui non è specificato, in teoria basta un bit ma ovviamente ciò non è possibile, dipende da come la JVM è stata progettata per rappresentarlo (potrebbe anche usare 64 bit)
int, float --> 32 bit (4 byte)
long, double --> 64 bit (8 byte)
short, char --> 16 bit (2 byte)
byte--> 8 bit (1 byte)
Per il resto si possono solo fare delle stime:
sui sistemi operativi a 32 bit un riferimento occupa 4 byte, mentre su quelli a 64 bit 8 byte;
il peso minimo di un oggetto in un sistema op. a 64 bit è di 16 byte, 8 byte nei sistemi a 32 bit;
un modo di stimare il peso di un oggetto è usare il metodo getObjectSize(oggetto) (vedi https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html) tuttavia rimane una stima, non una misura precisa in quanto un oggetto può contenere riferimenti ad altri oggetti, per cui si può stimarne solo il "peso" dei campi interni
 
  • Mi piace
Reactions: Alessandro001
Non c'è e non ce n'è bisogno. Per i tipi primitivi il numero di byte è predeterminato su qualunque sistema:
boolean --> l'unico tipo primitivo per cui non è specificato, in teoria basta un bit ma ovviamente ciò non è possibile, dipende da come la JVM è stata progettata per rappresentarlo (potrebbe anche usare 64 bit)
int, float --> 32 bit (4 byte)
long, double --> 64 bit (8 byte)
short, char --> 16 bit (2 byte)
byte--> 8 bit (1 byte)
Per il resto si possono solo fare delle stime:
sui sistemi operativi a 32 bit un riferimento occupa 4 byte, mentre su quelli a 64 bit 8 byte;
il peso minimo di un oggetto in un sistema op. a 64 bit è di 16 byte, 8 byte nei sistemi a 32 bit;
un modo di stimare il peso di un oggetto è usare il metodo getObjectSize(oggetto) (vedi https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html) tuttavia rimane una stima, non una misura precisa in quanto un oggetto può contenere riferimenti ad altri oggetti, per cui si può stimarne solo il "peso" dei campi interni
Grazie, infatti questa domanda posta dal mio professore mi è sembrata abbastanza strana.
Grazie ancora

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Andretti60

Utente Èlite
3,257
2,144
Hardware Utente
Non esiste l'equivalente di sizeof() in Java semplicemente perché 1) non serve (Java è responsabile della allocazione della memoria) e 2) perfino la dimensione dei tipi primitivi rimane a discrezione del linguaggio. Per esempio, un dato di tipo intero anche se dichiarato 32bits sarà poi rappresentato con 64bits in computer con processori a 64bits. Per dati complessi (tipo classi) è praticamente impossibile predirne la dimensione. Questo non è tipico solo di Java, ma di quasi tutti i moderni linguaggi di programmazione. Per esempio, per rendere strutture scritte in C# con programmi scritti in C si utilizza l’attributo StructLayout, e a seconda del suo valore la dimensione del dato cambia.
 
  • Mi piace
Reactions: Alessandro001
Non c'è e non ce n'è bisogno. Per i tipi primitivi il numero di byte è predeterminato su qualunque sistema:
boolean --> l'unico tipo primitivo per cui non è specificato, in teoria basta un bit ma ovviamente ciò non è possibile, dipende da come la JVM è stata progettata per rappresentarlo (potrebbe anche usare 64 bit)
int, float --> 32 bit (4 byte)
long, double --> 64 bit (8 byte)
short, char --> 16 bit (2 byte)
byte--> 8 bit (1 byte)
Per il resto si possono solo fare delle stime:
sui sistemi operativi a 32 bit un riferimento occupa 4 byte, mentre su quelli a 64 bit 8 byte;
il peso minimo di un oggetto in un sistema op. a 64 bit è di 16 byte, 8 byte nei sistemi a 32 bit;
un modo di stimare il peso di un oggetto è usare il metodo getObjectSize(oggetto) (vedi https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html) tuttavia rimane una stima, non una misura precisa in quanto un oggetto può contenere riferimenti ad altri oggetti, per cui si può stimarne solo il "peso" dei campi interni
Ciao, sto provando ad usare il metodo getObjectSize() ma mi da errore proprio sopra la chiamata del metodo.
Ho anche implementato java.lang.instrument.*;
Il codice è questo:
Java:
Libro l = new Libro();
long V = getObjectSize((Object) l);
System.out.println("Il valore è: " + V);
Anche passandogli solo "l" non va
 

rctimelines

Utente Èlite
3,660
1,124
Hardware Utente
CPU
AMD Ryzen 5 2600x | INTEL i5 6600k | INTEL i3 4170... altri
Dissipatore
stock | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus H110M | Acer Veriton
Hard Disk
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
Scheda Video
RadeonPro WX3100 4GB | Asus R9 280x 3Gb | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17' | Acer 24" FHD | Benq 19"
Sistema Operativo
Windows10-pro64/OpenSUSE-QL42.3/Manjaro-17.0.2-KDE
Ciao, sto provando ad usare il metodo getObjectSize() ma mi da errore proprio sopra la chiamata del metodo.
Ho anche implementato java.lang.instrument.*;
Il codice è questo:
Java:
Libro l = new Libro();
long V = getObjectSize((Object) l);
System.out.println("Il valore è: " + V);
Anche passandogli solo "l" non va
"ma sei de coccio" ?? ..e non girare la colpa al tuo professore!

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
"ma sei de coccio" ?? ..e non girare la colpa al tuo professore!

Inviato dal mio Nexus 5 utilizzando Tapatalk
Ciao, non ho assolutamente dato la colpa al mio prof, ti invito a rileggere il messaggio.
Non continuo a motivare il mio commento per il semplice fatto che siamo in una discussione di TH non in una pagina facebook di 50enni che augurano il buongiorno.

Sent from my SNE-LX1 using Toms Hardware Italia Forum mobile app
 

rctimelines

Utente Èlite
3,660
1,124
Hardware Utente
CPU
AMD Ryzen 5 2600x | INTEL i5 6600k | INTEL i3 4170... altri
Dissipatore
stock | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus H110M | Acer Veriton
Hard Disk
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
Scheda Video
RadeonPro WX3100 4GB | Asus R9 280x 3Gb | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17' | Acer 24" FHD | Benq 19"
Sistema Operativo
Windows10-pro64/OpenSUSE-QL42.3/Manjaro-17.0.2-KDE
Ciao, non ho assolutamente dato la colpa al mio prof, ti invito a rileggere il messaggio.
Non continuo a motivare il mio commento per il semplice fatto che siamo in una discussione di TH non in una pagina facebook di 50enni che augurano il buongiorno.

Sent from my SNE-LX1 using Toms Hardware Italia Forum mobile app
Vabbè, ma se ti è stato spiegato anche il motivo per cui non è possibile.determinare la dimensione a priori.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

rctimelines

Utente Èlite
3,660
1,124
Hardware Utente
CPU
AMD Ryzen 5 2600x | INTEL i5 6600k | INTEL i3 4170... altri
Dissipatore
stock | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus H110M | Acer Veriton
Hard Disk
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
Scheda Video
RadeonPro WX3100 4GB | Asus R9 280x 3Gb | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17' | Acer 24" FHD | Benq 19"
Sistema Operativo
Windows10-pro64/OpenSUSE-QL42.3/Manjaro-17.0.2-KDE
In verità me l'hanno detto in seguito. Comunque non penso che sia una valida argomentazione per reagire in quel modo.
Manco avessi mancato di rispetto a te..
Sei permaloso? .. take It easy!

(scusa se ti ho offeso)

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
  • Mi piace
Reactions: Alessandro001
Sei permaloso? .. take It easy!

(scusa se ti ho offeso)

Inviato dal mio Nexus 5 utilizzando Tapatalk
No, non sono permaloso è solo che non mi è sembrato adeguato il tuo commento perché poco rispettoso poi non eri nemmeno parte della discussione.
Se non ha dato fastidio al diretto interessato perché dovrebbe dare fastidio a te? Detto questo, non mi sono offeso.
Have a nice day!
 

rctimelines

Utente Èlite
3,660
1,124
Hardware Utente
CPU
AMD Ryzen 5 2600x | INTEL i5 6600k | INTEL i3 4170... altri
Dissipatore
stock | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus H110M | Acer Veriton
Hard Disk
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
Scheda Video
RadeonPro WX3100 4GB | Asus R9 280x 3Gb | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17' | Acer 24" FHD | Benq 19"
Sistema Operativo
Windows10-pro64/OpenSUSE-QL42.3/Manjaro-17.0.2-KDE
Sei in un "forum" ... è uno spazio condiviso in cui tutti gli utenti "fanno parte della discussione"!!!

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

Entra

oppure Accedi utilizzando