2009-06-18 23 views
7

Tôi đang viết một Java applet để chạy khác nhau theo phần cứng khác nhau. Ví dụ, nếu tôi biết một máy tính có một lượng RAM lớn nhưng một bộ xử lý yếu, tôi có thể thay đổi số dư của một số lần cân bằng bộ nhớ thời gian. Có thể khám phá chính xác và mô hình của CPU mà trên đó applet đang chạy có thể hữu ích. Có những thông tin như vậy sẽ cho phép tôi đánh giá phần mềm của mình dựa trên các hệ thống khác nhau và tìm thấy tắc nghẽn.Có bao nhiêu chi tiết phần cứng có thể khám phá Java Applet?

Nói chung những gì tôi đang tìm kiếm là:

  • Số lõi và/hoặc xử lý
  • 32 bit vs 64 bit CPU
  • CPU kích thước dòng cache
  • Kích thước của L1, L2 , Bộ nhớ cache L3
  • Đặt tính tương hợp của bộ nhớ cache
  • Kích thước của TLB
  • Chính xác Make/Mo del thông tin về CPU thông tin
  • FSB
  • Lượng RAM
  • Lượng swap/bộ nhớ ảo
  • Các JVM trong đó applet đang được chạy
  • Hệ điều hành chạy JVM
  • Hệ thống tải
  • Số chủ đề Kernal đã sử dụng/chưa sử dụng
  • Băng thông kết nối internet
  • Ghi nhớ y sẵn
  • Card đồ họa được sử dụng
  • Nếu hệ điều hành đang được hình dung
  • tài nguyên mạng được sử dụng

Là bất kỳ thông tin này nướng vào Java Applet. Có thư viện nào để tìm bất kỳ thông tin nào không? Các công cụ đo điểm chuẩn của Applet để khám phá/đoán một số công cụ? Bất kỳ thủ thuật thông minh nào bạn có thể nghĩ đến?

Có bất kỳ khía cạnh nào của phần cứng máy tính đang chặn không. Đó là, một applet Java có thể phát hiện ra rằng một cái gì đó đang được sử dụng hoặc không có sẵn bằng cách cố gắng truy cập nó và bị từ chối (có thể là một cổng TCP hoặc bộ tăng tốc đồ họa).

Tuyên bố từ chối trách nhiệm: Tôi biết rằng việc chăm sóc phần cứng đi ngược lại ý thức hệ Java không quan tâm đến phần cứng. Mặc dù các nhận xét chỉ ra điều này có thể hữu ích cho những độc giả khác thấy câu hỏi này, xin lưu ý rằng những câu trả lời như vậy không phải là những gì tôi đang tìm kiếm.

EDIT

thêm thêm thông tin:

java.lang. management cung cấp tất cả các loại thông tin trên hệ thống mà JVM đang chạy.

java.lang.management.OperatingSystemMXBean cung cấp:

  1. getAvailableProcessors() Số lượng bộ xử lý có sẵn tương đương Runtime.availableProcessors()
  2. getSystemLoadAverage() Các tải bình quân trên hệ thống trung bình hệ thống tải cho vào phút chót.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans() trả về một danh sách ofGarbageCollectorMXBeans. Mỗi GarbageCollectorMXBean có thể được truy vấn cho các thông tin sau:

    1. getCollectionCount() số gc mà đã xảy ra bằng đậu này.
    2. getCollectionTime() thời gian tích lũy gần đúng đã trôi qua giữa gc theo mili giây. (Lưu ý: Java Virtual Machine thực hiện có thể sử dụng một bộ đếm thời gian giải quyết cao để đo thời gian trôi qua .)
    3. getName() tên của người quản lý bộ nhớ.
    4. getMemoryPoolNames() các bộ nhớ mà gc này quản lý.
  2. getThreadMXBean() trả về ThreadMXBean cung cấp:

    1. getCurrentThreadCpuTime() Trả về tổng thời gian CPU cho thread hiện tại nano giây. Nếu việc thực hiện phân biệt giữa thời gian chế độ người dùng và thời gian chế độ hệ thống, thời gian CPU trả về là khoảng thời gian mà luồng hiện tại đã thực hiện trong chế độ người dùng hoặc chế độ hệ thống.
  3. getRuntimeMXBean lợi nhuận RuntimeMXBean
    1. getUptime() thời gian hoạt động của máy ảo Java trong mili giây.
    2. getStartTime() thời gian bắt đầu của máy ảo Java tính bằng mili giây.
    3. getInputArguments() Trả về các đối số đầu vào được truyền cho máy ảo Java không bao gồm đối số cho phương thức chính.
  4. getCompilationMXBean trả về CompilationMXBean
    1. getName() tên của JIT
    2. getTotalCompilationTime() thời gian trong mili giây để biên dịch mã của bạn.

Trả lời

6

Những người được khá đơn giản để có được những thông tin truy cập thông qua phương pháp System.getProperties (hoặc System.getProperty).

Ví dụ: os.name sẽ trả về tên của hệ điều hành. Trên hệ thống của tôi, tôi nhận được kết quả là Windows XP.

Một số thông tin có sẵn bằng cách System.getProperties, mà dường như có thể truy cập bởi applet bao gồm:

  • java.vm.version - phiên bản của JVM.
  • java.vm.vendor - tên nhà cung cấp của JVM.
  • java.vm.name - tên của JVM.
  • os.name - tên của hệ điều hành. (ví dụ: Windows XP)
  • os.arch - kiến ​​trúc của hệ thống. (ví dụ: x86)
  • os.version - phiên bản của hệ điều hành. (ví dụ: 5.1)
  • java.specification.version - phiên bản đặc điểm kỹ thuật JRE.

Ở trên không phải là danh sách toàn diện, nhưng nó có thể đưa ra một số ý tưởng về hệ thống giống như thế nào. Cần lưu ý rằng không phải tất cả các thuộc tính có sẵn thông qua System.getProperties đều có thể đọc được, cũng như đối với một số thuộc tính, trình quản lý bảo mật sẽ gây ra một số AccessControlException. Khi tôi cố gắng đọc các tài sản java.home, một ngoại lệ đã được ném.

Để có được các thuộc tính gây ra AccessControlException theo mặc định, có thể sẽ phải thực hiện các bước để cấp quyền cho ứng dụng để thực hiện một số thông tin đó. (Đây là một liên kết đến phần Security Restrictions của Lesson: Applets từ The Java Tutorials.)

Lớp Runtime có thể cung cấp các thông tin như:

Ngoài thông tin được cung cấp bởi lớp mặc định SystemRuntime có thể sẽ yêu cầu thực hiện cuộc gọi đến hệ điều hành, phụ thuộc vào nền tảng.

Sửa

Các Getting System Properties trang từ Lesson: Applets của The Java Tutorials cung cấp một danh sách các thuộc tính có thể được đọc, và một danh sách các thuộc tính mà không thể được đọc bởi applet.

1

Dưới đây là một số chi tiết:

java.awt.Toolkit có thể có thể cho biết độ phân giải màn hình và thậm chí có một cái gì đó thêm về card đồ họa (từ mô hình màu được sử dụng).

Bạn cũng có thể phân bổ một số byte lớn hơn và đo thời gian truy cập để nhận thông tin gần đúng về bộ đệm (trong quá khứ chúng tôi đã chơi với điều này để kiểm tra xem các thủ thuật bộ nhớ cache có hoạt động với Java); Tuy nhiên, các thử nghiệm này có thể treo applet của bạn một thời gian, do đó bạn cần thông báo cho người dùng biết rằng bạn đang làm.

Các ứng dụng làm mô hình có thể đo tỷ lệ thời gian ảo đã qua trong thời gian thực được truyền. Sau khi phát hiện một hệ thống chậm, applet có thể tăng các bước tích hợp và các hằng số tương tự để đòi hỏi ít thời gian CPU hơn, ngay cả với chi phí đầu ra kém hoàn hảo hơn. Here có một ví dụ về mã tự điều chỉnh như vậy điều chỉnh tốc độ bước trong mô phỏng hành vi đàn chim.

+0

Câu trả lời hay, tôi đã không cân nhắc việc sử dụng awt. Thủ thuật bộ nhớ cache chống lại java Tôi đã làm việc trong lĩnh vực này trong hai năm qua. Tôi tò mò tại sao bạn làm điều này? –

+0

Tôi đã có một khóa học về kiến ​​trúc bộ nhớ cache trong trường đại học của mình và quyết định kiểm tra xem trải nghiệm này có thể được sử dụng lại trong Java hay không. Java thực sự cung cấp nhiều quyền kiểm soát hơn về cách các đối tượng được đặt trong bộ nhớ: nếu được phân bổ theo trình tự, chúng thường được cấp phát bên cạnh nhau. Ngoài ra, các thành viên của mảng nguyên thủy được phân bổ bên cạnh nhau. Tôi đang chơi với truy cập phần tử mảng, truy cập vào các phần tử bên cạnh nhau hoặc các phần tử ngẫu nhiên có thể cách xa nhau. Truy cập ngẫu nhiên, quy mô rộng không thể được bộ nhớ cache hỗ trợ dễ dàng và mất nhiều thời gian hơn. –

1

Với getNetworkInterfaces bạn có thể liệt kê các giao diện mạng trong hệ thống của bạn:

http://www.browserleaks.com/java

Nó có thể hiển thị một thông tin quan trọng như tên card mạng và tên kết nối.

Các vấn đề liên quan