一、棧(stack ),是指虛擬機器棧。虛擬機器棧用於儲存區域性變數等。區域性變數表存放了編譯期可知長度的各種基本資料型別(boolean、byte、char、short、int、float、long、double)、物件引用 (reference型別,它不等同於物件本身,是物件在堆記憶體的首位址)。方法執行完,自動釋放。
二、堆(heap),此記憶體區域的唯一目的就是存放物件例項,幾乎所有的物件例項都在這裡分配記憶體。這一點在 j**a虛擬機器規範中的描述是:所有的物件例項以及陣列都要在堆上分配。
三、方法區(method area),用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的**等資料。
注意點:編譯完源程式以後,生成乙個或多個位元組碼檔案。
我們使用jvm中的類的載入器和直譯器對生成的位元組碼檔案進行解釋執行。意味著,需要將位元組碼檔案對應的類載入到記憶體中,涉及到記憶體解析。
四、典型**:
person p1 = new person();
person p2 = new person();
person p3 = p1;//沒有新建立乙個物件,共用乙個堆空間中的物件實體。
說明:如果建立了乙個類的多個物件,則每個物件都獨立的擁有一套類的屬性。(非static的)
意味著:如果我們修改乙個物件的屬性a,則不影響另外乙個物件屬性a的值。
類和物件的建立 1 (記憶體的解析)
三.物件導向的兩個要素 類 對一類事物的描述,是抽象的 概念上的定義 物件 是實際存在的該類事務的每乙個個體,因而也稱為例項 inscance 物件導向程式設計的重點是類的設計 設計類,就是設計類的成員 一 設計類,其實就是設計類的成員 屬性 成員變數 field 域 字段 方法 成員方法 函式 m...
子類建立物件時記憶體分配解析
我們根據下面這段 來進行解析 class fu public int getnum class zi extends fu class testdemo 分析 如下圖所示 1 虛擬機器 jvm 尋找到testdemo.class檔案後將其載入到記憶體中。2 主函式main 入棧,在棧中定義zi型別的...
物件的記憶體
當 傳送訊息alloc 給類時,ios平台會在記憶體中分配記憶體塊。該記憶體塊包含了此類宣告的屬性的記憶體。下面讓我們看個例子 下面 宣告了乙個car類。定義了三個屬性 year,make,model。import inte ce car nsobject end 下面 建立了car 類和nsobj...