0978359287
-
0383180086
niithanoi.education@gmail.com
Trang chủ
Giới thiệu
KHÓA HỌC
LẬP TRÌNH WEB FRONT END
LẬP TRÌNH WEB BACK END
LẬP TRÌNH WEB FULL STACK
LẬP TRÌNH MOBILE
LẬP TRÌNH GAME
ĐÀO TẠO DOANH NGHIỆP
KHÓA HỌC KHÁC
Tutorials
JAVA in 7 DAY
PHP in 7 DAY
PYTHON BASIC
JAVASCRIPT
THUẬT TOÁN
Tin tức
NIIT - ICT HÀ NỘI
CÔNG NGHỆ
SỰ KIỆN NỔI BẬT ICT
THỦ THUẬT CÔNG NGHỆ
TUYỂN DỤNG
Cảm nhận
Thư viện
Liên hệ
Đăng ký học
Trang chủ
Tutorials
Học Java trong 7 ngày
Hiểu ngay Máy ảo Java (JVM) và kiến trúc của Máy ảo Java
Ngày đăng: 28/03/2019 -
Cập nhật: 06/03/2020
Cỡ chữ
Chia sẻ
Mục Lục
Máy ảo Java (Java Virtual Machine) là gì?
1. Kiếm trúc của Máy ảo Java (Java Architecture)
2. Quá trình thực thi và biên dịch mã phần mềm
3. Quá trình biên dịch và thực thi mã C
5. Biên dịch và thực thi mã Java trong Java VM
6. Tại sao Java vừa thông dịch vừa biên dịch?
7. Tại sao Java lại chậm?
Tổng kết
Bài trước chúng ta đã được nghe về "
Máy ảo Java
". Vậy
Máy ảo Java (JVM) là gì
? nó hoạt động như thế nào? thì chúng ta sẽ tìm hiểu trong bài này.
Hiểu về máy ảo Java sẽ giúp bạn trả lời được rất nhiều thắc mắc đấy khi
Tự Học Java
đấy.
Máy ảo Java (Java Virtual Machine) là gì?
Máy ảo Java
tên tiếng Anh là
Java Virtual Machine
(viết tắt là JVM) là:
Một Engine cung cấp Runtime Environment (môi trường chạy mã) để điều khiển mã Java hoặc các ứng dụng.
Nó chuyển đổi Java Bytecode thành ngôn ngữ máy tính hiểu được.
JVM là một phần của JRE (Môi trường chạy Java - Java Run Environment). Nó là viết tắt của Java Virtual Machine
Trong các ngôn ngữ lập trình khác, trình biên dịch (compiler) tạo mã máy cho một hệ thống cụ thể.
Tuy nhiên, trình biên dịch Java (Java Compiler) tạo mã cho một máy ảo được gọi là Máy ảo Java (JVM).
Đầu tiên, mã Java được tuân thủ theo bytecode. Bytecode này được diễn giải trên các máy khác nhau Giữa hệ thống máy chủ và Java Source, Bytecode là ngôn ngữ trung gian.
JVM chịu trách nhiệm phân bổ không gian bộ nhớ.
Cách Máy ảo Java hoạt động
Trong bài học này, qua từng phần bạn sẽ hiểu về:
Máy ảo Java là gì?
Kiến trúc của Máy ảo Java
Quá trình thực thi và biên dịch mã của phần mềm
Quá trình thực thi và biên dịch mã của C
Quá trình thực thi và biên dịch mã của Java
Tại sao Java vừa Thông dịch (Interpreted) vừa Biên dịch (Compiled)?
Tại sao Java lại chậm?
1. Kiếm trúc của Máy ảo Java (Java Architecture)
Hãy hiểu
Kiến trúc của JVM
. Nó chứa classloader, memory area, execution engine v.v.
Kiến trúc của Máy ảo Java
a) ClassLoader
ClassLoader là một hệ thống con được sử dụng để tải các class file. Nó thực hiện ba chức năng chính: Loading, Linking và Initialization (Khởi tạo)
b) Method Area
JVM Method Area lưu trữ các cấu trúc lớp (class) như: metadata, the constant runtime pool và code của các method.
c) Heap
Tất cả các Object, các biến đối tượng liên quan và mảng (Array) của chúng được lưu trữ trong heap. Bộ nhớ này là phổ biến và được chia sẻ trên nhiều luồng.
4) JVM languae Stacks
JVM languae Stacks lưu trữ các biến cục bộ (local variables) và một phần kết quả của nó. Mỗi luồng có JVM stack riêng, được tạo đồng thời khi luồng được tạo.
Một khung mới được tạo bất cứ khi nào một phương thức được gọi và nó sẽ bị xóa khi quá trình gọi phương thức hoàn tất.
5) PC Register
PC Register lưu trữ địa chỉ của hướng dẫn máy ảo Java hiện đang thực thi. Trong Java, mỗi luồng có thanh ghi PC riêng biệt.
6) Native Method Stacks
Native Method Stacks giữ hướng dẫn của mã gốc phụ thuộc vào thư viện riêng. Nó được viết bằng ngôn ngữ khác thay vì Java.
7) Execution Engine
Execution Engine
là một loại phần mềm được sử dụng để kiểm tra phần cứng, phần mềm hoặc hệ thống hoàn chỉnh.
Công cụ thực hiện kiểm tra không bao giờ mang bất kỳ thông tin nào về sản phẩm được kiểm tra.
8) Native Method interface
Native Method interface là một Famework. Nó cho phép mã Java đang chạy trong JVM được gọi bởi các thư viện và ứng dụng gốc.
Native Libraries là một tập hợp các thư viện riêng (C, C ++) cần thiết cho Execution Engine (công cụ thực thi).
2. Quá trình thực thi và biên dịch mã phần mềm
Trước tiên, để viết và thực hiện chương trình phần mềm, bạn cần có những điều sau đây:
1)
Editor
- Để nhập chương trình của bạn vào, có thể sử dụng notepad cho trình biên dịch
2)
Compiler
- Để chuyển đổi chương trình ngôn ngữ cao của bạn thành mã máy gốc
3)
Linker
- Để kết hợp các tệp chương trình khác nhau trong chương trình chính của bạn với nhau.
4)
Loader
- Để tải các tệp từ thiết bị lưu trữ thứ cấp của bạn như Đĩa cứng, Flash Drive, CD vào RAM để thực thi. Việc tải được tự động thực hiện khi bạn thực thi mã của mình.
5)
Execution
- Thực thi mã được xử lý bởi hệ điều hành & bộ xử lý của bạn.
Hãy xem video để hiểu rõ hơn về kiến trúc của Máy ảo Java:
3. Quá trình biên dịch và thực thi mã C
Để hiểu quá trình biên dịch Java trong Java. Trước tiên chúng ta hãy xem nhanh quá trình compiling (biên dịch) và Linking (liên kết) trong C.
Giả sử trong main, bạn đã gọi hai hàm f1 và f2. Hàm main được lưu trong tệp a1.c
Mô tả Quá trình biên dịch mã C - 1
Hàm f1 được lưu trong tệp a2.c
Mô tả Quá trình biên dịch mã C - 2
Hàm f2 được lưu trong tệp a3.c
Mô tả Quá trình biên dịch mã C - 3
Tất cả các tệp này, tức là a1.c, a2.c và a3.c, được đưa vào trình biên dịch. Đâu là đầu ra của các tệp đối tượng tương ứng là mã máy.
Mô tả Quá trình biên dịch mã C - 4
Bước tiếp theo là tích hợp tất cả các tệp đối tượng này vào một tệp .exe duy nhất với sự trợ giúp của trình Linker. Linker sẽ kết hợp tất cả các tệp này lại với nhau và tạo tệp .exe
Mô tả Quá trình biên dịch mã C - 5
Trong quá trình chạy chương trình, một chương trình Loader sẽ tải a.exe vào RAM để thực thi.
Mô tả Quá trình biên dịch mã C - 6
5. Biên dịch và thực thi mã Java trong Java VM
Hãy xem xét quá trình này cho JAVA. Trong main của bạn, bạn có hai method f1 và f2.
Phương thức main được lưu trữ trong tệp a1.java
f1 được lưu trữ trong tệp dưới dạng a2.java
f2 được lưu trữ trong tệp dưới dạng a3.java
Mô tả Quá trình biên dịch mã Java trong JVM - 1
Trình biên dịch sẽ biên dịch ba tệp và tạo ra 3 tệp .class tương ứng chứa
BYTE code
. Không giống như C, không có liên kết được thực hiện.
Java VM hoặc Máy ảo Java nằm trên RAM. Trong quá trình thực thi, sử dụng class loader, class files được đưa vào RAM. Tại đây BYTE code được xác minh cho tính bảo mật.
Mô tả Quá trình biên dịch mã Java trong JVM - 2
Tiếp theo, Execution Engine sẽ chuyển đổi bytecode thành mã máy gốc. Đây chỉ là trong thời gian biên dịch. Đây là một trong những lý do chính tại sao Java tương đối chậm.
Mô tả Quá trình biên dịch mã Java trong JVM - 3
NOTE: JIT or Just-in-time compiler là một phần của Java Virtual Machine (JVM). Nó thông dịch một phần của bytecode có chức năng tương tự cùng một lúc.
6. Tại sao Java vừa thông dịch vừa biên dịch?
Ngôn ngữ lập trình được xếp loại như sau:
Ngôn ngữ bậc cao (Higher-Level): C++, Java
Ngôn ngữ bậc trung (Middle-Level): C
Ngôn ngữ cấp thấp (Low-Level)
Cuối cùng là cấp độ thấp nhất như: Ngôn ngữ máy
Trình biên dịch (compiler) là một chương trình chuyển đổi chương trình từ cấp độ ngôn ngữ này sang cấp độ khác. Ví dụ chuyển đổi chương trình C thành mã máy.
Trình Biên dịch Java chuyển đổi mã Java cấp cao thành bytecode (cũng là một loại mã máy).
Trình Thông dịch (Interpreter) là một chương trình chuyển đổi một chương trình ở cấp độ này sang ngôn ngữ lập trình khác ở cùng cấp độ. Ví dụ chuyển đổi chương trình Java thành C.
Trong Java, trình tạo mã Just-In-Time chuyển đổi bytecode thành mã máy gốc có cùng cấp độ.
Do đó,
Java vừa được biên dịch cũng như thông dịch
.
7. Tại sao Java lại chậm?
Hai lý do chính đằng sau khiến Java chậm là:
Dynamic Linking
: Không giống như C, trong Java liên kết được thực hiện lúc mỗi khi chương trình chạy
Run-time Interpreter
: Việc chuyển đổi bytecode thành mã máy gốc được thực hiện vào thời điểm mã chạy. Chứ không được chuyển đổi trước rồi mới chạy. Điều này là lý do làm cho Java chậm.
Tuy nhiên, phiên bản mới nhất của Java đã giải quyết các vấn đề tắc nghẽn về hiệu năng ở mức độ lớn.
* Dĩ nhiên là Java thường chậm hơn C/C++ thôi, còn tốc độ vẫn là niềm tự hào của Java.
Tổng kết
Như vậy, bài tìm hiểu về
Máy ảo trong Java
chúng ta đã biết về:
Máy ảo JVM hoặc Java là công cụ điều khiển Mã Java. Nó chuyển đổi mã byte Java thành ngôn ngữ máy.
Trong JVM, mã Java được biên dịch thành mã byte. Mã byte này được giải thích trên các máy khác nhau.
JIT hoặc Just-in-time là một phần của Máy ảo Java (JVM). Nó được sử dụng để tăng tốc thời gian thực hiện.
So với các trình biên dịch khác, Java có thể bị chậm khi thực thi.
> Tham gia ngay
Khóa học Java Fullstack
với chuyên gia doanh nghiệp phần mềm hàng đầu để nhanh chóng gia lập làng công nghệ.
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150
Email: hello@niithanoi.edu.vn
Website:
https://niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java
Về trang trước
Bài tiếp theo
Gửi email
in trang
Chia sẻ
Bình luận Facebook
Cùng danh mục
1
Giới thiệu khóa học Java trong 7 ngày
2
Java Platform (Nền tảng Java) là gì? Hướng dẫn cơ bản cho người mới bắt đầu
3
Hiểu ngay Máy ảo Java (JVM) và kiến trúc của Máy ảo Java
4
Hướng dẫn tải và cài đặt Java, Java JDK cho Windows
5
Hướng dẫn Tải và Cài Đặt Java (Java JDK) cho Ubuntu (Linux)
6
Lập trình chương trình Java đầu tiên: Hello World
7
Hiểu Ngay 9 Khái niệm Lập trình hướng đối tượng trong Java qua ví dụ
8
So sánh OOP với các kiểu lập trình khác qua ví dụ
9
Ví dụ về Abtraction (Trừu tượng) trong Lập Trình Hướng Đối Tượng
10
Ví dụ Đóng gói (Encapsulation) trong Lập trình Java OOP
11
Ví dụ thực tế về cách sử dụng Biến, Kiểu Dữ liệu trong Java
12
Ví dụ thực tế về cách tạo Class và Object trong Java OOP
13
Ví dụ về Mảng trong Java - Java Arrays
14
Ví dụ về tạo Mảng Đối tượng trong Java - Array of Objects in Java
15
Ví dụ về cách sử dụng ArrayList trong Java
16
Học thao tác với String trong Java qua các ví dụ
17
Ví dụ về String method trong Java: Length()
18
Ví dụ về String method trong Java: charAt()
19
Ví dụ về String method trong Java: indexOf()
20
Ví dụ về String method trong Java: compareTo()
21
Ví dụ về String method trong Java: contains()
22
Ví dụ về String method trong Java: endWith()
23
Ví dụ về Phương thức replace(), replaceFirst() và replaceAll() trong Java
24
Ví dụ về String method trong Java: toLowerCase() và toUpperCase()
25
02 Cách chuyển đổi Chuỗi -> Số đơn giản trong JAVA
26
Tìm hiểu HashMap trong Java qua ví dụ cụ thể
27
Ví dụ về Đối số dòng lệnh (Command Line Arguments) trong Java
Tutorial
Học PHP trong 7 ngày
Học Lập Trình Python
Học Java trong 7 ngày
JavaScript
HTML
Thuật toán
CSS
JAVA OOP
SQL
Master Bigdata
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Gửi yêu cầu tư vấn thành công!
Tư vấn cho tôi ngay !
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
Gửi cho tôi
Đóng lại
Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
0978 359 287
-
0383 180 086
hello@niithanoi.edu.vn
Chọn khóa học
KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
KHÓA HỌC LẬP TRÌNH PHP WEB
Khóa học PHP Full stack [2023] cho người mới bắt đầu
Khóa học BIG DATA với Hadoop và Spark
Khóa học Lập trình Android tại Hà Nội
[Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
LẬP TRÌNH GAME
Khóa học Lập trình Game Unity
LẬP TRÌNH WEB FRONT END
KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
LẬP TRÌNH WEB BACK END
LẬP TRÌNH JAVA WEB VỚI FRAME WORK
Lập trình Web với Django
Lập trình PHP với Laravel Framework
CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
LẬP TRÌNH WEB FULL STACK
Khóa học Java Full stack (IJFD)
LẬP TRÌNH MOBILE
FRONT-END VỚI REACTJS VÀ REACT NATIVE
Lập trình Android Nâng cao
ĐÀO TẠO CHO DOANH NGHIỆP
KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
Khóa học Automation Testing Chuyên nghiệp
KHÓA HỌC DỰ ÁN
Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
KHÓA HỌC KHÁC
VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
VBA Excel Nâng cao
Khóa học JMeter: Performance Testing
Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký ngay
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!