문제

저는 다른 하드웨어에서 다르게 실행되도록 Java 애플릿을 작성하고 있습니다.예를 들어, 컴퓨터에 RAM 용량은 많지만 프로세서가 약한 경우 시간과 메모리의 균형을 조정할 수 있습니다.애플릿이 실행되는 CPU의 정확한 제조업체와 모델을 찾을 수 있으면 도움이 될 수 있습니다.이러한 정보가 있으면 다른 시스템에 대해 내 소프트웨어를 벤치마킹하고 병목 현상을 찾을 수 있습니다.

일반적으로 내가 찾고 있는 것은 다음과 같습니다.

  • 코어 및/또는 프로세서 수
  • 32비트 vs 64비트 CPU
  • CPU 캐시 라인 크기
  • L1, L2, L3 캐시 크기
  • 캐시 연관성 설정
  • TLB의 크기
  • CPU의 정확한 제조사/모델 정보
  • FSB 정보
  • RAM 양
  • 스왑/가상 메모리 양
  • 애플릿이 실행되는 JVM
  • JVM을 실행하는 운영 체제
  • 시스템 부하
  • 사용/미사용 커널 스레드 수
  • 인터넷 연결 대역폭
  • 사용 가능한 메모리
  • 사용중인 그래픽카드
  • 운영 체제가 시각화되는 경우
  • 사용 중인 네트워크 리소스

이 정보가 Java 애플릿에 포함되어 있습니까?이 정보를 찾을 수 있는 라이브러리가 있습니까?일부를 발견/추측하기 위한 애플릿 벤치마킹 도구가 있습니까?당신이 생각할 수 있는 영리한 트릭이 있나요?

차단하는 컴퓨터 하드웨어의 모든 측면이 있습니까?즉, Java 애플릿은 액세스를 시도하고 거부됨(특정 TCP 포트 또는 그래픽 가속기 등)을 통해 무언가가 사용 중이거나 사용할 수 없음을 감지할 수 있습니까?

부인 성명:나는 하드웨어에 관심을 갖는 것이 하드웨어에 관심을 두지 않는다는 Java 이데올로기에 어긋난다는 것을 알고 있습니다.의견에 따르면 이 질문을 보는 다른 독자들에게는 도움이 될 수 있지만 그러한 답변은 제가 원하는 답변이 아니라는 점에 유의하시기 바랍니다.

편집하다

추가 정보:

java.lang.관리 JVM이 실행 중인 시스템에 대한 모든 종류의 정보를 제공합니다.

java.lang.management.운영 체제MXBean 다음을 제공합니다:

  1. getAvailableProcessors() 사용 가능한 프로세서 수에 해당 Runtime.availableProcessors()
  2. getSystemLoadAverage() 시스템의 평균 로드는 마지막 순간의 시스템 로드 평균입니다.

java.lang.management.관리공장

  1. getGarbageCollectorMXBeans() GarbageCollectorMXBean 목록을 반환합니다.각 쓰레기 수집기MXBean 다음 정보에 대해 쿼리할 수 있습니다.

    1. getCollectionCount() 이 콩을 사용하여 발생한 GC의 수.
    2. getCollectionTime() 밀리 초의 GC 사이에 대략적인 누적 시간이 경과합니다.(메모:Java Virtual Machine 구현은 고해상도 타이머를 사용하여 경과 시간을 측정 할 수 있습니다.)
    3. getName() 메모리 관리자의 이름.
    4. getMemoryPoolNames() 이 gc가 관리하는 메모리 풀입니다.
  2. getThreadMXBean() 반환합니다 ThreadMXBean 이는 다음을 제공합니다:

    1. getCurrentThreadCpuTime() 현재 스레드의 총 CPU 시간을 나노초 단위로 반환합니다.구현에서 사용자 모드 시간과 시스템 모드 시간을 구별하는 경우 반환된 CPU 시간은 현재 스레드가 사용자 모드 또는 시스템 모드에서 실행한 시간입니다.
  3. getRuntimeMXBean 보고 런타임MXBean
    1. getUptime() Java 가상 머신의 가동 시간(밀리초)입니다.
    2. getStartTime() Java 가상 머신의 시작 시간(밀리초)입니다.
    3. getInputArguments() 기본 메소드에 대한 인수를 포함하지 않는 JVM(Java Virtual Machine)에 전달된 입력 인수를 리턴합니다.
  4. getCompilationMXBean 반환합니다 편집MXBean
    1. getName() JIT의 이름
    2. getTotalCompilationTime() 코드를 컴파일하는 데 걸린 시간(밀리초)입니다.
도움이 되었습니까?

해결책

아주 쉽게 얻을 수 있는 정보는 다음을 통해 접근할 수 있는 정보입니다. System.getProperties (또는 System.getProperty) 방법.

예를 들어, os.name 운영 체제의 이름을 반환합니다.내 시스템에서 Windows XP 결과로서.

일부 정보는 다음에서 확인할 수 있습니다. System.getProperties, 애플릿에서 액세스할 수 있는 것으로 보이는 내용은 다음과 같습니다.

  • java.vm.version -- JVM 버전.
  • java.vm.vendor -- JVM의 공급업체 이름입니다.
  • java.vm.name -- JVM의 이름입니다.
  • os.name -- 운영 체제의 이름입니다.(예: Windows XP)
  • os.arch -- 시스템 아키텍처.(예: x86)
  • os.version -- 운영 체제 버전.(예: 5.1)
  • java.specification.version -- JRE 사양 버전.

위의 목록은 포괄적인 목록은 아니지만 시스템이 어떤 것인지에 대한 몇 가지 아이디어를 제공할 수 있습니다.

모든 속성을 통해 사용할 수 있는 것은 아니라는 점에 유의해야 합니다. System.getProperties 일부 속성의 경우 보안 관리자가 읽을 수 있는 오류를 발생시킵니다. AccessControlException.내가 그 글을 읽으려고 했을 때 java.home 속성에서 예외가 발생했습니다.

원인이 되는 속성을 얻으려면 AccessControlException 기본적으로 이러한 정보 중 일부를 수행하려면 애플릿에 권한을 부여하는 단계를 거쳐야 할 것입니다.(여기에 링크가 있습니다. 보안 제한 섹션 수업:애플릿 ~에서 자바 튜토리얼.)

그만큼 Runtime 클래스는 다음과 같은 정보를 제공할 수 있습니다.

기본적으로 제공되는 정보 외에 System 그리고 Runtime 클래스는 플랫폼에 따라 달라지는 운영 체제를 호출해야 할 수도 있습니다.

편집하다

그만큼 시스템 속성 가져오기 페이지의 수업:애플릿 ~의 자바 튜토리얼 읽을 수 있는 속성 목록과 애플릿에서 읽을 수 없는 속성 목록을 제공합니다.

다른 팁

여기에 몇 가지가 더 있습니다:

java.awt.툴킷 화면 해상도를 알 수 있으며 사용된 색상 모델을 통해 그래픽 카드에 대한 추가 정보도 알 수 있습니다.

또한 더 큰 바이트 배열을 할당하고 액세스 시간을 측정하여 캐시에 대한 대략적인 정보를 얻을 수도 있습니다(과거에는 메모리 캐시 트릭이 Java에서 작동하는지 확인하기 위해 이 방법을 사용했습니다.그들이하다).그러나 이러한 테스트는 한동안 애플릿을 중단시킬 수 있으므로 사용자에게 수행 중임을 알려야 합니다.

모델링을 수행하는 애플릿은 전달된 실시간 시간에 비해 전달된 가상 시간의 비율을 측정할 수 있습니다.느린 시스템을 감지한 후 애플릿은 덜 완벽한 출력을 희생하더라도 CPU 시간을 덜 필요로 하기 위해 통합 단계 및 유사한 상수를 늘릴 수 있습니다. 여기 새 떼의 행동을 시뮬레이션할 때 단계 속도를 조정하는 자체 튜닝 코드의 예가 있습니다.

와 함께 getNetwork인터페이스 시스템의 네트워크 인터페이스를 열거할 수 있습니다.

http://www.browserleaks.com/java

네트워크 어댑터 이름 및 연결 이름과 같은 중요한 정보가 표시될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top