Vì vậy, tôi đã phương pháp này, viết bằng Java:Mã biên dịch JIT ở đâu?
public void myMethod(int y){
int x = 5 + y;
doSomething(x);
}
Và giả ứng dụng của tôi gọi điều này là rất nhiều lần ..
Khi chạy mã biên dịch cho phương pháp này trên Java Virtual Machine, JVM sẽ đầu tiên giải thích phương thức. Sau đó, sau một thời gian, nó sẽ quyết định biên dịch nó sang ngôn ngữ máy nếu tôi hiểu chính xác.
Tại thời điểm này,
Nó có bị ghi đè bằng mã máy trong bộ nhớ không? Nếu nó bị ghi đè, vấn đề về sự khác biệt về kích thước sẽ được giải quyết như thế nào? Nếu nó được ghi vào một số nơi khác trong bộ nhớ, thì bytecode có được nạp vào bộ nhớ giải phóng hay không? Và cũng có thể, nếu cả mã byte bytecode và mã jit được biên dịch nằm trong bộ nhớ, khi ứng dụng lần lượt truy cập phương thức này, thì JVM quyết định thực thi mã được biên dịch jit thay vì mã byte như thế nào?
Tôi có ý tưởng rằng loại điều này sẽ phụ thuộc vào việc bạn đang chạy trên máy tính Windows hay, giả sử, trên bộ vi điều khiển RAM bị đói. Nói cách khác, phụ thuộc vào nền tảng, phải không? – Ghostkeeper
Trả lời 1: Tại sao bạn quan tâm? Câu trả lời 2: JVM giữ mã JITCed cho mỗi phương thức trong đống C, liên kết với thông qua các bảng trong biểu diễn bên trong của đối tượng lớp. Mã này chỉ bị xóa khi JVM kết thúc hoặc trong trường hợp hiếm hoi mà lớp đó được "unloaded". Đó là tất cả được quản lý bởi ma thuật phù hợp. –
"Heap" thực sự là một sự nhầm lẫn ở đây - nếu nó đề cập đến bộ nhớ thu được bằng cách sử dụng các cuộc gọi đến malloc (có thể hoặc có thể không được liên kết trang) các trang tương ứng sẽ phải được đánh dấu là thực thi. Nhiều khả năng, JIT phân bổ bộ nhớ cho mã được tạo bằng cách sử dụng mmap, VirtualAlloc và các loại tương tự. –