導航:首頁 > 安裝方法 > 靜態方法存在jvm哪裡

靜態方法存在jvm哪裡

發布時間:2022-07-01 15:35:04

❶ Java構造函數(方法)存儲在jvm哪個內存里

存放到方法區當中;
new出來的是實例對象,實例對象才是存放在堆當中;
構造函數對應的是<init>方法,方法信息隨著類載入器載入到方法區當中。
棧:
以棧幀為單位,存放的不是方法具體的結構,只是通常一個方法對應一個棧幀,對應的入棧出棧就是棧幀的入棧出棧。棧幀中有局部變數表,操作數棧,方法返回地址,動態鏈接。其中局部變數表存放局部變數,包括形參,非靜態方法默認在第一個索引存放一個this變數;操作數棧用於操作局部變數表和一些值的運算,比如讀取表中變數的值進行運算,或存放相應的值到局部變數表中;方法返回地址則是用於記錄對應方法的下一條指令的地址;動態鏈接是符號引用變成的直接引用。
堆:
存放實例對象,在jdk7開始,還存放靜態變數和字元串常量池
方法區:
存放類元信息,比如完整類名全稱,public,abstract等修飾符,實現的介面有序列表等;方法信息,比如修飾符,返回類型等;JIT代碼緩存,也就是被即時編譯器編譯後的熱點代碼,用於提高性能;域信息,也就是屬性信息,比如修飾符,類型等;運行時常量池,位元組碼文件中常量池的運行時表現,類似符號引用的記錄,不過蘊含的信息更為豐富,而且具有動態性。jdk6及以前,還存放靜態變數,運行時常量池中還存放字元串常量池,到了jdk7則移到了堆中。

❷ JAVA的靜態成員靜態方法存儲在哪兒

T.i,但是靜態變數得有初始值,否則會報錯吧,我記得是,靜態變數可以類名打點直接調用

❸ java中,靜態方法被調用是,存儲在內存的哪個區域是棧還是放大區還是兩者都有

在JDK8之前,靜態成員(靜態變數和靜態方法)都是存儲在方法區(永久代)中的靜態區中(這里指類被載入後,靜態成員的存儲位置)。但在JDK8之後,永久代被移除了,取而代之的是元空間(metaspace)。但元空間中存儲的主要是.class文件的元數據信息,靜態成員的存儲位置由方法區轉到了堆內存(heap)中。
不過,不管是JDK8,還是更早的版本中,靜態方法的執行(不僅僅是靜態方法,還有普通的成員方法)都是在棧內存(stack)中進行的。每個線程都會在棧內存中開辟一個棧,在調用方法時,對應的方法都會在執行這個方法的線程的棧中創建一個「棧幀」,棧幀中保存了局部變數表(基本數據類型和對象引用)、操作數棧、動態連接和返回地址等信息。等到方法執行完畢,棧幀被銷毀,對應的內存也將被釋放。

❹ 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區的 !

❺ java靜態資源(靜態方法,靜態屬性)是程序一運行就載入到jvm中,還是當被調用的時候才進行載入呢

當類第一次被調用時載入(靜態方法,靜態屬性的載入就是類載入) 。

1、類中的靜態屬性會被加入到類對象(也可以叫做類的模板,是類的描述) 的構造器中,靜態方法也會被加入到類對象中。

2、當第一次使用類時,JVM會通過類載入器,載入類對象,從而初始化靜態屬性,並裝入類的方法,包括靜態方法和實例方法(方法不會被調用,只是載入,從這個意義上來說,靜態方法和實例方法是類似的)。

3、當創建類的實例對象時,JVM會調用類的構造器,從而初始化類的屬性。

(5)靜態方法存在jvm哪裡擴展閱讀:

類(包括靜態方法、屬性)載入過程:

一、載入。

根據一個類的全限定名(如cn.e.h.test.HelloWorld.class)來讀取此類的二進制位元組流到JVM內部。

將位元組流所代表的靜態存儲結構轉換為方法區的運行時數據結構(hotspot選擇將Class對象存儲在方法區中,Java虛擬機規范並沒有明確要求一定要存儲在方法區或堆區中)轉換為一個與目標類型對應的java.lang.Class對象。

二、連接。

1、驗證。

驗證階段主要包括四個檢驗過程:文件格式驗證、元數據驗證、位元組碼驗證和符號引用驗證;

2、准備。

為類中的所有靜態變數分配內存空間,並為其設置一個初始值(由於還沒有產生對象,實例變數將不再此操作范圍內);

3、解析。

將常量池中所有的符號引用轉為直接引用(得到類或者欄位、方法在內存中的指針或者偏移量,以便直接調用該方法)。這個階段可以在初始化之後再執行。

❻ java類中的靜態方法是何時創建何時銷毀的,存放在內存什麼地方

你確定問的是靜態方法?靜態方法和普通方法一樣都是在jvm類載入階段載入到方法區的,當沒有類載入器引用到該類對象時,full gc時就會被銷毀。

❼ java中,靜態變數存儲在哪個區啊,堆還是棧啊,或者說其他地方,謝謝

首先,java裡面是沒有靜態變數這個概念的,不信你自己在方法裡面定義一個static
int
i
=0;java里只有靜態成員變數。它屬於類的屬性。至於他放在那裡?樓上說的是靜態區。我不知道到底有沒有這個翻譯。但是
深入jvm里是是翻譯為方法區的。虛擬機的體系結構:堆,方法區,本地方法棧,pc寄存器。而方法區保存的就是一個類的模板,堆是放類的實例的。棧是一般來用來函數計算的。隨便找本計算機底層的書都知道了。棧里的數據,函數執行完就不會存儲了。這就是為什麼局部變數每一次都是一樣的。就算給他加一後,下次執行函數的時候還是原來的樣子。

❽ java中 static變數和方法到底是存在內存什麼區域

JVM內存總體一共分為了
4個部分(stack segment、heap segment、code segment、data segment)
當我們在程序中,申明一個局部變數的時候,此變數就存放在了 stack segment(棧)當中;
當new 一個對象的時候,此對象放在了heap segment(堆)當中;
而static 的變數或者字元串常量 則存在在 data segment(數據區)中;
那麼類中方法的話,是存在在 code segment(代碼區)中了。

❾ java對象靜態變數放在jvm的什麼區域

從JVMS角度而言是在方法區(Method Area),對於特定的實現的話,例如Oracle HotSpot而言是在持久區(Permanent Area),HotSpot後續版本中會移除掉持久區的概念。 對於JVM內存區的劃分可參考 不會,因為類的靜態變數是此類的所有實例化對象全局共享的,即指向同一塊內存,只要一個對象更改了靜態變數,其他對象讀到的都是更改後的靜態變數,從設計上而言,也很容易理解,靜態變數也稱之為類變數,可以直接使用類名訪問而不需要通過類對象訪問,一樓所言有誤。 這要看你的業務需求,原則上是盡量減少不必要的靜態變數,對於一直常量類的話,你的變數就要包含靜態變數了。

閱讀全文

與靜態方法存在jvm哪裡相關的資料

熱點內容
有什麼方法可以暖起來 瀏覽:378
肛裂便血的治療方法 瀏覽:87
風鈴拼裝採用的方法與步驟 瀏覽:317
聖誕樹上的掛件製作方法圖片 瀏覽:927
間歇性斜視的治療方法 瀏覽:913
吃完飯放鬆的正確方法 瀏覽:678
兔子飼養方法圖片 瀏覽:659
頸椎病常用的康復方法哪種除外 瀏覽:907
幼升小擇校熱的解決方法 瀏覽:866
感測器的分析方法有哪幾種 瀏覽:680
360禁止網路在哪裡設置方法 瀏覽:932
茶斑去除最簡單方法 瀏覽:164
如何理解體育教學方法的含義 瀏覽:906
治療大腳骨方法 瀏覽:986
停車場正確鍛煉方法 瀏覽:303
衛生間包自來水管的最佳方法 瀏覽:571
戒奶貼的正確方法圖片 瀏覽:136
洗牙口鏡的使用方法 瀏覽:750
治療焦慮症新方法 瀏覽:650
美的燃氣熱水器使用方法和步驟 瀏覽:223