2013-02-03 39 views
18

Tôi có một câu hỏi về phiên dịch, biên dịch và VMphiên dịch vs Trình biên dịch vs máy ảo

Bây giờ tôi biết sự khác nhau giữa phiên dịch và biên dịch nhưng những gì là khác nhau về máy ảo từ trước 2? Ưu điểm và nhược điểm của máy ảo thông qua trình thông dịch và trình biên dịch là gì?

Thanks a lot

Trả lời

23

Một máy ảo là không chính xác một thay thế cho trình biên dịch hoặc thông dịch viên. Tôi nghĩ rằng bạn đang nghĩ đến một trình biên dịch JIT, đó là bao nhiêu máy ảo được thực hiện.

Một máy ảo chính nó là chính xác những gì tên nói - đó là một máy (bộ xử lý) mà không thực sự tồn tại. Ví dụ, hầu hết các bộ vi xử lý không có bất kỳ cách thức nội tại để xử lý việc phân bổ bộ nhớ, hoặc bất kỳ kiến ​​thức nào về các loại. Mặc dù máy ảo Java có một lệnh new phân bổ một cá thể của một lớp nhất định. Các nhà thiết kế của VM đã quyết định rằng đây là một khái niệm đủ quan trọng trong ngôn ngữ để xứng đáng với mã opcode của riêng nó, đó là đơn vị hoạt động cơ bản trong VM.

Ưu điểm của việc tạo tập lệnh của riêng bạn thường là thu hẹp khoảng cách giữa thời gian biên dịch/tối ưu hóa dài và phiên dịch chậm. Ví dụ, khi bạn biên dịch một lớp Java, bạn không phải thực hiện bất kỳ phân bổ đăng ký hoặc nội tuyến hoặc bất kỳ công cụ biên dịch truyền thống nào. JIT sẽ làm điều đó sau, nhưng chỉ cho các phần của mã mà bạn chạy đủ thời gian, và trải ra trong quá trình chạy chương trình. Tập lệnh hướng dẫn của JVM đủ gần với Java để biên dịch ban đầu nhanh chóng, và nó đơn giản và nhanh chóng để đọc cho máy ảo, không giống như mã nguồn Java.

Đối với thông dịch viên so với trình biên dịch JIT, sự cân bằng thường xung quanh hiệu suất thời gian chạy so với thời gian phát triển.Một JIT mất rất nhiều thời gian để phát triển, nhưng một thông dịch viên chậm hơn rất nhiều trong khi chạy. Trong nhiều trường hợp, như kịch bản và các trang web có kích thước vừa và nhỏ, chương trình không chạy đủ lâu để bạn có thể thấy được lợi ích của việc sử dụng JIT.

Tôi cũng nên đề cập đến phần mềm như VMware. Đây cũng là một máy ảo, nhưng nó sử dụng một bộ hướng dẫn cũng xảy ra được sử dụng trên phần cứng thực. Đó là khái niệm cơ bản giống như một máy ảo ngôn ngữ, ở chỗ nó giả vờ là một cỗ máy không có mặt vật lý, nhưng trong thực tế nó khác và rất phức tạp.

+0

Top Notch Mate, chỉ cần những gì tôi cần – DodoSerebro

+2

"không thực sự tồn tại" không phải là biểu thức chính xác. Điều gì là đúng là có thể không có một bộ xử lý máy sản xuất có thể tiêu thụ cùng một ngôn ngữ bytecode của một VM nhất định. Nó không có nghĩa là một bộ xử lý máy như vậy không thể được sản xuất. – amirouche

14

Plain English

Compiler biến ngôn ngữ này sang khác. Ví dụ, C# thành IL, Java thành mã byte, C++ thành mã máy nhị phân. Không có sự thực thi nào xảy ra ở giai đoạn biên dịch.

Thông dịch viên diễn giải (thực thi) một dòng tại một thời điểm từ tệp nguồn. Chẳng hạn như PHP, Perl, ngôn ngữ kịch bản khác

Virtual Machine có thể tham khảo một vài điều, hai tôi biết:

  • máy ảo Hypervisor liên quan, chẳng hạn như Hyper-V, Xen. Điều này cho phép bạn chạy một số hệ điều hành trên một phần của phần cứng
  • Thời gian chạy phần mềm, như Java Virtual Machine, Common Language Runtime. Phần mềm này cho phép một phần mềm chạy ngôn ngữ trung gian độc lập nền tảng (mã IL, mã byte) và thực hiện các hướng dẫn dành riêng cho máy (just-in-time compilation). Thông thường, máy ảo đó chịu trách nhiệm về các tác vụ vệ tinh khác: quản lý tài nguyên, dọn dẹp bộ nhớ, luồng, bảo mật, v.v.

Không có ưu và khuyết điểm. Cả ba đều làm những công việc khác nhau mà khó có thể so sánh được.

Ngôn ngữ và nền tảng đến không theo thứ tự đặc biệt, có nghĩa là hàng trăm mẫu khác

+0

Cảm ơn rất nhiều, đã hiểu nó một cách hoàn hảo :) – DodoSerebro

+0

Compiler & Interpreter & VM có thể được viết cho bất kỳ ngôn ngữ và ngôn ngữ nào có thể được dịch thành một dạng có thể được được thực hiện bởi một máy ảo gốc. Bất kỳ ngôn ngữ có thể được biên dịch và tất nhiên bất kỳ ngôn ngữ có thể được giải thích. Điều đó không có nghĩa là đó là điều thú vị để làm. – amirouche

6

Bất Máy vs máy ảo

  • máy Real là một người có máy mã được thực thi bởi phần cứng
  • máy ảo là một trong những người có "mã máy" được thực hiện bởi một thông dịch viên.

phiên dịch vs Trình biên dịch

Answer is here

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