Các trường sơ thẩm (bao gồm các trường sao lưu thuộc tính) nhận bản sao N cho các đối tượng N.
Các trường tĩnh có được một bản sao duy nhất cho mỗi lớp.
Các phương thức là các khối mã byte (hoặc sau JIT, các khối lệnh gốc) là một phần của "hình ảnh" hoặc đoạn mã thực thi của chương trình. Các phương thức đã là một phần của hình ảnh chương trình khi nó nằm trên đĩa. Khi hình ảnh được tải bởi HĐH (hoặc CLR), sẽ có một bản sao được chia sẻ duy nhất của mã phương thức.
Chúng không phải là một phần của "heap" hoặc phân bổ thời gian chạy nói chung, trừ trường hợp bạn có thể sử dụng trình biên dịch có thể lưu trữ để biên dịch các phương thức mới một cách nhanh chóng. Các phương thức không được "phân bổ" như các đối tượng và chúng không "được phân bổ" liên quan đến việc tạo đối tượng. Chúng chỉ tồn tại như một phần của chương trình trước khi một đối tượng duy nhất được khởi tạo. Ngay cả lambdas / đại biểu không được phân bổ trên bay. Trình biên dịch tạo các lớp theo yêu cầu để thực hiện các đối tượng mã có vẻ động này và chúng cũng tồn tại như một phần của hình ảnh mã byte trên đĩa.
CẬP NHẬT mỗi bình luận:
Tiêu chuẩn JVM có điều này để nói:
2.5.4. Khu vực phương pháp
Máy ảo Java có một vùng phương thức được chia sẻ giữa tất cả các luồng của Máy ảo Java. Vùng phương thức tương tự với vùng lưu trữ cho mã được biên dịch của ngôn ngữ thông thường hoặc tương tự với phân đoạn "văn bản" trong một quy trình của hệ điều hành. Nó lưu trữ các cấu trúc trên mỗi lớp như nhóm dữ liệu phương thức, trường và phương thức hằng số thời gian chạy và mã cho các phương thức và hàm tạo, bao gồm các phương thức đặc biệt (§2.9) được sử dụng trong khởi tạo giao diện lớp và cá thể và khởi tạo giao diện.
Vùng phương thức được tạo khi khởi động máy ảo. Mặc dù khu vực phương thức là một phần logic của heap, các triển khai đơn giản có thể chọn không thu gom rác hoặc nén nó. Phiên bản đặc tả Máy ảo Java này không bắt buộc vị trí của vùng phương thức hoặc các chính sách được sử dụng để quản lý mã được biên dịch. Vùng phương thức có thể có kích thước cố định hoặc có thể được mở rộng theo yêu cầu của tính toán và có thể được ký hợp đồng nếu vùng phương thức lớn hơn trở nên không cần thiết. Bộ nhớ cho vùng phương thức không cần phải liền kề nhau.
Vì vậy, rõ ràng là (1) có thông số kỹ thuật không cho biết cách thực hiện, nhưng (2) nó tương tự như khu vực lưu trữ cho mã được biên dịch của một ngôn ngữ thông thường, nghĩa là. đoạn văn bản. Đây là điểm tôi đang thực hiện.