Làm thế nào để Java độc lập với nền tảng khi nó cần JVM để chạy?


79

Tôi mới bắt đầu học Java và tôi đang bối rối về chủ đề độc lập nền tảng.

Không phải "độc lập" ngụ ý rằng mã Java nên chạy trên bất kỳ máy nào và không cần cài đặt phần mềm đặc biệt? Tuy nhiên, JVM cần phải hiện diện trong máy.

Ví dụ, chúng ta cần có Trình biên dịch Turbo C để biên dịch mã nguồn C / C ++ và sau đó thực thi nó. Máy phải có trình biên dịch C.

Ai đó có thể vui lòng làm ơn nghĩa là gì khi Java được mô tả là "nền tảng độc lập"?


4
@aaa: Lần cuối tôi kiểm tra, nó có sẵn để tải xuống miễn phí trên trang web của Borland.
dan04

1
Có, được liệt kê là Phần mềm Cổ ... ( edn.embarcadero.com/article/20841 ).
Matthew Flaschen

2
Turbo C (hoặc bất kỳ trình biên dịch 'gốc' nào khác) không cần thiết để thực thi chương trình đã biên dịch. trình biên dịch tạo một .exetệp. tối đa nó yêu cầu thư viện thời gian chạy (trong một .dlltệp), không phải toàn bộ trình biên dịch
Javier

Câu trả lời:


111

Thông thường, mã đã biên dịch là tập hợp chính xác các lệnh mà CPU yêu cầu để "thực thi" chương trình. Trong Java, mã đã biên dịch là một bộ hướng dẫn chính xác cho một "CPU ảo" được yêu cầu để hoạt động giống nhau trên mọi máy vật lý.

Vì vậy, theo một nghĩa nào đó, các nhà thiết kế của ngôn ngữ Java đã quyết định rằng ngôn ngữ và mã được biên dịch sẽ độc lập với nền tảng, nhưng vì mã cuối cùng phải chạy trên nền tảng vật lý, họ đã chọn đặt tất cả mã phụ thuộc vào nền tảng JVM.

Yêu cầu này đối với JVM trái ngược với ví dụ Turbo C của bạn. Với Turbo C, trình biên dịch sẽ tạo ra mã phụ thuộc vào nền tảng và không cần JVM làm việc giống nhau vì chương trình Turbo C đã biên dịch có thể được thực thi trực tiếp bởi CPU.

Với Java, CPU thực thi JVM, nó phụ thuộc vào nền tảng. JVM đang chạy này sau đó thực thi mã bytecode của Java độc lập với nền tảng, miễn là bạn có sẵn JVM để nó thực thi. Bạn có thể nói rằng viết mã Java, bạn không lập trình để mã được thực thi trên máy vật lý, bạn viết mã để thực thi trên Máy ảo Java.

Cách duy nhất để tất cả các bytecode Java này hoạt động trên tất cả các máy ảo Java là một tiêu chuẩn khá nghiêm ngặt đã được viết cho cách hoạt động của các máy ảo Java. Điều này có nghĩa là bất kể bạn đang sử dụng nền tảng vật lý nào, phần mà mã byte Java giao tiếp với JVM được đảm bảo chỉ hoạt động theo một chiều. Vì tất cả các JVM hoạt động hoàn toàn giống nhau, nên cùng một đoạn mã hoạt động hoàn toàn giống nhau ở mọi nơi mà không cần biên dịch lại. Nếu bạn không thể vượt qua các bài kiểm tra để đảm bảo nó giống nhau, bạn không được phép gọi máy ảo của mình là "máy ảo Java".

Tất nhiên, có nhiều cách mà bạn có thể phá vỡ tính di động của một chương trình Java. Bạn có thể viết một chương trình tìm kiếm các tệp chỉ được tìm thấy trên một hệ điều hành (ví dụ: cmd.exe). Bạn có thể sử dụng JNI, cho phép bạn đặt mã C hoặc C ++ đã biên dịch vào một lớp một cách hiệu quả. Bạn có thể sử dụng các quy ước chỉ hoạt động cho một hệ điều hành nhất định (như giả sử ":" phân tách các thư mục). Nhưng bạn được đảm bảo sẽ không bao giờ phải biên dịch lại chương trình của mình cho một máy khác trừ khi bạn đang làm điều gì đó thực sự đặc biệt (như JNI).


1
"Vì tất cả các JVM hoạt động hoàn toàn giống nhau, nên cùng một đoạn mã hoạt động hoàn toàn giống nhau ở mọi nơi mà không cần biên dịch lại". Câu văn này có nghĩa là gì? Bất cứ khi nào bạn chạy cùng một chương trình trên các hệ thống khác nhau có cài đặt JVM, chúng tôi luôn làm điều này "javac filename.java". (Lấy bất kỳ chương trình đơn giản nào làm ví dụ) Nếu không bắt buộc phải biên dịch lại chương trình thì tại sao lại nói rằng "chúng ta có thể chạy cùng một đoạn mã ở bất kỳ đâu mà không cần biên dịch lại?". Vui lòng giải thích.
Karan Thakkar

3
Bạn cần biên dịch mã nguồn java, do đó có "javac filename.java" Tuy nhiên, bạn chỉ cần một lần và không phải trên mọi máy tính nơi nó được sử dụng (điều này khác với C và C ++). Nếu bạn thay đổi CPU, hệ thống 32/64 bit, thứ tự byte, v.v., mã vẫn chạy. Điều này là do đầu ra "filename.class" chứa mã byte, là các hướng dẫn cho JVM. Vì tất cả các JVM đều giống hệt nhau về mặt chức năng, khi mã được biên dịch, bạn có thể chạy mã bytecode đó trên bất kỳ Máy ảo Java nào mà không cần có mã nguồn. Hãy thử nó, nó hoạt động. Ngoài ra, một số nhận xét bạn nhầm lẫn giữa biên dịch với biên dịch lại.
Edwin Buck

@KaranThakkar - Tôi nghĩ phần mở rộng của điều mà Edwin muốn nói có thể là, bạn có thể dễ dàng sử dụng các tệp .jar giống nhau trong các dự án của bạn trên bất kỳ bản sao nào mà không cần biên dịch chúng.
tiên phong

54
            Technical Article on How java is platform indepedent?

Trước khi đi vào chi tiết, đầu tiên bạn phải hiểu ý nghĩa của platform là gì? Nền tảng bao gồm phần cứng máy tính (chủ yếu là kiến ​​trúc của bộ vi xử lý) và hệ điều hành. Nền tảng = phần cứng + Hệ điều hành

Bất kỳ thứ gì không thuộc về nền tảng đều có thể chạy trên bất kỳ hệ điều hành và phần cứng nào.

Java là nền tảng không chuyên sâu nên java có thể chạy trên mọi hệ điều hành và phần cứng. Bây giờ câu hỏi là nó độc lập với nền tảng như thế nào?

Điều này là do sự kỳ diệu của Byte Code là hệ điều hành không thể đọc được. Khi trình biên dịch java biên dịch bất kỳ mã nào thì nó sẽ tạo ra mã byte không phải mã gốc của máy (không giống như trình biên dịch C). Bây giờ mã byte này cần một trình thông dịch để thực thi trên máy. Trình thông dịch này là JVM. Vì vậy, JVM đọc mã byte đó (đó là mã máy tính) và thực thi nó. Các JVM khác nhau được thiết kế cho các hệ điều hành khác nhau và mã byte có thể chạy trên các hệ điều hành khác nhau.

Trong trường hợp trình biên dịch C hoặc C ++ (ngôn ngữ không thuộc nền tảng) tạo ra tệp .exe là hệ điều hành depedent nên khi chúng ta chạy tệp .exe này trên hệ điều hành khác thì nó sẽ không chạy vì tệp này là hệ điều hành nên không tương thích với hệ điều hành khác.

Cuối cùng, một mã Byte sâu của hệ điều hành trung gian làm cho nền tảng java trở nên độc lập.


5
Đây là một câu trả lời ngu ngốc. Điều làm cho nền tảng java độc lập là trên thực tế, java phụ thuộc vào máy ảo. Nó không quan tâm nó đang chạy trên hệ điều hành nào miễn là máy ảo đó đáp ứng các lệnh gọi đến hoạt động của hệ điều hành. Và bản thân VM không độc lập với nền tảng. So sánh bạn đã cung cấp với ngôn ngữ C / C ++ là không có thật, chỉ cần biên dịch mã nguồn trên chính nền tảng đó và nó sẽ chạy, tại sao lại đưa bộ hướng dẫn đó sang nền tảng khác và hy vọng một cách ngu ngốc rằng nó sẽ chạy? Bạn có thể đưa mã nguồn java của mình sang ARM và mong muốn nó chạy trên VM được biên dịch cho custom_processor của tôi không?
Abhinav Gauniyal,

Thiết kế cho một JVM cũng vậy. Oracle sẽ bắt tay vào thiết kế các JVM khác nhau cho từng máy. Chỉ có sự khác biệt là mã bytecode của chương trình bạn muốn chạy trên một số máy. Mỗi chương trình tạo ra một loại mã bytecode khác nhau. Tệp bytecode có định dạng thập lục phân để JVM và CPU hiểu và thực thi tập lệnh.
Karan Thakkar

26

Nó có nghĩa là lập trình viên Java không (về lý thuyết) cần biết chi tiết về máy hoặc hệ điều hành. Những chi tiết này tồn tại và JVM và thư viện lớp xử lý chúng. Hơn nữa, trái ngược hẳn với C, các mã nhị phân Java (bytecode) thường có thể được chuyển sang các hệ thống hoàn toàn khác nhau mà không cần sửa đổi hoặc biên dịch lại.


10
"... Các mã nhị phân Java (bytecode) thường có thể được chuyển sang các kiến ​​trúc hoàn toàn khác mà không cần biên dịch lại.". Trên thực tế, họ luôn luôn có thể. Việc biên dịch chỉ cần thiết khi chuyển mã được biên dịch cho JVM mới hơn sang JVM cũ hơn.
Stephen C

@Stephen, tôi đã đổi nó thành "hệ thống". Có nhiều yếu tố có thể cản trở tính di động, bao gồm cả việc sử dụng JNA hoặc JNI để liên kết đến các thư viện chỉ được viết cho một kiến ​​trúc duy nhất.
Matthew Flaschen

1
JNA hoặc JNI dường như là yếu tố duy nhất đối với tôi, và chúng khá hiếm khi được sử dụng trong thế giới thực. Ngay cả khi đó, mã bytecode vẫn có thể luôn được di chuyển mà không cần biên dịch lại - chỉ là bạn cũng có thể phải biên dịch lại các thư viện mà JNI đang mong đợi ở đó. Mặc dù vậy, mã byte vẫn còn khả dụng.
Kendall Helmstetter Gelner

đã đồng ý ... nhưng không có trường hợp nào trong số đó sẽ biên dịch lại "mã nhị phân Java (bytecode)" tạo ra sự khác biệt nhỏ nhất !!
Stephen C

Tôi có một câu hỏi, liệu mã bytecode của Java có tương tác với nhân hệ điều hành không? Nếu vậy, cùng một mã byte không thể được áp dụng cho các nhân khác nhau vì các chức năng của Kernel khác nhau, phải không? Hoặc JVM chứa tất cả các chức năng hạt nhân cho mỗi hạt nhân khác nhau, rất khó tin ...
henryyao

9

Không, ngược lại. Đó là vì bạn sử dụng máy ảo mà chương trình Java trở nên độc lập.

Máy ảo không độc lập, bạn phải cài đặt một máy được tạo riêng cho loại hệ thống của bạn. Máy ảo tạo ra một nền tảng độc lập trên hệ điều hành.


8

JVM là một "máy mô phỏng" có thể được cài đặt trên các hệ thống khác nhau. Bằng cách này, cùng một mã Java có thể chạy trên các hệ thống khác nhau, bởi vì nó dựa vào JVM, không dựa vào chính hệ thống hoạt động.

Điều này có nghĩa là, điều này cho phép lập trình viên giao tiếp với hệ thống ảo (JVM) và sử dụng các chức năng của nó, thay vì các chức năng của máy và hệ điều hành cụ thể. Vì Java chỉ dựa vào JVM nên nó độc lập với nền tảng (nếu nền tảng đã cài đặt JVM).

Tóm lại, Java không độc lập với nền tảng như vậy, nó yêu cầu cài đặt JVM cho tất cả các hệ thống mà nó phải chạy. Tuy nhiên, nó sẽ chạy trên tất cả các hệ thống đã cài đặt JVM.


4

Java độc lập với nền tảng vì nó có JVM (máy ảo Java). Hãy để chúng tôi minh họa nó bằng một ví dụ thực tế. Cứ cho là bạn được tự do với các thành viên trong gia đình. Nhưng tại sao?

Bởi vì bạn biết họ rõ và họ cũng biết bạn. Nhưng, bạn không được tự do với người nhà của tôi. Bởi vì bạn không biết họ và họ cũng không biết bạn. Nhưng, nếu tôi là bạn của bạn và khi tôi có thể giới thiệu bạn với các thành viên trong gia đình tôi, thì bạn sẽ có thể thoải mái nói chuyện với họ.

Theo cách tương tự, nếu bạn là một mã và tôi là một JVM. Ngoài ra, gia đình của bạn là nền tảng windows và của tôi là nền tảng Linux. Trong trường hợp bạn là ngôn ngữ C hoặc các ngôn ngữ phụ thuộc vào nền tảng khác, bạn chỉ biết các thành viên trong gia đình của mình và ngược lại. Đó là lý do tại sao chỉ nền tảng mà bạn được viết mới biết Mã đó và sẽ hỗ trợ nó. Nhưng nếu bạn là một mã JAVA và khi bạn đến với gia đình tôi viz. nền tảng Linux và nếu bạn tìm thấy tôi, JVM, thì tôi có thể giới thiệu bạn với gia đình tôi, nền tảng Linux và bạn sẽ có thể tương tác với nó.

Đối với các ngôn ngữ phụ thuộc vào nền tảng, không có bất kỳ người bạn nào giống như JVM để họ giới thiệu mình với bất kỳ họ nền tảng nào. Đó là cách Java độc lập với nền tảng. :)


3

JVM tóm tắt từ nền tảng cụ thể. Chương trình của bạn chỉ dựa vào JVM và vì JVM có sẵn cho các nền tảng khác nhau như Windows và Linux, nên chương trình của bạn độc lập với nền tảng (nhưng phụ thuộc vào jvm).


3

Trong c / c ++, mã nguồn (tệp chương trình c) sau khi biên dịch bằng trình biên dịch được chuyển đổi trực tiếp thành mã máy gốc (có thể hiểu được đối với máy cụ thể mà u biên dịch mã trên đó). Và do đó mã đã biên dịch của c / c ++ không thể chạy trên các hệ điều hành khác nhau.

Nhưng đối với Java: tệp nguồn của java (.java) sẽ được biên dịch bằng trình biên dịch JAVAC (có trong JDK) cung cấp mã Byte (tệp .class) có thể hiểu được đối với bất kỳ JVM nào được cài đặt trên bất kỳ hệ điều hành nào (Hệ thống vật lý) .

Ở đây chúng ta cần có JVM khác nhau (phụ thuộc vào nền tảng) cho các Hệ điều hành khác nhau mà chúng ta muốn chạy mã, nhưng tệp .class (mã đã biên dịch / Mã trung gian) vẫn giống nhau, vì nó có thể hiểu được với bất kỳ JVM nào được cài đặt trên bất kỳ hệ điều hành nào.

Trong c / c ++: chỉ có mã nguồn là độc lập với máy. Trong Java: cả mã nguồn và mã đã biên dịch đều độc lập với nền tảng.

Điều này làm cho Nền tảng Java (máy) độc lập.


3

java không phải là nền tảng Độc lập, bản thân nó là một nền tảng, dựa trên nền tảng đó các ứng dụng java chạy, nhưng nền tảng java thì bản thân nó phụ thuộc vào nền tảng


2

1:jvm(tức là máy ảo java) là một tập hợp các chương trình có chứa nhiều tệp cung cấp các chức năng khác nhau có trên một thư mục (tức là tập hợp các chương trình ở định dạng cấp trung bình) như được gọi packages. jvmgiúp không bị quá tải vì o/snó chỉ giúp thực thi các .classtệp hoặc ứng dụng java chỉ một mình nó. Nó giúp tạo định dạng cấp trung bình bằng nhau sau khi được trình biên dịch java tuân thủ, sau đó nó cung cấp mã byte (tệp .class) mà không dành riêng cho o/sprocessor.
2: jvm tạo mã byte thành .exetệp cho bộ xử lý để có thể hiểu được và phân bổ bộ nhớ phân bổ cho mọi chức năng sau khi nhận được mã byte frm.
3: jvm cũng giải phóng vị trí bộ nhớ từ ram sau khi điều khiển làm cho quá trình thực thi kết thúc.


2

JVM phụ thuộc vào hệ điều hành. cho mỗi os JVM khác nhau.

".class" giống nhau đối với tất cả các JVM. vì vậy, mọi JVM đều hiểu dữ liệu tệp ".class" đó.

Windows phụ thuộc JVM cung cấp hướng dẫn phụ thuộc cửa sổ cho cửa sổ JVM phụ thuộc linux cung cấp hướng dẫn phụ thuộc linux cho linux.

nó giống như nó cho các hệ điều hành khác. vì vậy, java chạy trên bất kỳ hệ điều hành nào.

đó là lý do tại sao java là hệ điều hành độc lập.


2

Nói một cách dễ hiểu:

Ngôn ngữ lập trình Java độc lập với nền tảng.

JVM phụ thuộc vào nền tảng


1

Java không độc lập với nền tảng mà nó chạy trên JVM. Phải nói rằng, bạn có được sự độc lập về nền tảng thông qua lập trình chống lại một máy trừu tượng duy nhất có các nhận thức cụ thể trên hầu hết các nền tảng hệ điều hành phổ biến (và một số thiết bị nhúng).

Một ý tưởng liên quan là lớp trừu tượng phần cứng có trong nhiều hệ điều hành cho phép cùng một hệ điều hành chạy trên các phần cứng khác nhau.

Trong câu hỏi ban đầu của bạn, Turbo C là tương thích với chương trình javac và JVM là OS / HAL.


1

Không độc lập có nghĩa là mã Java sẽ có thể chạy trên bất kỳ máy nào và không cần cài đặt phần mềm đặc biệt (JVM trong trường hợp này phải có trong máy)?

Với Java, bạn có thể biên dịch mã nguồn trên Windows và mã đã biên dịch (chính xác là bytecode) có thể được thực thi (thông dịch) trên bất kỳ nền tảng nào chạy JVM. Vì vậy, có bạn cần một JVM nhưng JVM có thể chạy bất kỳ mã đã biên dịch nào, mã đã biên dịch độc lập với nền tảng .

Nói cách khác, bạn có cả tính di động của mã nguồn và tính di động của mã đã biên dịch.

Ví dụ, chúng ta cần có Turbo C Compiler để biên dịch mã nguồn C / C ++ và sau đó thực thi nó .. Máy phải có trình biên dịch C.

Máy không nhất thiết phải có trình biên dịch C, máy phải sử dụng hệ nhị phân dành riêng cho nền tảng. Với C hoặc C ++, mã được biên dịch cụ thể cho từng kiến ​​trúc, nó độc lập với nền tảng .

Nói cách khác, với C / C ++, bạn có khả năng di động của mã nguồn (với một số nguyên tắc) nhưng không có tính di động của mã đã biên dịch: bạn cần phải biên dịch lại cho từng kiến ​​trúc thành các tệp nhị phân nền tảng cụ thể.


1

JVM sẽ phụ thuộc vào nền tảng.
Nhưng bất cứ điều gì nó sẽ tạo ra sẽ độc lập với nền tảng. [mà chúng tôi gọi là bytecode hoặc đơn giản bạn có thể nói là ... tệp lớp]. vì lý do đó Java được gọi là độc lập với nền tảng
bạn có thể chạy cùng một tệp lớp trên Mac cũng như trên Windows nhưng nó sẽ yêu cầu JRE.


0

bytecode không độc lập với dạng tấm mà là JVM của nó làm cho bytecode độc ​​lập. Bytecode không phải là mã matchine. bytecodes là các mã số nhỏ gọn, hằng số và tham chiếu (thường là địa chỉ số) mã hóa kết quả phân tích cú pháp và phân tích ngữ nghĩa của những thứ như kiểu, phạm vi và độ sâu lồng nhau của các đối tượng chương trình. Do đó, chúng cho phép hiệu suất tốt hơn nhiều so với việc giải thích trực tiếp mã nguồn. bytecode cần được thông dịch trước khi thực thi, điều này luôn được thực hiện bởi trình thông dịch JVM.


0

Chỉ là một ghi chú bên lề cho cuộc thảo luận về JVM và JIT Compilation. Đây là nguyên tắc tương tự như với C # và CLR và ở một mức độ nào đó trong Python, và khi ai đó nói rằng mã chạy "trực tiếp trên phần cứng" thực sự đúng trong các hướng dẫn đã được biên dịch sẽ có thể tận dụng tối ưu hóa trên máy / cpu nó đang được chạy. Vì vậy, ngay cả khi quá trình biên dịch ban đầu của một mô-đun khá chậm, thì lần tiếp theo mô-đun này được chạy, mã được thực thi sẽ chạy ở tốc độ gốc và do đó, có thể nói là chạy trực tiếp trên phần cứng.


0

Java là nền tảng độc lập theo khía cạnh của nhà phát triển java, nhưng đây không phải là trường hợp cho người dùng cuối, những người cần phải có JVM phụ thuộc vào nền tảng để chạy mã java. Về cơ bản, khi mã java được biên dịch, một mã bytecode được tạo ra thường độc lập với nền tảng. Do đó, nhà phát triển phải viết một mã duy nhất cho toàn bộ loạt nền tảng. Tuy nhiên, lợi ích này đi kèm với một vấn đề đau đầu đối với người dùng cuối, những người cần cài đặt JVM để chạy mã đã biên dịch này. JVM này khác nhau cho mọi nền tảng. Do đó, sự phụ thuộc chỉ có hiệu lực đối với người dùng cuối.


0

Javac - trình biên dịch chuyển đổi mã nguồn sang mã byte. JVM - trình thông dịch chuyển đổi mã byte sang mã ngôn ngữ máy.

Như chúng ta biết java đều là ngôn ngữ dựa trên trình biên dịch ** r & ** . Sau khi mã java còn được gọi là mã nguồn được biên dịch, nó sẽ được chuyển đổi thành mã gốc gọi là BYTE CODE có tính di động và có thể dễ dàng thực thi trên tất cả các hệ điều hành. Mã byte được tạo về cơ bản được biểu diễn ở định dạng thập lục phân . Định dạng này giống nhau trên mọi nền tảng, có thể là trạm làm việc Solaris hoặc Macintosh, windows hoặc Linux. Sau khi biên dịch, trình thông dịch đọc mã byte được tạo và dịch nó theo máy chủ. . Mã byte được thông dịch bởi Máy ảo Java, có sẵn với tất cả các hệ điều hành chúng tôi cài đặt. vì vậy để chuyển các chương trình Java sang một nền tảng mới, tất cả những gì cần thiết là chuyển trình thông dịch và một số quy trình thư viện.

Hy vọng nó giúp!!!


0

Khi chúng tôi biên dịch dữ liệu nguồn C, nó tạo ra mã gốc mà hệ điều hành hiện tại có thể hiểu được. Khi chúng ta di chuyển mã nguồn này sang hệ điều hành khác, nó không thể hiểu được bởi hệ điều hành vì mã gốc có nghĩa là đại diện được thay đổi từ hệ điều hành sang hệ điều hành Vì vậy C hoặc C ++ là phụ thuộc vào nền tảng.

Bây giờ trong trường hợp của java, sau khi biên dịch, chúng tôi nhận được mã byte thay vì mã gốc. Khi chúng ta chạy mã byte, nó được chuyển đổi thành mã gốc với sự trợ giúp của JVM và sau đó nó sẽ được thực thi.

Vì vậy, Java là nền tảng độc lập và C hoặc C ++ không độc lập nền tảng.


0

Câu hỏi hay nhưng khi mã nguồn được thay đổi thành mã byte gốc trung gian bởi một trình biên dịch trong đó nó chuyển đổi chương trình thành mã byte bằng cách đưa ra các lỗi sau khi kiểm tra toàn bộ cùng một lúc (nếu được tìm thấy) và sau đó chương trình cần một trình thông dịch. sẽ kiểm tra từng dòng chương trình và trực tiếp thay đổi nó thành mã máy hoặc mã đối tượng và mỗi hệ điều hành theo mặc định không thể có trình thông dịch java vì một số lý do bảo mật, vì vậy bạn cần phải có jvm bằng mọi giá để chạy nó trong nền tảng hệ điều hành khác nhau đó độc lập như bạn đã nói ở đây có nghĩa là chương trình có thể chạy trong bất kỳ hệ điều hành nào như unix, mac, linux, windows, v.v. nhưng điều này không có nghĩa là mỗi và mọi hệ điều hành sẽ có thể chạy mã mà không cần jvm mà nói rằng chỉ định, triển khai, và ví dụ,nếu tôi tiến lên thì bằng cách thay đổi cấu hình máy tính của bạn để bạn có thể có bộ nạp lớp có thể mở ngay cả mã byte thì bạn cũng có thể thực thi mã byte java, applet, v.v. -bởi nimish :) chúc may mắn


0

{App1 (Java code) ------> App1byteCode} ........ {(JVM + MacOS) giúp hoạt động với App1, App2, App3}

{App2 (Java Code) -----> App2byteCode} ........ {(JVM + LinuxOS) giúp hoạt động với App1, App2, App3}

{App3 (Java Code) -----> App3byteCode} ........ {(JVM + WindowsOS) giúp hoạt động với App1, App2, App3}

Làm thế nào điều này đang xảy ra?

Trả lời: JVM có khả năng đọc ByteCodevà phản hồi phù hợp với hệ điều hành cơ bản Vì JVM đang đồng bộ với hệ điều hành.

Vì vậy, chúng tôi nhận thấy, chúng tôi cần JVM với Đồng bộ hóa với Nền tảng.

Nhưng điều quan trọng chính là lập trình viên không cần phải biết kiến ​​thức cụ thể về Nền tảng và lập trình ứng dụng của mình lưu ý đến một nền tảng cụ thể.

Tính linh hoạt khi viết Chương trình trong Java --- biên dịch ByteCodevà chạy trên bất kỳ Máy nào (Có cần phải có JVM nền tảng PHỤ THUỘC để thực thi nó) làm cho Nền tảng Java trở nên độc lập.


-1

Khi chúng ta biên dịch tệp java, tệp .class của chương trình đó được tạo ra tệp .class chứa mã byte. Mã byte đó độc lập với nền tảng, mã byte có thể chạy trên bất kỳ hệ điều hành nào sử dụng máy ảo java. nền tảng độc lập không chỉ về hệ điều hành mà còn về phần cứng. Khi bạn chạy ứng dụng java trên máy 16 bit mà bạn đã tạo trên 32 bit, bạn không phải lo lắng về việc chuyển đổi các kiểu dữ liệu theo hệ thống đích. Bạn có thể chạy ứng dụng của mình trên bất kỳ kiến ​​trúc nào và bạn sẽ nhận được cùng một kết quả trong mỗi cấu trúc.


-3

Chỉnh sửa: Không hoàn toàn. Xem bình luận bên dưới.

Java không trực tiếp chạy trên bất cứ thứ gì. Nó cần được chuyển đổi thành bytecode bằng JVM.

Bởi vì JVM tồn tại cho tất cả các nền tảng chính, điều này làm cho nền tảng Java không phụ thuộc vào JVM.


1
JVM thông dịch hoặc mã bytecode của JIT. Nó không biên dịch sang nó.
Matthew Flaschen

Đúng. "for the JVM" chính xác hơn.
polygenelubricants

1
jopdesign.com ~ có thể thử lại. những người này nói rằng nó có thể chạy trực tiếp trên phần cứng.
jcolebrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.