Quantos detalhes hardware pode um Java Applet Discover?
-
06-07-2019 - |
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:
- getAvailableProcessors () O número de processadores disponíveis equivalente Runtime.availableProcessors ()
- getSystemLoadAverage () a carga média no sistema a média de carga do sistema para o último minuto.
java.lang.management. ManagementFactory
-
getGarbageCollectorMXBeans () retorna uma lista ofGarbageCollectorMXBeans. Cada GarbageCollectorMXBean pode ser consultado para as seguintes informações:
- getCollectionCount () número de GC que ocorreramusando este feijão.
- 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.)
- getName () o nome do gerenciador de memória.
- getMemoryPoolNames () os pools de memória que esta gc administra.
-
getThreadMXBean () retorna o ThreadMXBean que dispõe:
- 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.
- getRuntimeMXBean RuntimeMXBean
- getUptime () uptime da máquina virtual Java em milissegundos.
- getStartTime () hora de início da máquina virtual Java em milissegundos.
- getInputArguments () Retorna os argumentos de entrada passados ??para a máquina virtual Java que não inclui os argumentos para o método principal.
- getCompilationMXBean retorna a CompilationMXBean
- getName () o nome do JIT
- getTotalCompilationTime () tempo em milissegundos que levou para compilar o código.
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 exemploWindows XP
) -
os.arch
- arquitetura do sistema. (Por exemplox86
) -
os.version
- versão do sistema operacional. (Por exemplo5.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:
- Número de processadores (ou núcleos, ou lógicos tópicos, presumivelmente) disponíveis para a JVM pela
Runtime.availableProcessors
método. - Informações de memória da máquina virtual Java, tais como
freeMemory
,maxMemory
etotalMemory
.
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.