2012-10-12 42 views
7

Tôi chỉ tò mò.
giả sử tôi xác định tham chiếu bên trong vòng lặp while/for.JAVA: tham chiếu được xác định trong vòng lặp

JVM có xác định tham chiếu này mỗi lần lặp lại hay được tối ưu hóa để xác định nó một lần?

+2

Ý của bạn là "xác định"? Nó thực sự phụ thuộc vào ý của bạn. Biến sẽ được khởi động lại mọi lúc, nhưng không gian bộ nhớ có thể sẽ được sử dụng lại. –

+1

Ý bạn là gì khi xác định tham chiếu? Nói một cách chính xác, tham chiếu là giá trị của biến, điều này còn xa vời với việc phân bổ một đối tượng. Hai cách giải thích này có những câu trả lời rất khác nhau. –

Trả lời

7

Nó xác định mọi thời gian và chỉ phạm vi lặp lại vòng lặp đó.

Ngay sau khi lặp vòng lặp xong, nó đủ điều kiện cho GC.

Khi Louis Wasserman nhận xét, Biến sẽ được khởi động lại mọi lúc, nhưng không gian bộ nhớ có thể sẽ được sử dụng lại.

+0

cảm ơn bạn. tốt để biết – socksocket

+0

Bạn được chào đón. – kosa

+0

Nó sẽ không đủ điều kiện cho GC. Các ngăn xếp ngăn xếp sẽ tiếp tục tồn tại cho đến khi tái sử dụng bởi một biến tiếp theo tuyên bố sau khi vòng lặp, nếu có, nếu không cho đến khi phương pháp thoát. Không có lệnh JVM nào tương ứng với cú đúp đóng của vòng lặp, do đó không có cách nào để JVM biết rằng khe không còn được sử dụng nữa. – EJP

2

Được xác định mỗi lần. Không có tối ưu hóa cho điều đó (theo kiến ​​thức của tôi).

1

- Các định nghĩa tham khảo mọi sự lặp vòng lặp, nhưng phạm vi của tài liệu tham khảo được gắn chỉ để lặp đó.

- Hãy xem xét rằng bạn có tuyên bố một tài liệu tham khảo bên ngoài vòng lặp, nhưng đối tượng assign để nó bên vòng lặp, sau đó tham chiếu vẫn giữ nguyên, nhưng nó tham chiếu đối tượng mới của loại hình đó trong mỗi lặp lại.

4

Tham chiếu được xác định trên mỗi lần lặp. Khi mã đã được tối ưu hóa thành mã gốc, mã có thể được di chuyển ra ngoài vòng lặp để nó không phải có tác động hiệu suất. Nếu bạn đặt tham chiếu này thành đối tượng new mỗi lần, nó có thể tạo đối tượng mới trên mỗi lần lặp trừ khi việc tạo đối tượng đó cũng được tối ưu hóa.

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