2009-12-01 7 views
6

Supponiamo di avere una classe Java che ha un valore di codice di 100 KB contenente le variabili NO, ma solo 20 byte di attributi.Qual è l'impronta di memoria di un oggetto Java intensivo del metodo?

Istanzio 1000 oggetti da questa classe.

Ho consumato 100.000 K di memoria? O solo 100K + (20bytes * 1000)? O qualcos'altro del tutto?

+1

è possibile eseguirlo e controllare il task manager/o superiore se si è su linux .... – Dani

risposta

10

Il footprint di memoria per il caricamento della classe stessa corrisponderà approssimativamente alla dimensione del codice, ma il codice non verrà duplicato per ogni istanza della classe. Un'istanza richiederà solo la stessa quantità di memoria degli attributi di istanza + un certo overhead per la gestione dell'istanza dell'oggetto stessa.

0

Avrai istanziato solo la parte 'variabile' degli oggetti, quindi solo gli attributi (e suppongo alcuni byte in eccesso qui e là). La tua ultima ipotesi è quella corretta.

2

Ecco una guida generale per determinare l'utilizzo della memoria di oggetti in Java: http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

Ho il sospetto che l'utilizzo della memoria sostenute a partire dal definizioni dei metodi sarà un importo fisso, (possibilmente mettere in spazio PermGen quando la classe è caricato) piuttosto che proporzionale al numero di istanze.

0

Prova ad eseguire il collegamento con jvisualvm (nel JDK) e dicci cosa vedi.

Problemi correlati