2009-08-19 56 views

Trả lời

27

Phương pháp được lưu ở đâu đó khác trong bộ nhớ. Lưu ý rằng các phương thức là mỗi lớp, không phải cho mỗi trường hợp. Vì vậy, thông thường, số lượng các phương thức không thay đổi theo thời gian chạy của một chương trình (có những ngoại lệ). Trong các mô hình truyền thống, nơi các phương thức sống được gọi là "đoạn mã". Trong .net, nó khó khăn hơn: các phương thức ban đầu sống trong assembly, và được ánh xạ vào bộ nhớ quá trình. Ở đó, trình biên dịch vừa mới tạo ra một bản sao thứ hai của một số phương thức trong mã gốc; bản sao này được thực hiện. Mã JIT có thể được tạo và xóa nhiều lần trong suốt thời gian chạy, do đó, nó là thực tế để xem nó cũng như sống "trong Heap".

+0

+1 Tôi yêu thích giải thích ... –

+0

Tôi không nói "trước lớp", nhưng "** mỗi ** - lớp". Các phương thức là mỗi lớp: điều này có nghĩa là mọi phương thức chỉ tồn tại một lần, cho lớp đó. Các trường hợp khác nhau vẫn có cùng phương pháp. Thuộc tính/thuộc tính là mỗi trường hợp: một thuộc tính tồn tại cho mỗi trường hợp, tức là các phiên bản khác nhau có các giá trị khác nhau cho một thuộc tính. –

+0

@Martin: tôi có một mối quan ngại về vấn đề này. Tôi không hiểu tại sao mã JIT tạo ra một bản sao mỗi khi phương thức đó được thực thi. bạn đã nói rằng các phương thức là Per-Class và tôi 100% đồng ý với điều đó nhưng tôi cũng tin rằng khi một phương pháp được gọi là nó đề cập đến cùng một phương thức thực tế với việc sao chép, bởi vì nếu có một số bạn nói) thì phương thức có thể là Per-Class như thế nào. – Singleton

2

Phương thức lớp được lưu trữ cùng với tất cả mã trong phân đoạn bộ nhớ chương trình chuyên dụng có nghĩa là để lưu trữ mã. Mỗi mã của phương thức được lưu trữ một lần.

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