Tại sao Java là một ngôn ngữ lập trình độc lập nền tảng?

Chào các bạn, như ở phần giới thiệu, mình là một Java developer, do đó, blog này mình sẽ tập trung vào Java và các công nghệ liên quan. Nói về lý do mình chọn Java cho sự nghiệp của mình thì thật sự mình cũng không giải thích được, đơn giản mình thích thì mình chọn thôi 😀

Đùa thôi, tập trung vào chuyên môn nhé, bài viết đầu tiên này mình sẽ giải thích lý do tại sao Java là một ngôn ngữ độc lập nền tảng, tất nhiên cũng chỉ ở mức “high level”. Đây cũng là câu hỏi rất thường được hỏi trong các buổi phỏng vấn, bạn mà không trả lời được thì 99% khả năng bạn sẽ fail… haha sợ chưa? Nào, chúng ta cùng bắt đầu nhé.

Giới thiệu 

Đầu tiên, chúng ta tìm hiểu khái niệm nền tảng (platform). Định nghĩa theo kiểu “hàn lâm” thì nền tảng là môi trường bao gồm phần cứng hoặc phần mềm mà một chương trình (ứng dụng) có thể chạy. Ví dụ nền tảng Windows, nền tảng Ubuntu, nền tảng Mac OS…
Bản thân Java vừa là một ngôn ngữ lập trình và cũng là một nền tảng (Java Platform)

Vậy tại sao Java là một ngôn ngữ lập trình độc lập nền tảng?

Trước hết chúng ta cần phải biết tất cả các chương trình đều cần được biên dịch thành dạng mã máy (machine language) để có thể chạy được trên các nền tảng, và mã máy cho các nền tảng là khác nhau ví dụ file thực thi trên Windows là .exe, file thực thi trên linux là .sh… vv

Một chương trình Java sẽ được biên dịch thành một dạng mã đặc biệt (Java bytecode), trên từng nền tảng, Java sẽ cung cấp máy ảo (Java virtual machine – JVM) tương ứng để chuyển mã Java bytecode thành mã máy tương ứng. Do đó, code Java sẽ chạy được trên các nền tảng khác nhau trên các JVM tương ứng. Nên ta gọi Java là ngôn ngữ độc lập nền tàng, WRITE ONE, RUN ANYWHERE (WORA) hay WRITE ONE, RUN EVERYWHERE (WORE). Tóm lại điểm mấu chốt chính là vì Java có JVM.

Java là một ngôn ngữ độc lập nền tảng

Hình minh họa cho vai trò của JVM

Câu hỏi đặt ra là tại sao JVM không biên dịch trực tiếp mã nguồn (source code) Java thành mã máy tương ứng mà phải cần trình biên dịch biên dịch thành Java bytecode rồi mới chuyển bytecode thành mã máy?

Câu trả lời chính là vấn đề hiệu năng (performance) cho chương trình (ứng dụng) Java, việc không biên dịch trực tiếp mã nguồn Java thành mã máy mà cần biên dịch thành Java bytecode rồi mới chuyển bytecode thành mã máy giúp tăng tốc cho ứng dụng Java…

Hết rồi, bài viết đầu tiên ngắn gọn thế thôi, mình sẽ tiếp tục ở các bài viết sau. Rất mong nhận được ý kiến đóng góp của tất cả các bạn.
Xin cảm ơn!

Tham khảo thêm:
http://www.javatpoint.com/difference-between-jdk-jre-and-jvm
http://www.javatpoint.com/internal-details-of-jvm