Domanda

  1. i campionamento l'utilizzo della memoria e il numero di conteggio delle istanze per POJO. se quando si preme 'spazzatura raccolta' in VM visiva e posso vedere le istanze verso il basso, fa che la memoria media prive di perdite?

  2. come forzare JVM do spazzatura raccolta tutti i giorni alle midgnight? (Proprio come automaticamente stampa spazzatura raccogliere su VisualVM)? vedo l'utilizzo della CPU s' ??VisualVM, gc è sempre 0%. i impostare -Xmx -Xms 1024m, ma normalmente l'utilizzo della memoria intorno 200MB. è questo perché GC viene fatto quando necessaria solo? Ecco perché sempre 0% per il tempo di CPU gc

  3. come controllare momento del tempo a fare 'pieno GC'?

È stato utile?

Soluzione

  1. No, non necessariamente. Tutto ciò che significa veramente è che alcuni degli oggetti possono essere raccolti. Si potrebbe ancora avere una perdita di spazzatura se, ad esempio, il numero di istanza sempre andato giù dopo un GC, ma non del tutto allo stesso livello di prima; Se questa "base" è aumentata nel corso del tempo che ci si esaurisce la memoria di tanto in tanto. Inoltre, è molto difficile da dimostrare un negativo, quindi potrebbe essere che l'applicazione ha un bug di perdita di memoria, ma questa situazione specifica non esercita esso.
  2. Let chiarire una cosa - non si può mai forzare la JVM per la raccolta dei rifiuti run . Il meglio che puoi fare è chiamare System.gc(), che è un suggerimento per la JVM che potrebbe voler eseguire GC ora. Non ha nulla a che fare, e un no-op attuazione di tale metodo sarebbe perfettamente valido. In sostanza, garbage collection "guarda caso" e il meno si posiziona aspettative specifiche su di esso meglio è. Quindi, fondamentalmente, sì, in genere eseguito solo quando necessario.
  3. Anche in questo caso, si tratta in genere conoscenze interne ed i dettagli dipenderà da quale implementazione garbage collector che si sta utilizzando. Per la JVM di Sun, tuttavia, è possibile utilizzare l'argomento -verbose:gc della riga di comando per ottenere dettagli verbose raccolta dei rifiuti in uscita per la console. Se si vuole ispezionare i dettagli a livello di codice o visivamente, queste informazioni potrebbero essere esposti tramite JMX troppo (cioè impostare il processo per utilizzare JMX servizi remoti , e connettersi ad esso con JConsole). Per me, utilizzando Sun 1.5.0_06 JVM, vedo un MBean in java.lang.GarbageCollector che espone alcune informazioni, tra cui il momento dell'ultima GC completo.

Altri suggerimenti

  1. No. Non c'è davvero modo concreto per determinare se l'applicazione è perdita di memoria libera. La cosa migliore è di eseguire una prova di sosta per un periodo prolungato di tempo e assicurarsi che la dimensione del mucchio dal vivo è stabile.

  2. È possibile utilizzare la chiamata al metodo System.gc() per eseguire il garbage collector.

  3. Non sembra essere un'API per ottenere l'ultima volta che un GC è stato eseguito, ma il GarbageCollectorMXBean può dare alcune statistiche riguardanti l'GC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top