30/09/2018, 22:22
Java - Biên dịch -Thông dịch
Vừa rồi có đi phỏng vấn, một bác chắc làm cũng được 10 năm, hỏi Java là thông dịch hay biên dịch. Mình trả lời là biên dịch, bác ấy trơn mắt nhìn mình hỏi lại lần nữa. Vẫn trả lời là biện dịch vì tin rằng mình trả lời đúng.
Mặc dù biết khi chuyển sang bytecode JVM sẽ thông dịch từng dòng. anh em nào trên này biết câu trả lời chính xác không.
- Java là ngôn ngữ biên dịch
- Java vừa biện dịch vừa thông dịch
Câu trả lời nào chính xác.
Bài liên quan
Mình nghĩ là vừa biên dịch và vừa thông dịch.
javac.exe có nhiệm vụ biên dịch code java sang byteccode
Sau đó java.exe có nhiệm vụ thông dịch bytecode trong class file sang mã máy tùy vào chip/hệ điều hành.
Java là ngôn ngữ vừa biên dịch vừa thông dịch. Bạn trả lời biên dịch vẫn đúng.
Theo mình là cái ông đó muốn làm khó bạn. Bạn đi chỗ khác xin việc thì tốt hơn.
Với câu hỏi này thì bạn phải trả lời là : Compile once and run everywhere (both)
Javac is Java Compiler – Compiles your Java code into Bytecode
JVM is Java Virtual Machine – Runs/ Interprets/ translates Bytecode into Native Machine Code -> cái cuối dùng JIT
3 bước chính
.java —JAVAC (Java compiler) - >.class— JVM[ Interpreter(Run time code )line by line + JIT(Just in time-Complier)block] ----> Mã máy
Bonus:
An interpreter takes instructions one-by-one and calls some function that represents this instruction in native code (that’s what is mean by interpreting). It will do this over and over, even though finding the right function call for an instruction may be quite slow.
A JIT compiler takes an instruction and translates it into native code, then runs that native code. This may take a bit longer than interpretation on the first go, but as soon as the code is called a second time, it no longer needs to be translated, but runs natively and much faster.
Một câu trả lời trên SOF:
Cái này trước đó có hỏi và đã giải thích rồi. mình vẫn giữ quan điểm nó là ngôn ngữ biên dịch :D, có điều vị trí apply là senior chắc yêu cầu phải giải thích rõ hơn
Nếu là Senior thì mình nghĩ trả lời như vậy có thể không thích hợp. Bạn không nên nghĩ Java là compile hay interperter. Bởi vì mọi ngôn ngữ đều có thể interpreted and/or compiled. Chỉ có trường hợp nó sử dụng hay không thôi
Java là ngôn ngữ biên dịch, làm gì có ngôn ngữ nào vừa biên dịch vừa thông dịch đâu.
Nếu bạn không biết rõ thì không nên nói bừa tránh làm người khác hoang mang.
From Joe: A developer of Sun
The term compiler and interpreter both are valid. They depend on the viewpoint where you stand and view the object. Insider or outsider.
Compiler: from the standpoint of JVM JVM together with ,java is a compiler, because the generated byte-codes are executed directly by JVM (insider).
Interpreter: from the viewpoint of JVM’s guest Operating System (Windows or Linux) JVM is an interpreter because it interprets the byte-codes and run an according subprogram that executes the work (outsider).
JIT-Compiler of JVM: Some works (e.g. IO a file, ++ or --, etc.) can be “foreseen” and therefore can be “compiled” into the guest-native codes in order to enhance the performance. For the guest OS and JVM JIT is a real compiler.