2012-12-17 19 views
5

Sono passato da Windows 7 (32 bit) a Windows 7 (64 bit) perché ho aggiunto 4 GB di RAM ai miei 2 GB. E ora quando sono in esecuzione Eclipse Juno EE. Nel Task Manager di Windows vedo che il processo javaw.exe sta mangiando ~ 380 Mb RAM, non l'ho visto prima, quando stavo usando il SO a 32-bit. Non ho nemmeno provato a pranzare nessun progetto. Ho scritto questo codice:Il processo javaw.exe in Windows 64 consuma più memoria?

public static void main(String[] args) { 
    Runtime runtime = Runtime.getRuntime(); 
    System.out.println(runtime.maxMemory()); 
} 

Essa mostra che per la mia JVM is allocated 1 338 507 264 bytes.

Significa che quando eseguirò i progetti, questo processo potrebbe consumare fino a 1,3 Gb di RAM?!

In futuro avrò problemi con questo?

+0

Su una macchina da 6 GB, 380 MB non è nulla di cui preoccuparsi. Non ha senso lasciare la RAM inutilizzata, dopotutto. –

risposta

6

La versione a 64 bit utilizzerà la JVM -server e ha una dimensione di heap massima predefinita più elevata. La versione Windows a 32 bit utilizza la JVM -client per impostazione predefinita e utilizza meno risorse per impostazione predefinita poiché è progettata per essere eseguita su macchine più piccole, di conseguenza tende a rallentare i programmi di lunga durata (il client JVM ha carichi più veloci per una breve esecuzione programmi come applet)

Se si imposta la dimensione heap massima, dovrebbero utilizzare circa la stessa quantità di memoria se si dispone di una versione recente di Java 6, o Java 7.

+0

Non direttamente correlato al problema dell'op - Pensavo di aver letto da qualche parte che lo stesso programma utilizza più memoria con una JVM a 64 bit (penso che fosse nell'ordine del 50% o giù di lì) ... – assylias

+1

Java 5 e Java iniziale 6 non ha utilizzato CompressedOops (riferimenti a 32 bit) e ha comportato un aumento del consumo di memoria del 50% circa.È per questo motivo che 32 GB non sono una buona dimensione dell'heap (come hai perso Compressed Oops) e hai bisogno di andare fino a 48 GB per ottenere più memoria utilizzabile. C'è ancora un aumento, ma ho il sospetto che sia più vicino al 10% e non qualcosa che probabilmente noterai. –

+0

E come posso impostare la dimensione dell'heap? –

2

Runtime.maxMemory():

Restituisce la quantità massima di memoria che la macchina virtuale Java wi ll tentativo di usare.

È un limite superiore. Ciò non significa che la JVM pre-allochi questa quantità di memoria. L'utilizzo della memoria del tuo processo aumenterà man mano che crei oggetti e li mantieni, fino alla dimensione massima dell'heap che puoi configurare.

In Windows Task Manager vedo che javaw.exe processo sta mangiando ~ 380 Mb di RAM

Ci sono molti aspetti di utilizzo della memoria: non c'è spazio per l'indirizzo, RAM virtuale, RAM fisica, ecc A seconda su quale colonna stai guardando in Task Manager, il numero che vedi potrebbe avere uno dei tanti significati diversi.

I swiched a da Windows 7 (32 bit) a Windows 7 (64 bit)

In generale, è vero che il codice a 64 bit richiede più memoria di codice a 32 bit equivalente. Per prima cosa, i puntatori sono più ampi e quindi occupano più spazio. Questo si applica alla JVM come fa con qualsiasi altro processo. La JVM, tuttavia, prende alcuni provvedimenti per ridurre l'impatto. Una di queste misure è CompressedOops.

+0

Non conosco la colonna delle streghe che sto cercando, perché vengo dall'Ucraina e ho la versione russa di Windows. Letteralmente è tradotto come "memoria". –

Problemi correlati