Alto consumo de memória Thread + JNI

Bom meu problema é o seguinte, estou trabalhando em um projeto onde se fez necessário a integração Java + JNI para acessar recursos nativos do Sistema Operacional.
Vamos ao problema, em ambiente Windows eu criei uma DLL onde nela contém meus métodos nativos, e no meu código Java eu realizo o acesso a um determinando método
que me retorna todas as impressoras instaladas na máquina, esse método e acessado dentro de uma Thread Java onde a cada 3 minutos eu executo o método nativo.
Durante este acesso ao meu método nativo eu to tento problema com alocação de memória, onde a mesma esta sendo alocada e não esta sendo liberada e a cada acesso
aumenta-se 4 bytes a memória do processo. Isso pode parecer algo irrelevante, porém em outro método eu faço um monitoramento em tempo real de um determinando
recurso do Sistema Operacional, nesse acesso esta consumindo uma quantidade muito elevada de memória, em testes pude perceber que durante um dia todo de execução
o processo java.exe chega a consumir mais de 700mb de memória.
A princípio pensei que poderia ser meu código da DLL que estivesse alocando (malloc()) memória e não estivesse liberando (free()), mais realizei um teste e pude
perceber que não esta tendo vazamento de memória no código da minha DLL, ao executar meu código dentro de um while(true) com um Sleep(1000) o processo se
mantém o consumo de memória de forma esperada ao em torno de 690Kb.
Bom alguém ja enfrentou alguma problema como esse utilizando JNI e pode me dar uma luz de como resolver este problema, ou técnicas pra mim descobrir onde esta tendo
esse vazamento de memória.

Ninguém?

jweibe, não sei se vai te ajduar, mas

abra o cmd do windows e digite:

jconsole - conecte-se na sua aplicação

jvisualvm

espero que te ajude

[quote=jaboot]jweibe, não sei se vai te ajduar, mas

abra o cmd do windows e digite:

jconsole - conecte-se na sua aplicação

jvisualvm

espero que te ajude[/quote]

Cara obrigado pelas dicas… mais eu já utilizei tais ferramentas mais não me ajudou muito não, também já usei o Profiler do Netbeans.
Já tem uns 3 dias que eu to enrolado com isso.

[quote=jweibe][quote=jaboot]jweibe, não sei se vai te ajduar, mas

abra o cmd do windows e digite:

jconsole - conecte-se na sua aplicação

jvisualvm

espero que te ajude[/quote]

Cara obrigado pelas dicas… mais eu já utilizei tais ferramentas mais não me ajudou muito não, também já usei o Profiler do Netbeans.
Já tem uns 3 dias que eu to enrolado com isso.[/quote]

Kra você conseguiu resolver este problema pois estou com um identico aqui porém utilizo jna!

Abraço

Se o java.exe está ocupando 700mb, o problema é o código java. Precisa usar a jvisualvm e olhar no profiler qual é o tipo de dado que está ocupando mais memória. Se for byte pode ser imagens ou algum socket que ficou aberto. Int listas que não estão sendo controladas e aí por diante.

Cara uma coisa que eu achei bem estranho foi, não usei socket, não tinha imagens.
A app fazia o seguinte ela simplesmente se conectava a API do Windows para recuperar algumas informações, por exemplo recuperar toda informação das impressões que eram feitas,
por fim eu mudei a alocação de memória que usava malloc e comecei a usar new, enfim cheguei a conclusão que não era a minha dll, porque toda alocação era descartada ao final
com delete e delete[]. Fiz um simples teste de minha DLL usando um método main em C++ e a memória ia sendo alocada e liberada de forma correta.
Porem quando a DLL era carregada no Java, a coisa ficava feia, a solução foi refazer todo o código em C# e tudo ficou blz, consumo de memória contralada.
Agora algo que eu não tinha levando muito em conta, o consumo de memória que e gasto pra se enviar um arquivo usando o Apache HttpClient, e foi algo que eu dei uma revisada no
código que trouxe um bom resultado no consumo de memória.

[quote=sciuba][quote=jweibe][quote=jaboot]jweibe, não sei se vai te ajduar, mas

abra o cmd do windows e digite:

jconsole - conecte-se na sua aplicação

jvisualvm

espero que te ajude[/quote]

Cara obrigado pelas dicas… mais eu já utilizei tais ferramentas mais não me ajudou muito não, também já usei o Profiler do Netbeans.
Já tem uns 3 dias que eu to enrolado com isso.[/quote]

Kra você conseguiu resolver este problema pois estou com um identico aqui porém utilizo jna!

Abraço[/quote]

Cara eu cheguei a seguinte conclusão, não sou nenhum especialista em C++, mais se tu tiver que criar uma solução que precise de JNI, cara acho que
não vale tanto a pena assim só em casos bem específicos mais bem específicos mesmo, tipow uma aplicação enorme que tu precise fazer essa integração agora.
Mais se a tua aplicação ta começando agora veja a possibilidade a usar C++ puro ou Qt ou C# (para Windows) que o resultado e bem mais satisfatório.

[quote=jweibe][quote=sciuba][quote=jweibe][quote=jaboot]jweibe, não sei se vai te ajduar, mas

abra o cmd do windows e digite:

jconsole - conecte-se na sua aplicação

jvisualvm

espero que te ajude[/quote]

Cara obrigado pelas dicas… mais eu já utilizei tais ferramentas mais não me ajudou muito não, também já usei o Profiler do Netbeans.
Já tem uns 3 dias que eu to enrolado com isso.[/quote]

Kra você conseguiu resolver este problema pois estou com um identico aqui porém utilizo jna!

Abraço[/quote]

Cara eu cheguei a seguinte conclusão, não sou nenhum especialista em C++, mais se tu tiver que criar uma solução que precise de JNI, cara acho que
não vale tanto a pena assim só em casos bem específicos mais bem específicos mesmo, tipow uma aplicação enorme que tu precise fazer essa integração agora.
Mais se a tua aplicação ta começando agora veja a possibilidade a usar C++ puro ou Qt ou C# (para Windows) que o resultado e bem mais satisfatório.[/quote]

Concordo com você.