Perché Java utilizza così tanta memoria reale?

1

Java è costantemente elencato come utilizzando 700 MB di memoria reale. Questo è un bel pezzo di cambiamento sul mio iMac da 4 GB. Non so nemmeno che sto usando un'applicazione Java, mai.

Qualche idea?

    
posta DrFloyd5 17.11.2012 - 04:49
fonte

3 risposte

4

Questo è dovuto alla natura della tecnologia di raccolta dei rifiuti usata in Java. La liberazione della memoria in tali sistemi viene ritardata fino a quando non viene raggiunta una soglia, oppure quando la memoria esaurita si verifica o passa del tempo. Probabilmente non sta usando tutti quei 700MB tutto il tempo (potrebbe anche essere solo 50 MB), ma Activity Monitor non ha modo di guardare all'interno della macchina virtuale Java e dire quanto viene effettivamente utilizzato.

Normalmente, se non ci sono bug o perdite ( sì, i sistemi GC possono perdere anche ), Java dovrebbe abbandonare la memoria non utilizzata ogni volta che il sistema si esaurisce, quindi non c'è motivo di preoccuparsi adesso. Detto questo, se non hai bisogno del programma, non ti farà male disinstallare ciò che sta avviando.

    
risposta data 17.11.2012 - 14:03
fonte
2

Apri il monitor delle attività, fai clic sul processo Java e premi Comando-I.

Da lì potresti essere in grado di capire da dove proviene il processo in 2 modi

1) Guarda i file e le porte aperti I file aperti dovrebbero dare un indizio su dove si trova il processo o almeno su cosa sta leggendo + scrivendo.

2) Processo genitore È possibile fare clic su questo per aprire le informazioni sul processo principale e tracciare la catena principale per vedere cosa ha avviato il processo. Se è lanciato, potresti essere in grado di guardare la tua configurazione di launchd per vedere dove c'è una chiamata java lì dentro.

    
risposta data 17.11.2012 - 05:57
fonte
2

La spiegazione arcaica :

Le applicazioni Java richiedono una macchina virtuale da eseguire perché non possono essere di solito non sono compilate direttamente nel linguaggio macchina (codice nativo) per molti processori, invece di solito Java è conforme a bytecode . Java è anche un linguaggio di programmazione orientato agli oggetti di alto livello (OOP), il che significa che mentre il codice dell'applicazione è molto più semplice da mantenere, oggetti che sono istanziati useranno molta più memoria.

La spiegazione più moderna :

Tuttavia, molti sostengono che il problema di solito è maggiore a causa delle strutture e dell'architettura dei dati del programma Java, piuttosto che del bytecode. E io tendo ad essere d'accordo.

Ci sono una serie di altri motivi per cui le app Java utilizzano così tante risorse di sistema (come la RAM). Ad esempio, la maggior parte delle applicazioni moderne utilizza il set di caratteri UTF-8 , che richiede più memoria per carattere, per le stringhe (di solito testo) in quanto può supportare tanti simboli di altre lingue. E dal momento che così tante applicazioni si rivolgono a un enorme mercato internazionale, sono in genere obbligati a usarlo.

Detto questo, Java è probabilmente il linguaggio di programmazione più popolare al momento. Molte applicazioni eseguite dal tuo computer sono scritte in Java. Ecco perché.

    
risposta data 17.11.2012 - 07:40
fonte

Leggi altre domande sui tag