2011-12-21 43 views
5

Tôi hiện đang tìm hiểu khái niệm về bộ nhớ của java, ngăn xếp và đống, tôi biết rằng các biến địa phương và các cuộc gọi phương thức sống ở một nơi được gọi là ngăn xếp. và các vật thể sống bên trong một đống. nhưng nếu biến cục bộ đó chứa đối tượng thì sao? hoặc có một tham chiếu đối tượng?Java Các biến cục bộ, tham chiếu đối tượng, biến đối tượng

public void Something(){ 
     Duck d = new Duck(24); 
} 

Hiện nó vẫn còn nằm trong ngăn xếp? và biến thể hiện ở đâu? hãy giữ nó đơn giản nhất có thể. cảm ơn bạn.

Trả lời

11

Biến cục bộ d (được cấp phát trên ngăn xếp) chứa tham chiếu đến đối tượng thuộc lớp Duck. Trong các đối tượng chung được phân bổ trên heap.

Java 6e14 đã thêm hỗ trợ cho một thứ gọi là 'phân tích thoát'. Khi bạn bật nó bằng công tắc -XX:+DoEscapeAnalysis, thì nếu JVM xác định rằng đối tượng được tạo trong phương thức, chỉ được sử dụng trong phương thức đó và không có cách nào để tham chiếu đến đối tượng 'thoát' phương thức đó - nghĩa là chúng ta có thể chắc chắn rằng đối tượng không được tham chiếu sau khi phương thức hoàn thành - JVM có thể phân bổ nó trên stack (xử lý tất cả các trường của nó như thể chúng là các biến cục bộ). Điều này có thể xảy ra trong ví dụ của bạn.

Các trường được phân bổ với phần còn lại của đối tượng, do đó, trên heap hoặc trên ngăn xếp, tùy thuộc vào kết quả phân tích thoát.

+0

được phân bổ bên trong đối tượng mà họ đang ở? hoặc như trong solo trong heap? – KyelJmD

+0

nếu đối tượng được tạo dưới dạng biến mẫu, nó sẽ vẫn nằm trong phân tích Escape? – KyelJmD

+0

bố trí của một đối tượng trong bộ nhớ giống như sau: 8 byte header, và sau đó là các thuộc tính. Nếu biến cá thể là một đối tượng, không phải là một nguyên thủy, thì chỉ con trỏ được lưu trữ trong khối bộ nhớ liên tục và đối tượng có thể được cấp phát ở nơi khác. – socha23

2

Biến tham chiếu đối tượng hoạt động. giống như các biến nguyên thủy - nếu tham chiếu được khai báo là biến cục bộ, nó sẽ nằm trên stack.else nếu refrence là biến mẫu, nó sẽ đi vào heap trong một đối tượng.

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