DOMANDA Peso in Byte di un Oggetto

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
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
1,006
440
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

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
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,734
2,512
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

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
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
4,447
1,507
Hardware Utente
CPU
AMD Ryzen 7 2700X | INTEL i5-6600k | INTEL i5-4460... altri
Dissipatore
wraith MAX | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus Prime Z270P | 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 4G | KFA2 GTX 970 4G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | Acer 24" FHD | Benq 19" FHD
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
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
"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
4,447
1,507
Hardware Utente
CPU
AMD Ryzen 7 2700X | INTEL i5-6600k | INTEL i5-4460... altri
Dissipatore
wraith MAX | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus Prime Z270P | 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 4G | KFA2 GTX 970 4G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | Acer 24" FHD | Benq 19" FHD
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
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
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
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..
 

rctimelines

Utente Èlite
4,447
1,507
Hardware Utente
CPU
AMD Ryzen 7 2700X | INTEL i5-6600k | INTEL i5-4460... altri
Dissipatore
wraith MAX | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus Prime Z270P | 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 4G | KFA2 GTX 970 4G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | Acer 24" FHD | Benq 19" FHD
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

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
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
4,447
1,507
Hardware Utente
CPU
AMD Ryzen 7 2700X | INTEL i5-6600k | INTEL i5-4460... altri
Dissipatore
wraith MAX | Arctic Freezer 11LP | stock
Scheda Madre
Asrock Fatal1ty 4K | Asus Prime Z270P | 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 4G | KFA2 GTX 970 4G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | Acer 24" FHD | Benq 19" FHD
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