簡體   English   中英

當你聲明一個對象時,堆上到底發生了什么?

[英]What exactly happens on the heap when you declare an object?

在大學學習操作系統課程並深入了解內存管理。 我有一個問題,我的教科書似乎沒有答案。 當我聲明一個對象時,究竟發生了什么? 例如,如果我這樣做:

String one;
String two;

堆上的內存究竟是如何分配的? 或者它還沒有分配,因為編譯器不知道該對象的大小是多少? 我真正想從中弄清楚的是,如果在堆上聲明兩個對象彼此相對靠近,然后在實例化時,第一個對象太大並重疊到第二個對象的內存空間中會怎樣?

這在不同的語言中可能有不同的處理方式,所以我最好根據 Java 進行解釋。 謝謝!

您的聲明不會在堆上分配任何內容。 如果你不初始化它們,兩個字符串都是空的。 在該方法運行的堆棧幀中,將在堆棧上分配兩個字符串“指針”。

至於您的其他問題,對象(包括字符串)在堆上永遠不會相互重疊。 所有內存都在 Java 中管理以保證這一點。 不能保證一個對象相對於另一個對象的存儲位置,並且實際上可以在程序的生命周期中隨着垃圾收集器重新組織您的堆而發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM