Java 애플릿이 검색할 수 있는 하드웨어 세부사항은 몇 개입니까?
-
06-07-2019 - |
문제
저는 다른 하드웨어에서 다르게 실행되도록 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 다음을 제공합니다:
- getAvailableProcessors() 사용 가능한 프로세서 수에 해당 Runtime.availableProcessors()
- getSystemLoadAverage() 시스템의 평균 로드는 마지막 순간의 시스템 로드 평균입니다.
java.lang.management.관리공장
getGarbageCollectorMXBeans() GarbageCollectorMXBean 목록을 반환합니다.각 쓰레기 수집기MXBean 다음 정보에 대해 쿼리할 수 있습니다.
- getCollectionCount() 이 콩을 사용하여 발생한 GC의 수.
- getCollectionTime() 밀리 초의 GC 사이에 대략적인 누적 시간이 경과합니다.(메모:Java Virtual Machine 구현은 고해상도 타이머를 사용하여 경과 시간을 측정 할 수 있습니다.)
- getName() 메모리 관리자의 이름.
- getMemoryPoolNames() 이 gc가 관리하는 메모리 풀입니다.
getThreadMXBean() 반환합니다 ThreadMXBean 이는 다음을 제공합니다:
- getCurrentThreadCpuTime() 현재 스레드의 총 CPU 시간을 나노초 단위로 반환합니다.구현에서 사용자 모드 시간과 시스템 모드 시간을 구별하는 경우 반환된 CPU 시간은 현재 스레드가 사용자 모드 또는 시스템 모드에서 실행한 시간입니다.
- getRuntimeMXBean 보고 런타임MXBean
- getUptime() Java 가상 머신의 가동 시간(밀리초)입니다.
- getStartTime() Java 가상 머신의 시작 시간(밀리초)입니다.
- getInputArguments() 기본 메소드에 대한 인수를 포함하지 않는 JVM(Java Virtual Machine)에 전달된 입력 인수를 리턴합니다.
- getCompilationMXBean 반환합니다 편집MXBean
- getName() JIT의 이름
- 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
클래스는 다음과 같은 정보를 제공할 수 있습니다.
- JVM에서 사용할 수 있는 프로세서(또는 코어 또는 논리 스레드) 수
Runtime.availableProcessors
방법. - Java 가상 머신의 메모리 정보 등
freeMemory
,maxMemory
, 그리고totalMemory
.
기본적으로 제공되는 정보 외에 System
그리고 Runtime
클래스는 플랫폼에 따라 달라지는 운영 체제를 호출해야 할 수도 있습니다.
편집하다
그만큼 시스템 속성 가져오기 페이지의 수업:애플릿 ~의 자바 튜토리얼 읽을 수 있는 속성 목록과 애플릿에서 읽을 수 없는 속성 목록을 제공합니다.
다른 팁
여기에 몇 가지가 더 있습니다:
java.awt.툴킷 화면 해상도를 알 수 있으며 사용된 색상 모델을 통해 그래픽 카드에 대한 추가 정보도 알 수 있습니다.
또한 더 큰 바이트 배열을 할당하고 액세스 시간을 측정하여 캐시에 대한 대략적인 정보를 얻을 수도 있습니다(과거에는 메모리 캐시 트릭이 Java에서 작동하는지 확인하기 위해 이 방법을 사용했습니다.그들이하다).그러나 이러한 테스트는 한동안 애플릿을 중단시킬 수 있으므로 사용자에게 수행 중임을 알려야 합니다.
모델링을 수행하는 애플릿은 전달된 실시간 시간에 비해 전달된 가상 시간의 비율을 측정할 수 있습니다.느린 시스템을 감지한 후 애플릿은 덜 완벽한 출력을 희생하더라도 CPU 시간을 덜 필요로 하기 위해 통합 단계 및 유사한 상수를 늘릴 수 있습니다. 여기 새 떼의 행동을 시뮬레이션할 때 단계 속도를 조정하는 자체 튜닝 코드의 예가 있습니다.
와 함께 getNetwork인터페이스 시스템의 네트워크 인터페이스를 열거할 수 있습니다.
http://www.browserleaks.com/java
네트워크 어댑터 이름 및 연결 이름과 같은 중요한 정보가 표시될 수 있습니다.