Ho un bufferedImage in Java. Come posso vedere quanta memoria occupa? Grazie in anticipo.Verifica la quantità di memoria bufferizzataImage in java utilizza?
risposta
È possibile determinare il numero di byte dei dati di immagine da solo occupa di utilizzare questo:
DataBuffer buff = image.getRaster().getDataBuffer();
int bytes = buff.getSize() * DataBuffer.getDataTypeSize(buff.getDataType())/8;
L'immagine si prende un po 'più spazio per il modello di colore e altre informazioni di contabilità, ma per immagini di grandi dimensioni, bytes
sarà il termine dominante.
+1 decisamente un approccio intelligente. L'overhead aggiuntivo in una BufferedImage è relativamente piccolo, soprattutto perché la maggior parte delle immagini al giorno d'oggi non usa un modello di colore indicizzato (che è l'unico altro potenziale pezzo di dati in un'immagine, potrebbe essere fino a 256k in casi rari). – mikera
Perché dividi per 8 alla fine. GetDataType() restituisce la dimensione in bit? – klyngbaek
@ thehanseatic - Esattamente. Dai documenti per [DataBuffer] (http://docs.oracle.com/javase/6/docs/api/java/awt/image/DataBuffer.html): _ "Restituisce la dimensione (in bit) del tipo di dati , dato un tag datatype. "_ –
Non sono sicuro che esista un modo semplice per capirlo con una precisione del 100% fino al numero di byte, senza calcolarlo da soli (tenendo conto del modello di colore, della dimensione dell'immagine e di altri fattori).
You can calculate the totalMemory() and freeMemory() sullo heap prima e dopo l'allocazione e ottenere una stima in questo modo. Se altri oggetti sono assegnati (o raccolti) tra i tuoi assegni, il tuo calcolo non sarà accurato.
This discussion parla della dimensione dei tipi primitivi nella JVM (un oggetto è una raccolta di molti oggetti primitivi), che è possibile utilizzare per capirlo.
This article fornire una panoramica dell'utilizzo della memoria in Java.
Come farei a calcolarlo da solo (l'uso di mem del modello di colore e altri fattori?) Grazie. – klyngbaek
Mi riferivo al modo manuale di calcolare questo, leggendo la documentazione, cercando di capire quali sono i primitivi che alla fine hanno composto una determinata immagine, e quindi solo sommando i valori. – jefflunt
Utilizzare Runtime#totalMemory
e Runtime#gc
dovrebbe essere in grado di ottenere un'approssimazione molto vicino. Esempio:
Runtime.getRuntime().gc();Runtime.getRuntime().gc();Runtime.getRuntime().gc();
long totalUsed = Runtime.getRuntime().totalMemory();
BufferedImage image = ...
Runtime.getRuntime().gc();Runtime.getRuntime().gc();Runtime.getRuntime().gc();
totalUsed = Runtime.getRuntime().totalMemory() - total;
Calling gc
più volte aumenta la possibilità che il garbage collector verrà effettivamente eseguito, in quanto gc
è solo un suggerimento. Chiamando gc
in questo esempio si garantisce che nessun oggetto che sarebbe stato raccolto si aggiunga all'utilizzo della memoria.
- 1. la quantità di memoria utilizzata da un thread in java
- 2. UILabel (CALayer) utilizza grandi quantità di memoria virtuale
- 3. Quale tipo di canale utilizza la quantità minima di memoria in Go?
- 4. Come ottenere la quantità di memoria utilizzata da un'applicazione
- 5. Quantità massima di memoria per processo Java su Windows?
- 6. Verifica/Registra la quantità di banda utilizzata da PhantomJS/CasperJS
- 7. La libreria GD utilizza molta memoria?
- 8. la quantità di memoria utilizzata dal modulo del mio kernel?
- 9. Ottieni la quantità totale di memoria della GPU?
- 10. CGContextDrawPDFPage che occupa grandi quantità di memoria
- 11. Web Worker consuma enormi quantità di memoria
- 12. problema mmap, alloca enormi quantità di memoria
- 13. Grande quantità di costanti in Java
- 14. == verifica la piena uguaglianza in Booleani? - Java
- 15. L'unità AngularJs verifica perdite di memoria
- 16. Quantità totale di memoria disponibile per le applicazioni in Linux
- 17. allocare una quantità specifica di memoria in swift - iOS
- 18. Solr utilizza troppa memoria
- 19. Java perdita di memoria webapp quando si utilizza ScheduledExecutorService
- 20. Psycopg2 utilizza la memoria su query di selezione ampia
- 21. Come si verifica la disponibilità di Internet in Java?
- 22. Richiesta di memoria di grandi quantità di dati RDF
- 23. Prestazioni Java con grandi quantità di RAM
- 24. Trasferimento di una grande quantità di memoria variabile da Cuda
- 25. MongoDB utilizza troppa memoria
- 26. Contare la quantità di query in Rails
- 27. La memoria del processo Java cresce indefinitamente. Perdita di memoria?
- 28. jQuery.data - la quantità di dati che possono memorizzare in esso
- 29. In che modo free() conosce la quantità di memoria da distribuire?
- 30. C'è un modo per impostare la quantità di memoria disponibile in iPhone Simulator?
Usa 'JVisualVM' nella cartella' bin' di JDK (non JRE) e allega il tuo processo di app Java. La sua sezione di profiler può estrarre l'utilizzo della memoria di tutte le classi utilizzate nell'app. –