| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2007 13:57:17
|
boaglio
Moderador
![[Avatar]](/images/avatar/c0c7c76d30bd3dcaefc96f40275bdc0a.jpg)
Membro desde: 09/09/2002 21:23:39
Mensagens: 1577
Localização: Sampa City
Offline
|
Tenho um HashMap meio que gigante e gostaria de saber quanto ele está ocupando na memória.
Buscando no Google achei algumas coisas, e uma solução meio esquisita para fazer o que eu quero.
Conversei com o Paulo Silveira e ele comentou sobre um post no blog do MisterM mostrando o uso da java.lang.instrument.
Infelizmente o exemplo dele dá NPE , talvez por eu usar o Mustang e perceber que na versão 6 mudou bastante.
Alguém tem alguma sugestão ?
|
Eclipse? Netbeans? TextMate? Notepad? Vi? Use whatever gets the job done.  |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2007 15:18:17
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 13210
Localização: SP
Offline
|
A maneira mais boba de estimar o tamanho do hashmap é serializá-lo, e multiplicar o resultado por 2 se o hashmap contiver principalmente Strings ou objetos de classes cujos campos são principalmente Strings.
É porque uma String é serializada para UTF-8, ou seja, se cada caracter ocupa 2 bytes na memória, ao ser serializada a String ocupa apenas 1 byte.
Ou então usar um profiler, que lhe dá a informação correta em vez do tamanho chutado que lhe passei.
Se você estiver usando o Java 5.0 ou 6.0 pode tentar usar o jhat (utilitário que vem junto com o JDK).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2007 15:32:54
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 703
Offline
|
Olá Boaglio,
O fato do exemplo não funcionar tem pouco a ver com você estar usando o Mustang e sim pelo fato de eu ter usado o JDK 5 beta, que era o único disponível na época em que escrevi o post, e a API ter mudado pro Java SE 5 final.
Algumas das coisas que mudaram incluem a obrigatoriedade da construção de um jar com o agente, a definição da maioria dos parâmetros que eram passados por comando de linha agora ocorrer como atributos do MANIFEST.MF do jar e outras. Dê uma boa lida na documentação do package java.lang.instrument porque todas estas coisas são explicadas lá.
A única forma mais confiável de calcular o tamanho dos objetos em RAM _talvez seja_ usar a API de debugging do JDK, mas duvido que os resultados entre esta API e o j.l.i variem significativamente.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2007 15:43:24
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 703
Offline
|
thingol wrote:A maneira mais boba de estimar o tamanho do hashmap é serializá-lo...
A diferença entre o tamanho de um objeto serializado e seu tamanho em RAM pode ser brutal devido a diversos fatores. O primeiro e mais óbvio é o formato de serialização e o formato de armazenamento em RAM divergirem, pois o segundo em tese deve ser otimizado para coisas como performance e GC, enquanto o primeiro deveria minimizar o tamanho em disco. Por exemplo, bytes, shorts e ints são armazenados como longs em RAM por algumas VMs, simplesmente porque as operações assembly nativas (e o processo de compilação nativa) acabam sendo mais rápidas se usarem tipos uniformes.
Outro fator é que a spec de serialização prevê mecanismos que permitem a customização do processo, o que possibilitar tornar ainda mais diferente o formato serializado do que seria o formato em RAM.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/01/2007 20:04:31
|
felipecruz
JavaTeenager
Membro desde: 18/07/2006 10:25:29
Mensagens: 150
Offline
|
Um profiler nao faz isso não? (alem de outras coisas é claro)
|
loogica - http://blog.loogica.net |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/01/2007 11:32:53
|
boaglio
Moderador
![[Avatar]](/images/avatar/c0c7c76d30bd3dcaefc96f40275bdc0a.jpg)
Membro desde: 09/09/2002 21:23:39
Mensagens: 1577
Localização: Sampa City
Offline
|
Obrigado pelas dicas pessoal.
Estou procurando um código de exemplo, alguém poderia indicar ?
|
Eclipse? Netbeans? TextMate? Notepad? Vi? Use whatever gets the job done.  |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/01/2007 19:05:48
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 703
Offline
|
boaglio wrote:
Estou procurando um código de exemplo, alguém poderia indicar ?
Bem, mais explicado que esse post novo no java.net não dá pra ser.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/01/2007 19:22:33
|
eric_jf
JavaEvangelist
Membro desde: 07/07/2006 12:28:12
Mensagens: 370
Offline
|
Não tenho certeza mas acho q plugin Eclipse Test & Performance Tools Platform (TPTP) tem como ver isso.
http://www.eclipse.org/tptp/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2007 11:20:02
|
leandro_bortolotto
Thread.start()
Membro desde: 25/05/2006 16:43:41
Mensagens: 45
Offline
|
Bom dia,
Você conseguiu descobrir o tamanho em bytes de seu HashMap?
Vlw
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2007 12:48:29
|
Kenobi
Forum Spammer
![[Avatar]](/images/avatar/cf2226ddd41b1a2d0ae51dab54d32c36.jpg)
Membro desde: 14/11/2003 13:06:37
Mensagens: 1259
Localização: Brasil
Offline
|
A JDK tem uma série de Tools e utilitários que servem exatamente para esse e os mais variados propósitos.
Dê uma olhada nesse em especial que é para o seu problema : http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
Aqui você tem a página que descreve os tools - http://java.sun.com/javase/6/docs/technotes/tools/index.html#troubleshoot
Para a versão 5 vc tem um outro software - http://oss.metaparadigm.com/jmemprof/ .
Vi dois artigos bons sobre o tema, mas não falava especificamente de memória e sim profiler via AOP na IBM - http://www-128.ibm.com/developerworks/java/library/j-aopwork10/
Agora se você quiser fazer automaticamente gerando até gráficos, aconselho a utilizar o NetBeans Profiler que era o JFluid , projeto separado da Sun Microsystems ... excelente ferramenta, já o utilizei em diversos casos
|
------------------------------------------------------------------
"Massakatsu Agatsu Katsuhaiabi" - "A verdadeira vitória é aquela sobre nós mesmos". |
|
|
 |
|
|