Memória física e memória virtual

Pessoal, estou precisando para um projeto da faculdade, TCC, exibir as informações do computador no meu sistema.

O sistema já exibe o básico que consigo direto do java( informações de pastas, usuários, espaço em disco, número de procesadores, etc), porém o mais importante no meu caso, a memória:

  • Memória FÍSICA total (quanto de memória tem instalado no pc)
  • Memória física DISPONÍVEL (quanto de memória disponível existe)
  • Memória VIRTUAL total (se possível, se não der belez, os anteriores sao mais importantes)

Bom, pode ser usando a api JNA, ou JNI, ou nativo do java, whatever!

EU só preciso saber como fazer isso.

Agradeço qualquer ajuda! Material, tutorial, referencias diretas, enfim…

Detalhe, o sistema vai rodar em windows e linux, ou seja, a solução precisa ser para os dois SOs.

Obrigado!

[color=darkblue]Não sei se vai ajudar, mas aqui tem algumas coisas que podem ser usadas para iniciar:

para espaço livre :[/color]

import java.io.File;
 public class Teste {
    public static void main(String[] args) {
       File c = new File("C:/");
       System.out.println("TOTAL: " + c.getTotalSpace());
       System.out.println("LIVRE: " + c.getFreeSpace());
       System.out.println("USADO: " +c.getUsableSpace());
    }
 }

[color=darkblue]Para memória total :[/color]

Runtime.getRuntime().totalMemory()

[color=darkblue]Para memória livre :[/color]

Runtime.getRuntime().freeMemory()

[color=darkblue]Acredito que para o que você quer seja melhor usar C[/color]

Os comandos que o Metaleiro passou se referem a memória da VM, não do sistema operacional. No caso, para esse tipo de informação é melhor não usar o Java mesmo. Use o C++ ou o C.

Ou mapeie as chamadas via JNI, como vc falou. Você já procurou no SO em questão, onde está essa informação?

Metaleiro, essas operações eu já conhecia, vou usar estas informações com a api File para medir o disco, mas o grande problema são informações da memória e cpu.

ViniGodoy, realmente, estas funções runtime sao referentes a jvm, já sabia disso também, de inicio pensie que eram referentes a memória da máquina, mas não eram.
Eu encontrei para windows uma biblioteca GlobalMemoryStatusEx, para Linux utilizei para informações de memória, número de processos, memória virtual a biblioteca sys/sysinfo.h, porém, usando ‘jnA’. Resolvido problema com discos e memória.

Agora a última coisa que preciso, as informações da cpu, via java a única coisa que consigo são número de cpus lógicas, ms informaçoes como clock, vendor, memória cache eu não achei nada para isso.

No linux eu tenho a opção de exporar para um arquivo o comando /proc/cpuinfo e ler do arquivo, mas eu queria algo mais direto, via código em C msm.

Se alguem souber, estou aberto a sugestões!

Obrigado por amba contribuições de ajuda!

Mais uma coisa, como é que eu sei quais funções de uma biblioteca eu posso usar?

Quero dizer, alguns tutoriais ensinam a ler a dll Kernel do windows.

Agora, como eu consigo acessar uma dll de terceiros que não seja documentada? tem alguma forma de listar os métodos (funções)?

[quote=pirado18]Mais uma coisa, como é que eu sei quais funções de uma biblioteca eu posso usar?

Quero dizer, alguns tutoriais ensinam a ler a dll Kernel do windows.

Agora, como eu consigo acessar uma dll de terceiros que não seja documentada? tem alguma forma de listar os métodos (funções)?[/quote]

Já ouviu falar do dumpbin? É o melhor amigo do programador. Ele mapeia uma dll e gera os nomes dos métodos para você. Mas detalhe, depende do tipo de codificação. Nomes c são diferentes de nomes c++, que possuem uma ? como parte do nome. Já sofri muito com softwares sem documentação, mas aprendi a me virar.

Dá uma lida aqui.

http://support.microsoft.com/kb/177429

Esse link é um tutorial
http://msdn.microsoft.com/en-us/library/aa446532.aspx

Sobre os recursos de hardware esse artigo é interessante. Pode criar um mapeamento jni para enviar as informações para o seu programa.
http://www.codeproject.com/KB/system/computerinfo.aspx