Pergunta

Eu estou escrevendo um applet Java para executar de forma diferente sob hardware diferente. Por exemplo, se eu sei que um computador tem uma grande quantidade de RAM, mas um processador fraco, posso alterar o equilíbrio de alguns de memória tempo trade-offs. Ser capaz de descobrir a marca eo modelo exato da CPU na qual o applet está em execução poderia ser útil. Ter essa informação me permitiria referência o meu software contra sistemas diferentes e encontrar gargalos.

Geralmente o que eu estou procurando é:

  • Número de condutores e / ou processadores
  • 32 bit vs 64 bit CPU
  • Cache CPU tamanho da linha
  • Tamanho da L1, L2, L3 cache de
  • Set associatividade de memória cache
  • Tamanho da TLB
  • Exact Marca / Modelo informações sobre a CPU
  • informações FSB
  • Quantidade de RAM
  • Quantidade de swap / memória virtual
  • A JVM em que o applet está sendo executado
  • sistema operacional em execução JVM
  • Carga do Sistema
  • Número de usado / não utilizado Kernal tópicos
  • A largura de banda de conexão à internet
  • Memória disponível
  • As placas gráficas em uso
  • Sistema Operacional Se está sendo visualizado
  • recursos de rede em uso

é qualquer uma dessas informações cozido em Java Applets. Existem bibliotecas para encontrar alguma desta informação? Applet aferição ferramentas para descobrir / acho que algumas delas? Quaisquer truques inteligentes que você pode pensar?

São os seus qualquer aspecto de hardware de computador que estão bloqueando. Isto é, poderia um Java applet de detectar que algo está em uso ou não está disponível ao tentar acessá-lo e sendo negado (talvez uma determinada porta TCP ou acelerador gráfico).

Disclaimer: Eu sei que se preocupar com o hardware vai contra a ideologia Java de não se preocupar com o hardware. Embora os comentários apontar isso pode ser útil para outros leitores que vêem esta questão, por favor nota que tais respostas não são o que eu estou procurando.

Editar

Adicionado informações adicionais:

java.lang. gestão fornece todos os tipos de informações sobre o sistema que a JVM está sendo executado.

java.lang.management. OperatingSystemMXBean fornece:

  1. getAvailableProcessors () O número de processadores disponíveis equivalente Runtime.availableProcessors ()
  2. getSystemLoadAverage () a carga média no sistema a média de carga do sistema para o último minuto.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans () retorna uma lista ofGarbageCollectorMXBeans. Cada GarbageCollectorMXBean pode ser consultado para as seguintes informações:

    1. getCollectionCount () número de GC que ocorreramusando este feijão.
    2. getCollectionTime () aproximados tempo acumulado decorrido entre de gc em milissegundos. (Nota: A máquina virtual Java implementação pode utilizar uma alta resolução do temporizador para medir o tempo decorrido.)
    3. getName () o nome do gerenciador de memória.
    4. getMemoryPoolNames () os pools de memória que esta gc administra.
  2. getThreadMXBean () retorna o ThreadMXBean que dispõe:

    1. getCurrentThreadCpuTime () Retorna o tempo total de CPU para o segmento atual em nanossegundos. Se a implementação distingue entre o tempo de modo de usuário e tempo de modo de sistema, o tempo de CPU retornado é a quantidade de tempo que o segmento atual foi executado em modo de usuário ou modo de sistema.
  3. getRuntimeMXBean RuntimeMXBean
    1. getUptime () uptime da máquina virtual Java em milissegundos.
    2. getStartTime () hora de início da máquina virtual Java em milissegundos.
    3. getInputArguments () Retorna os argumentos de entrada passados ??para a máquina virtual Java que não inclui os argumentos para o método principal.
  4. getCompilationMXBean retorna a CompilationMXBean
    1. getName () o nome do JIT
    2. getTotalCompilationTime () tempo em milissegundos que levou para compilar o código.
Foi útil?

Solução

Os que são bastante simples de se obter é a informação acessível através do System.getProperties (ou System.getProperty ) método.

Por exemplo, os.name irá retornar o nome do sistema operacional. No meu sistema, eu tenho o Windows XP como resultado.

Algumas informações disponíveis por System.getProperties , que parece ser acessível pelo applet incluem:

  • java.vm.version -. Versão do JVM
  • java.vm.vendor -. Nome do fornecedor do JVM
  • java.vm.name -. Nome do JVM
  • os.name - nome do sistema operacional. (Por exemplo Windows XP)
  • os.arch - arquitetura do sistema. (Por exemplo x86)
  • os.version - versão do sistema operacional. (Por exemplo 5.1)
  • java.specification.version - JRE versão de especificação
  • .

O acima não é uma lista exaustiva, mas pode dar algumas ideias sobre o que o sistema é como.

Deve-se notar que nem todas as propriedades que estão disponíveis através do System.getProperties pode ser lido, como para algumas propriedades, o gestor de segurança fará com que uma AccessControlException. Quando eu tentei ler a propriedade java.home, uma exceção foi acionada.

Para obter as propriedades que causam um AccessControlException por padrão, seria provavelmente teria que ser medidas tomadas para dar permissões para o applet para executar algumas dessas informações. (Aqui está um link para a seção Restrições segurança do Lição: Applets de Os tutoriais Java ).

A classe Runtime pode fornecer informações como:

Além das informações fornecidas pelas classes System padrão e Runtime provavelmente exigiria a fazer chamadas para o sistema operacional, o que seria dependente de plataforma.

Editar

O Obtendo Propriedades do Sistema página de < a href = "http://java.sun.com/docs/books/tutorial/deployment/applet/index.html" rel = "nofollow noreferrer"> Lição: Applets de Os tutoriais Java fornece uma lista de propriedades que pode ser lido e uma lista de propriedades que não podem ser lido por applets.

Outras dicas

Aqui estão mais algumas:

java.awt.Toolkit pode ser capaz de dizer a resolução da tela e talvez até mesmo algo mais sobre a placa gráfica (a partir do modelo de cor usado).

Você também pode alocar algum maior matriz de bytes e tempos de acesso medida para obter informações aproximadas sobre o cache (no passado jogamos com este para verificar se truques de cache de memória trabalhar com Java em tudo, eles fazem). No entanto, estes testes podem pendurar seu applet por algum tempo, então você precisa informar o usuário que você está fazendo.

Applets que fazer a modelagem pode medir a proporção de tempo virtual passou o tempo real passou. Após detectar um sistema lento, o applet pode aumentar etapa de integração e constantes semelhantes a requer menos tempo de CPU, mesmo com a despesa da saída menos perfeito. Aqui existe um exemplo de tal código de sintonia auto que ajusta a velocidade passo na simulação do comportamento efectivo de aves.

Com getNetworkInterfaces você pode enumerar as interfaces de rede no seu sistema:

http://www.browserleaks.com/java

Pode mostrar uma informação significativa, como o nome do adaptador de rede e nome da conexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top