Skip to content
Đăng nhập
logo.png

JVM là gì? Cách hoạt động của Java Virtual Machine (JVM)

Java Virtual Machine JVM là một trong những yếu tố quan trọng nhất của ngôn ngữ lập trình Java. Nó là phần mềm cài đặt trên các thiết bị cục bộ và có khả năng chạy trên nhiều HĐH. Việc hiểu rõ về khái niệm và kiến trúc hay lợi ích mà JVM là điều rất quan trọng.

1. Khái niệm JVM là gì?

Java Virtual Machine (JVM) là môi trường thực thi độc lập với nền tảng cho ngôn ngữ Java. Nó là một phần mềm đóng vai trò như một “máy ảo” nhằm thực thi chương trình viết bằng bytecode.

JVM có thể chạy trên nhiều nền tảng khác nhau như Windows, Linux và MacOS. Nó không cần phải biên dịch lại chương trình. Chương trình Java được biên dịch thành mã byte code. Mã bytecode này sẽ được thực thi trên JVM, được dịch sang chính mã máy của HĐH đó.

JVM cung cấp một số tính năng như quản lý bộ nhớ, kiểm tra an toàn. Đồng thời còn thu gom rác để giúp các chương trình Java chạy hiệu quả và đáng tin cậy. JVM tạo và quản lý các luồng (threads) trong ứng dụng Java để tăng xử lý đa luồng.

JVM là một phần quan trọng của nền tảng Java. Nó cho phép các chương trình chạy trên nhiều nền tảng khác nhau mà không phải thay đổi mã nguồn.

jvm-la-gi

2. Java Virtual Machine hoạt động như thế nào?

Java Virtual Machine (JVM) hoạt động bằng cách thực thi mã bytecode được tạo ra từ mã nguồn Java bằng cách sử dụng quy trình sau:

  • Biên dịch: Mã nguồn Java được biên dịch thành mã byte code bằng trình biên dịch Java (javac).
  • Tải lên lưu trữ: Mã bytecode được tải lên lưu trữ và chờ để thực thi.
  • Kiểm tra bytecode: Trước khi thực thi, JVM kiểm tra mã bytecode để đảm bảo tính toàn vẹn và an toàn của chương trình. Nếu có lỗi trong mã bytecode, JVM sẽ báo lỗi và chương trình sẽ không thực thi.
  • Thực thi: Mã bytecode được thực thi bởi JVM. JVM đọc từng bytecode trong chương trình Java và thực hiện các hành động tương ứng với bytecode đó. Nếu có lỗi xảy ra trong quá trình thực thi, JVM sẽ thông báo lỗi và dừng thực thi chương trình.
  • Quản lý bộ nhớ: JVM quản lý bộ nhớ được sử dụng bởi chương trình Java. JVM sẽ tự động quản lý bộ nhớ và giải phóng bộ nhớ không sử dụng được.
  • Thu gom rác: JVM sử dụng một tiến trình thu gom rác để giải phóng bộ nhớ đã không sử dụng được.
  • Kết thúc chương trình: Khi chương trình kết thúc, JVM giải phóng tất cả bộ nhớ và tài nguyên được sử dụng bởi chương trình.
jvm-la-gi

3. Các thành phần Kiến trúc bên trong của JVM

JVM có kiến trúc phức tạp với nhiều thành phần quan trọng bên trong. Các thành phần này bao gồm:

  • Class Loader: Lớp Class Loader là thành phần đầu tiên của JVM. Nó có trách nhiệm tải các file .class vào bộ nhớ JVM để chúng có thể được thực thi. Class Loader được phân chia thành ba loại: Bootstrap Classloader, Extension Class Loader và System Class Loader.
  • Runtime Data Area: Runtime Data Area là không gian bộ nhớ sử dụng bởi JVM để thực thi các chương trình Java. Nó được chia thành 5 khu vực:
  • Method Area: Khu vực này lưu trữ các mã bytecode và các thông tin cần thiết cho các method trong chương trình Java.
  • Heap: Heap là nơi lưu trữ các đối tượng Java được tạo ra bởi chương trình Java. Khu vực này cũng được sử dụng để quản lý bộ nhớ động trong Java.
  • Java Stack: Java Stack lưu trữ các biến cục bộ và các giá trị ngăn xếp được sử dụng trong các method của chương trình Java.
  • Native Method Stack: Native Method Stack là nơi lưu trữ các thông tin liên quan đến các method được thực thi bên ngoài JVM.
  • PC Registers: PC Registers chứa các thông tin về trạng thái thực thi của thread.
  • Execution Engine: Execution Engine là thành phần thực thi mã bytecode. Nó có trách nhiệm biên dịch các mã bytecode thành mã máy để thực thi chương trình Java.
  • Native Method Interface: Native Method Interface cung cấp một cách để kết nối chương trình Java với các thư viện và ứng dụng bên ngoài được viết bằng các ngôn ngữ khác như C, C++.
  • Java Native Interface: Java Native Interface cung cấp một cách để kết nối chương trình Java với các ứng dụng và thư viện bên ngoài.
  • Security Manager: Security Manager là thành phần quản lý an ninh của JVM. Nó đảm bảo rằng các chương trình Java không được thực thi các hành động đe dọa an ninh hệ thống.
Java-Virtual-Machine

4. Quản lý bộ nhớ trong JVM thế nào?

JVM sử dụng một kỹ thuật quản lý bộ nhớ tự động được gọi là “Garbage Collection” (GC). GC quét các đối tượng đã cấp phát trong bộ nhớ. Nó tự động thu hồi các đối tượng không còn được sử dụng. Quá trình này hoàn toàn tự động và không cần lập trình viên.

GC sử dụng một số thuật toán để quản lý bộ nhớ. Các thuật toán này bao gồm:

  • Mark and Sweep: Thuật toán này quét toàn bộ bộ nhớ và đánh dấu các đối tượng được sử dụng. Sau đó, nó thu hồi bộ nhớ của các đối tượng không được đánh dấu.
  • Copying: Thuật toán này tách bộ nhớ thành hai phần. Một phần được sử dụng để lưu trữ các đối tượng đang được sử dụng. Còn lại được sử dụng để lưu trữ các đối tượng không còn sử dụng. Sau đó, sao chép các đối tượng đang sử dụng sang một phần của bộ nhớ . Chúng sẽ được giải phóng phần bộ nhớ còn lại.
  • Generational: Thuật toán này sử dụng việc phân loại các đối tượng theo tuổi để quản lý bộ nhớ. Các đối tượng mới được tạo ra được lưu trữ trong một vùng bộ nhớ được gọi là “eden space”.

Sau đó, các đối tượng được chuyển sang vùng bộ nhớ “survivor space” khi sống sót qua một lần quét. Các đối tượng có tuổi cao hơn được chuyển sang vùng bộ nhớ “old generation”. Khi bộ nhớ “eden space” hoặc “survivor space” đầy, GC sẽ chuyển các đối tượng sang vùng bộ nhớ khác.

JVM cũng cung cấp một số cấu hình để tùy chỉnh quá trình GC. Ví dụ, bạn có thể chỉ định thời gian tối đa cho quá trình GC. Một cách khác là chọn các thuật toán khác nhau để quản lý bộ nhớ.

jvm-la-gi

5. Nạp và thực thi file Java class trong JVM

Để nạp và thực thi một file Java class trong JVM, bạn cần thực hiện các bước sau:

5.1 Biên dịch file Java

Đầu tiên, bạn cần biên dịch file Java thành file bytecode, được lưu trữ trong file có đuôi “.class”. Bạn có thể sử dụng trình biên dịch Java (javac) để thực hiện việc này.

Ví dụ: Nếu bạn có một file Java tên là “MyClass.java”, bạn biên dịch bằng cách chạy lệnh trong command line:

javac MyClass.java

5.2 Nạp file bytecode vào JVM

Sau khi file bytecode được tạo ra, bạn có thể nạp nó vào JVM bằng cách sử dụng lệnh “java”. Lệnh này sẽ nạp file bytecode vào JVM và tạo ra một đối tượng của class đó để thực thi.

Ví dụ: Nếu bạn đã biên dịch file MyClass.java thành file bytecode “MyClass.class”. Bạn có thể nạp nó vào JVM bằng cách chạy lệnh sau trong command line:

java MyClass

Lệnh này sẽ nạp file bytecode “MyClass.class” vào JVM và tạo ra một đối tượng của class MyClass để thực thi.

5.3. Thực thi file bytecode

Khi đối tượng của class được tạo ra, JVM sẽ thực thi nó. Điều này có nghĩa là phương thức main của class sẽ được thực thi. Các câu lệnh trong phương thức main sẽ được thực thi theo thứ tự.

Ví dụ: Nếu class MyClass có phương thức main như sau:

public static void main(String[] args) {

            System.out.println(“Hello, world!”);

}

Khi bạn chạy lệnh “java MyClass”, JVM sẽ nạp file bytecode “MyClass.class” vào. Nó sẽ thực thi phương thức main của class MyClass. Kết quả là chuỗi “Hello, world!” được in ra màn hình.

Hy vọng rằng những thông tin về Java Virtual Machine JVM là gì đã giúp bạn có cái nhìn tổng quan nhất. Hãy sử dụng nó hiệu quả trong lập trình. Nếu bạn còn bất kỳ thắc mắc hoặc muốn tìm hiểu thêm về VPS giá rẻ, hãy để lại bình luận ở bên dưới nhé! Chúng tôi sẽ cố gắng giải đáp sớm nhất.

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!

深圳SEO优化公司银川关键词排名包年推广价格晋城网站优化排名报价中卫关键词排名包年推广多少钱南通百搜标王公司大运百度爱采购价格马鞍山阿里店铺运营公司广东网站改版多少钱绍兴百度seo公司阳江关键词按天计费价格邢台网站设计公司钦州seo网站推广公司临沧模板网站建设西乡百度竞价包年推广报价福田外贸网站制作价格黔西南网页制作报价恩施百度爱采购多少钱汕尾seo排名价格包头百度竞价包年推广推荐清远网页设计多少钱丹东网站制作多少钱延安网络推广哪家好衡阳网页设计报价阳泉网站搜索优化公司嘉兴企业网站制作报价玉溪关键词按天扣费价格自贡关键词排名推荐宁波网站开发迁安关键词按天计费多少钱永新百姓网标王延安优秀网站设计报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化