2016-06-20 23 views
6

Se utilizzo la classe Runtime (freememory() e totalmemory() e gc()), mi dà memoria sopra mb (cioè 1000000 byte).Come calcolare l'utilizzo della memoria del programma java?

Ma se eseguo lo stesso codice su qualsiasi compilatore online, mostrano la memoria utilizzata in kb (cioè 1000 byte). Questa è un'enorme differenza.

Ciò significa che il runtime non mostra la memoria effettiva utilizzata dal programma.

Ho bisogno di calcolare la memoria effettiva utilizzata dal programma. Come si usano questi compilatori online per calcolare la memoria utilizzata dal programma?

+0

Quale compilatore online? – Onur

+0

In generale: se è necessario comprendere il "comportamento" di prestazioni/memoria dell'applicazione, è necessario esaminare seriamente gli strumenti di profilatura. Vuoi osservare nel tempo. Scattare istantanee singole utilizzando chiamate come quelle citate nella tua domanda non può che fornirti informazioni molto limitate. – GhostCat

+0

@Onur codechef.com/ide è uno che stavo cercando per la compilazione. –

risposta

7

Prima calcolare la memoria utilizzata prima dell'esecuzione del codice, ovvero la prima riga del codice.

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory(); 

calcolare la memoria utilizzata dopo l'esecuzione di codice: -

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory(); 

allora si può fare:

long actualMemUsed=afterUsedMem-beforeUsedMem; 

vi darà memoria effettiva utilizzata dal programma.

Per un'ulteriore analisi della memoria, la soluzione migliore è uno strumento profiler come jvisualvm.

  • lo ricordo, che Runtime.getRuntime(). TotalMemory(), questa memoria è la memoria totale disponibile al vostro JVM.
  • java -Xms512m Xmx1024m, significa che la memoria totale del programma inizierà con 512 MB, che può pigramente caricato al massimo di 1024 MB.
  • Quindi, se si esegue lo stesso programma su diverse JVM, Runtime.getRuntime(). TotalMemory() potrebbe fornire risultati diversi.
+0

Se il metodo crea una quantità massiccia di oggetti temporanei, la semplice sottrazione può produrre dati irrilevanti. Il consumo effettivo di memoria dipende da gc che cancella tutti gli oggetti ridondanti. – ayvango

3

È possibile utilizzare alto comando in Ubuntu per controllare l'uso l'uso della CPU o la memoria%% durante l'esecuzione del programma Java.

comando in alto vi darà queste molte informazioni.

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+ COMMAND

basta digitare top e premere Invio nel vostro terminale & assegno java nella sezione di comando.

+0

Voglio una soluzione programmatica –

Problemi correlati