A. java中,靜態變數存儲在哪個區啊,堆還是棧啊,或者說其他地方,謝謝
首先,java裡面是沒有靜態變數這個概念的,不信你自己在方法裡面定義一個static
int
i
=0;java里只有靜態成員變數。它屬於類的屬性。至於他放在那裡?樓上說的是靜態區。我不知道到底有沒有這個翻譯。但是
深入jvm里是是翻譯為方法區的。虛擬機的體系結構:堆,方法區,本地方法棧,pc寄存器。而方法區保存的就是一個類的模板,堆是放類的實例的。棧是一般來用來函數計算的。隨便找本計算機底層的書都知道了。棧里的數據,函數執行完就不會存儲了。這就是為什麼局部變數每一次都是一樣的。就算給他加一後,下次執行函數的時候還是原來的樣子。
B. java類中的靜態方法是何時創建何時銷毀的,存放在內存什麼地方
你確定問的是靜態方法?靜態方法和普通方法一樣都是在jvm類載入階段載入到方法區的,當沒有類載入器引用到該類對象時,full gc時就會被銷毀。
C. java中,靜態方法被調用是,存儲在內存的哪個區域是棧還是放大區還是兩者都有
在JDK8之前,靜態成員(靜態變數和靜態方法)都是存儲在方法區(永久代)中的靜態區中(這里指類被載入後,靜態成員的存儲位置)。但在JDK8之後,永久代被移除了,取而代之的是元空間(metaspace)。但元空間中存儲的主要是.class文件的元數據信息,靜態成員的存儲位置由方法區轉到了堆內存(heap)中。
不過,不管是JDK8,還是更早的版本中,靜態方法的執行(不僅僅是靜態方法,還有普通的成員方法)都是在棧內存(stack)中進行的。每個線程都會在棧內存中開辟一個棧,在調用方法時,對應的方法都會在執行這個方法的線程的棧中創建一個「棧幀」,棧幀中保存了局部變數表(基本數據類型和對象引用)、操作數棧、動態連接和返回地址等信息。等到方法執行完畢,棧幀被銷毀,對應的內存也將被釋放。
D. java 靜態方法很多,靜態方法是存儲在哪個代里
我問題是這樣的: 問題補充:我的問題是既然,manager是單例的,那寫成靜態方法的調用又有何不可,從內存的角度分析看?java的gc角度看?能不能詳細說一下 問題補充:suziwen 寫道DAO,MANAGER寫成靜態的是實現 單例,那樣才更省內存。。。我的問題是既然,manager是單例的,那寫成靜態方法的調用又有何不可,從內存的角度分析看?java的gc角度看?能不能詳細說一下 問題補充:yqin 寫道從JVM內存管理的角度談談靜態方法和靜態屬性 我直接用靜態方法得了。
E. static變數存儲在哪裡
該變數在全局數據區分配內存;
未經初始化的靜態全局變數會被程序自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化);
靜態全局變數在聲明它的整個文件都是可見的,而在文件之外是不可見的;
靜態變數都在全局數據區分配內存,包括後面將要提到的靜態局部變數。對於一個完整的程序,在內存中的
代碼區,全局數據區,堆區,棧區
一般程序的由new產生的動態數據存放在堆區,函數內部的自動變數存放在棧區。自動變數一般會隨著函數的退出而釋放空間,靜態數據(即使是函數內部的靜態局部變數)也存放在全局數據區。全局數據區的數據並不會因為函數的退出而釋放空間。細心的讀者可能會發現,Example 1中的代碼中將
static int n; //定義靜態全局變數
改為
int n; //定義全局變數
程序照樣正常運行。
的確,定義全局變數就可以實現變數在文件中的共享,但定義靜態全局變數還有以下好處:
靜態全局變數不能被其它文件所用;
其它文件中可以定義相同名字的變數,不會發生沖突;
F. java靜態變數存儲在哪個區
java程序在內存中的存儲分配情況:
一、堆區:
1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)
2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身 ujiuye
棧區:
1.每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中
2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧分為3個部分:基本類型變數區、執行環境上下文、操作指令區(存放操作指令)。 ujiuye
方法區:
1.又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變數。
2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變數。
二、內存分區
而內存分為四個區:stack segment,heap segment,data segment,code segment;
stack 區存放函數參數和局部變數;heap 區存放對象;data 區存放static 的變數或者字元串常量; code 區存放類中的方法;
因此,靜態變數是存放在data區的 !
G. 靜態變數存儲在哪個區
對於一個進程的內存空間而言,可以在邏輯上分成3個部份:代碼區,靜態數據區和動態數據區。
動態數據區一般就是「堆棧」。 棧是一種線性結構,堆是一種鏈式結構。進程的每個線程都有私有的「棧」。
全局變數和靜態變數分配在靜態數據區(全局區),本地變數分配在動態數據區,即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變數。
H. JAVA的靜態成員靜態方法存儲在哪兒
T.i,但是靜態變數得有初始值,否則會報錯吧,我記得是,靜態變數可以類名打點直接調用
I. c語言中的靜態存儲變數是存儲在哪裡的,一般什麼時候用
在棧中,這個是系統自己完成的,例如int a=4,而堆是可以由程序員進行隨時申請的這里的棧類似於數據結構中的棧,而堆類似與數據結構中的鏈表。
J. java中靜態方法在內存中的哪個區域
先分清楚運行時分為靜態的「程序指令」和動態的「數據」,
數據又分為動態分配在堆上的,和函數調用時棧上的局部變數。