當前位置:首頁 » 存儲配置 » java靜態變數存儲

java靜態變數存儲

發布時間: 2023-05-13 01:41:05

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 靜態變數和靜態常量

  • 靜態變數是屬於靜態存儲方式,但是屬於靜態存儲方式的量不一定就是靜態變數,例如外部變數雖屬於靜態存儲巧配搭方式,但不一定是靜態變數,必須由static加以定義後才能成為靜態外部變數,或稱靜態全局變數。

  • 對於自動變數,它屬於動態存儲方式。但是也可以用static定義它為靜態自動變數,或稱靜態局部變數,從而成為靜態存儲方式。由此看來,一個變數可由static進行再說明,並改變其原有的存儲方式。

  • 而在以Pascal為代表的許多程序語言中,所有局部變數都由系統自動分配存儲空間,而所有全局變數的存儲空間則以靜態分配的方式獲取,因此由於實際上「局部變數」和「全局變數」這兩個術語已足以涵蓋所有的情況,在這些程序語言中通常不使用「靜態變數」這一術語,而直接以「全局變數」代之。

  • 在這些程序語言中,靜態變數就是全局變數,而即使在有明確區分全局和靜態變數的程序語言中,在編譯後的代碼里二者也以相同的方式獲取存儲空間。而今術語「靜態變數」的概念則主要基於C族語言的「static」的定義。

  • 靜態變數也可以用於存儲常數。具體來說,靜態變數可用const,constant或final等關鍵賣卜字標識,這時其值就會在編譯時設定,並且無法在運行時改變。編譯器通常將靜態常量與孝拿文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區

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

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

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

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

㈤ java中靜態變數儲存的問題

java靜態變數是存儲在內存中的,需要依賴於程序啟動之後使用,如果程序都結束了自然就沒有了,如果想要長時間存儲就要使用資料庫或者文件之類的存儲到你的硬碟上去

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

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

㈦ java里的靜態成員變數是放在了堆內存還是棧內

這個要看對象是否為逃逸對象,如果為非逃逸對象,會根據標量替換來把對象分解成若干個被這個方法使用的成員變數所代替,這些代替的成員變數在棧幀或寄存器上分配空間

㈧ java static變數存儲在什麼地方呢,別說什麼靜態存儲池的,我需要實際和具體的回答,是內存還是緩存

java運行時所有對象都只在JVM包裝的內存中,JVM不是跨平台的,它由系統軟體載入到內存中,很顯然,java的對象全都在內存中。
不管是靜態的不靜態的都一樣,只不過JVM自己做了內存管理,將靜態的數據存放的地區更加共用一點,非靜態的對象只在一個地方存一個殼子(類,如果類已經載入了的,沒有載入的類連殼子都木有),需要創建對象的時候才繼續向操作系統申請內存資源。

java的緩存機制,通常是指『應用性緩存』,就是在實際應用的時候,用程序實現類似cache的功能的模式,如:文件流讀寫就是在直接跟硬碟交互的內存區域加一個限制讓數據按照一定的規律進行讀寫這樣可以實時檢查通道是否異常,根據狀況調節通道大小,這樣做在大文件的持久化過程中是很有用的,但是小文件非緩存讀寫更有優勢,因為它發生通道阻塞的可能性相當小了。

熱點內容
tomcat上傳超時 發布:2025-02-09 01:41:42 瀏覽:483
androidactivity豎屏 發布:2025-02-09 01:41:40 瀏覽:377
家庭配置怎麼合理 發布:2025-02-09 01:36:14 瀏覽:807
頭條軍事源碼 發布:2025-02-09 01:31:53 瀏覽:997
androidintent視頻 發布:2025-02-09 01:31:43 瀏覽:858
歐姆龍plc密碼如何設置 發布:2025-02-09 01:24:31 瀏覽:687
php支持jpeg 發布:2025-02-09 01:24:22 瀏覽:803
反編譯去注冊碼 發布:2025-02-09 01:19:48 瀏覽:887
安卓如何查找舊密碼 發布:2025-02-09 01:17:21 瀏覽:418
hadoop雲存儲 發布:2025-02-09 01:02:49 瀏覽:453