java中對象的數據結構(待補充)


.java中的堆棧:

如  Car c = new Car();

在這里對象就是new 出來的Car ,這個對象被存放在堆內存里面,而c是這個對象的引用

一般java程序運行時會涉及到如下幾個存儲區域:

程序計數器:
可以看做是當前所執行字節碼的行號指示器。通常是改變計數器字節碼的值來抉擇下一步索要執行的代碼,程序員不直接控制。

寄存器:
在程序中我們無法直接控制,由編譯器管理。

棧區:  
1,每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義的對象的引用以及局部變量。
2,每個棧中的數據都是私有的,其他棧不能訪問。
3,當局部數據用完時,所占內存空間會自動釋放。
JVM棧一個最大的用處是為執行 java方法服務的,每一個方法被執行的時候都會同時創建一個棧幀用於存儲局部變量表,操作棧,動態鏈接,方法出口等信息。
每一個方法從調用直至執行完成的過程都對應着一個棧幀在虛擬機中從入棧到出棧的過程。
棧的優勢在於存取速度比較快,僅次於寄存器。缺點是存儲在棧中的數據的大小和生存周期是確定的,缺乏靈活性。

堆區:
1,通過new建立的數組和對象都存儲在堆中。
2,每一個對象都有相應的內存地址值。
3,對象中的變量都有默認初始化值。
4,數組和對象在沒有引用變量指向它的時候,才變成垃圾,不能再被使用,但是仍然占着內存,在隨后的一個不確定的時間被垃圾回收器釋放掉。
另外要明確的是每一個Java應用都唯一對應一個JVM實例,每一個實例唯一對應一個堆。在java堆中還必須包含能查找到對象類型數據(如對象類型,父類,實現的接口,方法等)的地址信息,
這些類型數據(優先於對象存在)都存儲在方法區中。
堆的優勢在於可以動態地分配內存的大小,生存周期也不必事先告訴編譯器,因為它是運行時動態地分配內存的,並用垃圾回收機制回收那些不用的數據。缺點是存取速度比較慢。

堆內存里面創建的對象一開始所有的成員變量都被初始化為null,即(new Car();)

然后將new Car()的對象地址賦值給c,這個時候c就指向了堆內存中的對象,c就是對象的引用

然后通過c的引用改變堆內存的對象的成員變量的值,如:c.color ="red"; c.num = 6;

還有一種情況就是  ar c2 = c1;

這種情況就是將c的內存地址賦值給c2,這時候c1 和c2 就同時指向一個對象,即如下:

一般是通過對象的引用來訪問對象。待補充和修改

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM