① 類是一個數據類型,類存在內存中的什麼地方
類在定義的時候是沒有為它分配空間的,僅僅將類所定義的數據結構信息保存下來;因為類也是一種數據類型,就像int,我們沒有定義該類型的變數的時候它是不會佔用內存的。當我們聲明一個類的對象(或其引用)的時候,計算機才會分配存儲空間出來。
② C++類編譯好後,成員變數存儲在什麼位置代碼區
內存被他為棧區和堆區,程序的全局變數和局部變數這些數據是存放在棧中,因為一個子程序或函數調用結束後,函數或子程序使用的內存全被回收,這人實現的方法就是棧。函數在調用編譯器會在棧中分配足夠的空間,然後將數據全部壓入棧中,等調用結束會自動清空棧,這樣函數所使用的內存就消失了。
但我們知道動態內存是可以誇函數使用的,這是因為動態內存是分配在堆中,不受棧這個條件的限制,所以動態內存需要我們自己去釋放,如果我們自己不釋放就會造成內存泄漏,但操作系統會在程序結束後回收程序使用的所有內存。
至於代碼區,數據區,棧區,這些在8086中是很重要的,這是因為8086CPU的問題。現在的32位CPU和16位CPU在對這些區的定義不一樣。32位CPU可以不用去管這些區,但在進行32匯編時還是要需要,不同區會有不同的屬性,但對程序的整體影響不大。
建議你去看羅雲彬的win32匯編,這本書對這些說得很清楚,只是書有點厚,難懂。
③ java中 static變數和方法到底是存在內存什麼區域
JVM內存總體一共分為了
4個部分(stack segment、heap segment、code segment、data segment)
當我們在程序中,申明一個局部變數的時候,此變數就存放在了 stack segment(棧)當中;
當new 一個對象的時候,此對象放在了heap segment(堆)當中;
而static 的變數或者字元串常量 則存在在 data segment(數據區)中;
那麼類中方法的話,是存在在 code segment(代碼區)中了。
④ 在java里一個方法內部定義的變數比如說方法的參數還有方法體內定義的變數是不是放在棧內存中
是的,在棧中。如果是類成員變數放在堆中
⑤ java語言中,類的成員變數分配在哪個內存區
成員變數有靜態和非靜態,靜態成員變數是共享數據,在共享區中,也叫方法區中。
非靜態成員變數在堆內存中,作用於整個類中。
而局部變數在棧內存中,定義在函數中,函數結束內存釋放。
⑥ JAVA中類中的方法存儲在什麼地方
類的實例方法在內存中是只有一份,不過肯定不會是第一個對象中,如果是第一個對象的話,那麼當第一個對象被銷毀的時候,那麼後面的對象就永遠無法調用了...
類的實例方法存在一個專門的區叫方法區,事實上類剛裝載的時候就被裝載好了,不過它們在"睡眠",只是這些方法必須當有對象產生的時候才會"蘇醒".(比如,一個輸出類的成員變數的方法,如果連對象都沒有,何來的輸出成員變數).所以,方法在裝載的時候就有了,但是不可用,因為它沒有指象任何一個對象。
⑦ Java的類成員變數和類成員方法是不是可以隨便放到哪裡的
根據面向對象的思維,一個方法必須放在其對應類,其他的類如果調用該方法,應該用自己實例化的對象在外部函數或者主函數去調用。
根據你意思:
public static Vector cards = new Vector();
這句話應該寫在外部類中,這樣所有內部類都認識cards了!
public static void post()
這句話是你定義的一個方法,在HelpDialog這個類里!因此要使用這個方法你必須在用到post()
方法的類里繼承HelpDialog這個父類,並且把post()方法實例化 ( public static void post(){}
)
⑧ java的成員變數是存在於哪裡如果是堆中該如何回收呢,能用system.gc嗎
Java成員變數存儲在堆中:創建出來的對象只包含屬於各自的成員變數,並不包含成員方法。同一個類對象擁有各自的成員變數,存儲在各自的堆中,但是他們共享該類的方法,並不是創建一個對象就把成員變數復制一次。
當一個對象(包括對象中的成員變數)沒有對象引用指向原先分配給某個對象的內存時,該內存便成為垃圾。JVM的一個系統級線程會自動釋放該內存塊,可以使用system.gc
⑨ JAVA中的類成員變數是存在堆還是棧裡面呀
類的成員變數都在堆上,只有方法裡面定義的基礎變數,在方法裡面定義的引用
其他對象的引用放在棧上(這個時候被引用的對象和它的成員變數還是在堆上)
也就是說,線程上下文的東西在棧上,其他統統在堆上。