『壹』 java中的內存圖,方法在哪一個位置
構造方法沒有返回值,也不能有void,而普通方法是有返回值的可以是void,即返回值為空
方法名與類名相同,可以傳參數。
『貳』 Java構造函數(方法)存儲在jvm哪個內存里
存放到方法區當中;
new出來的是實例對象,實例對象才是存放在堆當中;
構造函數對應的是<init>方法,方法信息隨著類載入器載入到方法區當中。
棧:
以棧幀為單位,存放的不是方法具體的結構,只是通常一個方法對應一個棧幀,對應的入棧出棧就是棧幀的入棧出棧。棧幀中有局部變數表,操作數棧,方法返回地址,動態鏈接。其中局部變數表存放局部變數,包括形參,非靜態方法默認在第一個索引存放一個this變數;操作數棧用於操作局部變數表和一些值的運算,比如讀取表中變數的值進行運算,或存放相應的值到局部變數表中;方法返回地址則是用於記錄對應方法的下一條指令的地址;動態鏈接是符號引用變成的直接引用。
堆:
存放實例對象,在jdk7開始,還存放靜態變數和字元串常量池
方法區:
存放類元信息,比如完整類名全稱,public,abstract等修飾符,實現的介面有序列表等;方法信息,比如修飾符,返回類型等;JIT代碼緩存,也就是被即時編譯器編譯後的熱點代碼,用於提高性能;域信息,也就是屬性信息,比如修飾符,類型等;運行時常量池,位元組碼文件中常量池的運行時表現,類似符號引用的記錄,不過蘊含的信息更為豐富,而且具有動態性。jdk6及以前,還存放靜態變數,運行時常量池中還存放字元串常量池,到了jdk7則移到了堆中。
『叄』 java中一個類的方法是怎麼存儲的
java內存分析:
都是將內存分為三塊
第一塊內存區域是:棧
第二塊內存區域是:堆
第三塊內存區域是:方法區
棧空間里裝的都是局部變數
堆空間里裝的都是new出來的東西,特殊的對象 (非static修飾的全局變數是特殊的對象,在堆內存區域內)
方法區里裝的都是基本類型常量和字元串常量、static修飾的全局變數、代碼
『肆』 java中,靜態方法被調用是,存儲在內存的哪個區域是棧還是放大區還是兩者都有
在JDK8之前,靜態成員(靜態變數和靜態方法)都是存儲在方法區(永久代)中的靜態區中(這里指類被載入後,靜態成員的存儲位置)。但在JDK8之後,永久代被移除了,取而代之的是元空間(metaspace)。但元空間中存儲的主要是.class文件的元數據信息,靜態成員的存儲位置由方法區轉到了堆內存(heap)中。
不過,不管是JDK8,還是更早的版本中,靜態方法的執行(不僅僅是靜態方法,還有普通的成員方法)都是在棧內存(stack)中進行的。每個線程都會在棧內存中開辟一個棧,在調用方法時,對應的方法都會在執行這個方法的線程的棧中創建一個「棧幀」,棧幀中保存了局部變數表(基本數據類型和對象引用)、操作數棧、動態連接和返回地址等信息。等到方法執行完畢,棧幀被銷毀,對應的內存也將被釋放。
『伍』 JAVA中的各種東西存儲在什麼地方
2、堆棧(棧)位於通用RAM(隨機訪問存儲器)中,但是通過堆棧指針可以直接從堆棧指針那裡獲得直接支持。堆棧指針向下移動,則分配新的內存;向上移動,則釋放那些內存。其快速有效性僅次於寄存器。創建程序時,JAVA必須知道存儲在堆棧區的所有項的確切生命周期,以便上下移動堆棧指針。比如,JAVA對象引用存儲於堆棧區,但對象並不存儲於其中。3、堆一種通用的內存池(也位於RAM區),用於存放所有的JAVA對象。堆不同於堆棧的好處是:編譯器不需要知道存儲的數據在堆里存活多長時間,因此堆里分配存儲有很大的靈活性。當需要一個對象時,只需要new一個即可,當執行這行代碼時,會自動在堆里進行存儲分配。不過,用堆進行存儲分配和清理可能比用堆棧進行存儲分配需要更多的時間。4、常量存儲常量值通常在直接放在程序代碼內部,這樣做是安全的,因為它永遠不會被改變。5、非RAM存儲如果數據完全存活於程序之外,那麼它可以不受程序的任何控制,在程序沒有運行時也可以存在。流對象:在流對象中,對象轉成位元組流,通常被發送給另外一台機器。持久化對象:對象被存放於磁碟上。
『陸』 java 靜態方法很多,靜態方法是存儲在哪個代里
我問題是這樣的: 問題補充:我的問題是既然,manager是單例的,那寫成靜態方法的調用又有何不可,從內存的角度分析看?java的gc角度看?能不能詳細說一下 問題補充:suziwen 寫道DAO,MANAGER寫成靜態的是實現 單例,那樣才更省內存。。。我的問題是既然,manager是單例的,那寫成靜態方法的調用又有何不可,從內存的角度分析看?java的gc角度看?能不能詳細說一下 問題補充:yqin 寫道從JVM內存管理的角度談談靜態方法和靜態屬性 我直接用靜態方法得了。
『柒』 JAVA程序保存在哪兒
如果是藍牙傳的話,手機與電腦藍牙適配器配對成功,那你可以直接將jar 格式的文件傳到手機的"其他"文件夾裡面,然後用w700得文件瀏覽功能選中該jar文件就會直接出現安裝選項。
如果是用讀卡器將文件存起來的話,那可以存在其他文件夾,然後用w700得文件瀏覽功能選中該jar文件就會直接出現安裝選項。
『捌』 java的方法中new的對象存儲在內存中那個區域
這個對象存在堆中,還是棧中?
答:堆,new一個對象,一定是在堆中
方法內部new出來的對象,在哪裡存著?
答:堆,new出來對象的實例變數都存在堆上面。
棧,這個東西,需要理解為:線程運行時,才會創建,執行完,就沒了。
Person p = new Person();
上面這段代碼,在執行時,p壓入棧,通過局部變數表,找到對應的【實例數據】,執行完畢後釋放。
『玖』 java中的方法代碼存在了哪裡
類的實例方法在內存中是只有一份,不過肯定不會是第一個對象中,如果是第一個對象的話,那麼當第一個對象被銷毀的時候,那麼後面的對象就永遠無法調用了...
類的實例方法存在一個專門的區叫方法區,事實上類剛裝載的時候就被裝載好了,不過它們在"睡眠",只是這些方法必須當有對象產生的時候才會"蘇醒".(比如,一個輸出類的成員變數的方法,如果連對象都沒有,何來的輸出成員變數).所以,方法在裝載的時候就有了,但是不可用,因為它沒有指象任何一個對象。
而靜態的又不一樣了,靜態的東西存在靜態區,他們和類是一個等級的,就是說只要類被裝載,它們就可以直接用.(用類名來調用).他們不依賴與任何對象,所以也不能輸出任何對象的成員屬性.(除非成員屬性也是靜態的).
而你最後的一句話也是錯的,"類的所有數據在內存中只有靜態的才又空間".
當然不是,每個對象在new的時候都會在堆區中開辟內存,用來保存對象的屬性和方法.(實際上方法保存的只是方法區的引用,如果保存的是方法本身,那麼試想一下,有多少個對象就得有多少個方法,那麼又和第一點中"實例方法在內存中只有一份拷貝"相矛盾了)
好了,事實上內存圖很復雜和麻煩,算比較深的東西了,很多用JAVA多年的人也不太了解其原理,因為開發也不要用..
更多的問題可以去遠標培訓去問技術老師。
『拾』 java在運行的時候,形參保存在什麼地方
當類被載入之後,類的相關信息保存在內存的方法區,同時類內的方法定義也被載入到方法區。
當調用某個方法的時候,虛擬機會為方法在棧內存中分配一個對應的空間,就是棧幀,棧幀中
存放了該方法的參數。當這個方法調用完畢後,對應的棧幀將被收回。