2010-11-07 17 views
6

Tập hợp con nhỏ nhất của các lớp mà máy ảo Java có thể khởi động là gì?Những lớp nào là hoàn toàn cần thiết để có được một máy ảo Java đang chạy?

Tôi đoán những thứ như Object, String và primitves là hoàn toàn cần thiết vì chúng có dây cứng trong nhiều phần của máy ảo.

Tôi quan tâm đến sự phụ thuộc lớn giữa JVM và JDK.

Các câu hỏi cơ bản tôi đang tự hỏi về là:

Nếu tôi sẽ quyết định phân phối một JVM với một ngôn ngữ khác nhau lập trình và các thư viện tiêu chuẩn khác nhau, làm thế nào phần lớn các lớp học "Java" làm Tôi có để thực hiện xung quanh để làm cho JVM hạnh phúc không?

+1

Có lẽ phụ thuộc vào ý bạn là "khởi động" VM. Nó có phải bao gồm một trình nạp lớp cộng với các phụ thuộc, để tải một chương trình không? –

+1

Tại sao thẻ này được gắn thẻ là 'ngôn ngữ bất khả tri'? – casablanca

+0

Vì JVM chỉ thực thi bytecode. Có nhiều ngôn ngữ và trình biên dịch có thể tạo ra bytecode đó. – soc

Trả lời

3

Cách tốt nhất để tìm hiểu là thử và xem; ví dụ. sử dụng java -verbose. để chạy chương trình tối thiểu bằng nhiều ngôn ngữ được lưu trữ trên máy chủ JVM.

Nhưng câu trả lời là có khả năng là:

  • phiên bản JVM cụ thể, và
  • ngôn ngữ lập trình cụ thể.

Tôi cũng nên chỉ ra rằng (các) câu trả lời mà bạn nhận được sẽ không được sử dụng thực tế (... trừ khi bạn có kế hoạch tạo một JRE bị cắt giảm. Và nếu đúng như vậy, hãy đọc theo dõi bên dưới.)

Bạn có biết tất cả các lớp học là cần thiết hay VM cũng nạp trước các lớp mà ứng dụng mong muốn sử dụng trong mọi trường hợp theo ứng dụng?

JVM không tải trước mọi thứ trên cơ sở đó. Thay vào đó, nó tải đóng cửa phụ thuộc của mã của bạn tĩnh phụ thuộc vào. Tùy thuộc vào loại ứng dụng của bạn sử dụng, điều này có thể dẫn đến các lớp đang được tải mà không thực sự được sử dụng. Các kỹ sư Sun đã làm rất nhiều công việc để thử và giảm hiệu ứng này trong những năm qua, nhưng nó không nghi ngờ vẫn xảy ra ở một mức độ nào đó.

THEO UP

Reading giữa các dòng, có vẻ như mục đích là tạo ra một JVM gói cắt xuống để hỗ trợ các yêu cầu thời gian chạy của một số ngôn ngữ khác.Nếu vậy, hãy xem xét những điểm sau:

  • Có giấy phép yêu cầu về những gì bạn có thể làm với Java vis-a-vis việc tạo ra các phiên bản cắt giảm xuống. Cụ thể, Java, JVM và JRE là các thuật ngữ đã đăng ký nhãn hiệu và Oracle có thể sẽ xuất hiện sau khi bạn sử dụng chúng trong ngữ cảnh của một JRE bị cắt giảm. (Tôi không nói rằng bạn không thể làm điều đó, nhưng bạn do cần phải kiểm tra các khía cạnh pháp lý cho chính mình.)

  • Có những vấn đề hỗ trợ chắc chắn. Ví dụ, bạn cần phải theo dõi bất kỳ vấn đề bảo mật Java/JVM có liên quan và các bản vá lỗi và tạo ra các phiên bản mới của nền tảng cơ sở của bạn như được reuired.

  • Nếu bạn dự định cung cấp bất kỳ cách nào cho các chương trình ứng dụng bằng ngôn ngữ mới của bạn để gọi thư viện Java, thì việc sử dụng JRE bị cắt giảm có thể là một cơn đau nghiêm trọng ở mặt sau cho một số người dùng. Đặc biệt là nếu bạn đóng gói các công cụ của bạn theo cách có nghĩa là họ phải sử dụng JRE bị cắt giảm của bạn.

  • Có các công cụ trong JRE/JDK có thể hữu ích cho bạn/người dùng của bạn. Các công cụ như profilers, debuggers, lệnh JAR, v.v. JRE của bạn sẽ cần bao gồm tất cả các lớp cần thiết để chạy chúng.

Cuối cùng, tải xuống 100Mb không phải là vấn đề quan trọng đối với CHỦ ĐỀ VAST của người dùng. Và nếu có, bạn có thể kiếm được một chút tiền để hỗ trợ dự án của mình bằng cách bán DVD cài đặt.

Tập trung vào bất cứ điều gì bạn đang thực sự cố gắng làm ở đây ... và để tối ưu hóa trình cài đặt khi bạn có chất lượng sản xuất để tối ưu hóa.

1

Nếu bạn chạy lệnh:

java -verbose 

Nó sẽ cho bạn thấy tất cả các lớp nó tải để khởi động máy ảo. Nếu bạn thêm -verbose khi bạn bắt đầu một chương trình java, bạn sẽ nhận được một danh sách đầy đủ về những gì chương trình cần bắt đầu. Nhưng điều này không bao gồm bất kỳ lớp học nào khác mà nó có thể cần vì nó hoạt động.

Tại sao bạn cần biết lớp học nào là cần thiết?

+0

Bạn có biết nếu tất cả các lớp học là cần thiết hoặc VM cũng nạp trước các lớp mà nó dự kiến ​​sẽ được sử dụng trong mọi trường hợp bởi các ứng dụng? Tôi tự hỏi sự phụ thuộc lớn giữa JVM và JDK là bao nhiêu. Câu hỏi cơ bản mà tôi đang tự hỏi là: "Nếu tôi quyết định phân phối JVM với một ngôn ngữ lập trình khác và các thư viện chuẩn khác nhau, tôi phải mang bao nhiêu lớp" Java "để làm cho JVM vui vẻ?" – soc

+0

Nó không thực sự là một câu hỏi về việc khởi động VM. Nó sẽ là một câu hỏi về ngôn ngữ lập trình khác của bạn cần gì. Câu trả lời cuối cùng tôi nghĩ là những gì cần thiết hoàn toàn phụ thuộc vào chương trình bạn đang khởi động VM. Nếu bạn đang thực hiện một số loại ngôn ngữ sau đó bạn không thể dự đoán những gì sẽ là cần thiết, do đó bạn sẽ cần phải cung cấp tất cả mọi thứ. Tại sao bạn muốn cắt nó xuống? Hay đây chỉ là một bài tập kỹ thuật? :-) – drekka

+0

Nếu bạn chạy thử nghiệm này và chỉ gửi các lớp đó trong danh sách này, chắc chắn bạn sẽ thấy rằng có các lớp trong danh sách có các phương thức (không được gọi lúc khởi động) để xây dựng các đối tượng các loại không có trong danh sách. Nói cách khác, ngay cả khi máy ảo của bạn khởi động, các lớp mà bạn đã chuyển sẽ không phải là một tập tự chứa, và chúng có thể sẽ bị phá vỡ bởi các lớp bị thiếu khác. –

0

Bạn đang cố gắng tách riêng ứng dụng lớp 7000 để xem ứng dụng nào là cần thiết. Nếu bạn đã làm, không có cách nào bạn có thể guarentee JVM sẽ không thất bại tại một số điểm ngẫu nhiên trong tương lai? Tồi tệ hơn nếu nó nổ tung vì bất kỳ lý do gì, ngón tay có khả năng được chỉ vào bạn trước cho đến khi bạn có thể chứng minh nó không liên quan gì đến việc loại bỏ các lớp.

Nếu bạn đang sử dụng thiết bị di động và cần phải tiết kiệm dung lượng, tôi khuyên bạn nên sử dụng JME. Tuy nhiên nếu bạn đang sử dụng một máy tính để bàn, nơi 200 MB chi phí ít hơn một xu, nó thực sự có giá trị rủi ro? Nếu nó thổi lên nó sẽ chi phí bạn nhiều hơn một xu, tôi nghi ngờ nó sẽ.

Tương tự, bạn đang đi bộ dọc theo một con đường chính và bạn thấy những gì có thể là một xu ở phía bên kia. Bạn băng qua đường thông qua giao thông đông đúc để có được nó? Tôi đề nghị bạn cứ tiếp tục đi.

EDIT: Nếu bạn muốn có phiên bản Java bị cắt, bạn có thể thử phiên bản được nhúng. http://www.oracle.com/technetwork/java/embedded/downloads/index.html

Nó có 32 MB và 70 MB.

+0

Tải xuống 200MB có thể dễ dàng tốn nhiều hơn một xu * cho mỗi lần tải xuống *, nếu bạn là kẻ hút nghèo đang chạy máy chủ, tính năng này được bật. –

+0

@Steve, Bạn có giả định về phần mềm nào sẽ được cài đặt trước, ví dụ: hệ điều hành phải được cài đặt, và trong trường hợp này Java phải được cài đặt. –

+0

@Steve, tôi bực bội bất cứ ai cài đặt phiên bản Java đặc biệt này và sau đó cố gắng chạy một ứng dụng hoặc chương trình Java thông thường. Họ sẽ không biết bắt đầu sửa chữa nó ở đâu. –

0

IANAL, nhưng bạn có thể bị Oracle kiện nếu bạn bỏ các lớp java.*, bởi vì bằng sáng chế công khai của Sun/Oracle cho bằng sáng chế JDK yêu cầu bạn thực hiện đầy đủ các giao diện java.* và bạn tương thích với tiêu chuẩn . (Tôi nghĩ rằng đây là một phần của những gì Google phù hợp.)

Ngoài ra, tôi nghĩ rằng Project Jigsaw developers đang có một thời gian không tầm thường quyết định những gì thuộc về cài đặt JDK cơ bản và những gì thuộc về một mô-đun.Tôi nhớ lại việc đọc một bài đăng trên blog (không thể tìm thấy nó ngay bây giờ) về một số vấn đề phá vỡ sự phụ thuộc vòng tròn giữa những thứ cần có trong các mô-đun (XML, IIRC) và cài đặt cơ bản.

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