當前位置:首頁 » 存儲配置 » java對象存儲在哪裡

java對象存儲在哪裡

發布時間: 2022-08-02 10:53:58

㈠ 運行時java對象在內存中是什麼樣子的

JAVA對象是在堆中存儲的, 它在內存中的地址被存儲在一個或多個變數當中,類似於C中的指針,通過這些變數來操作對象, 對象理論上是不能獨立存在的,可以有多個變數存有它的地址,但不能沒有變數存它的地址,一旦沒有變數存有它的地址,就沒法對它進行操作, 對於程序運行來說,它就成了內存垃圾,正常情況下會被JAVA垃圾收集器給清除(少數異常情況可能回收不掉)

㈡ Java的對象的內容在堆內存中的存儲形式是怎樣的

java中數組是以對象形式存在的,棧中存儲的是數組對象的地址(即引用),而對象本身不存放在棧中,而是存放在堆中,使用時通過棧中的引用地址找到堆中的實際對象,這里的引用地址類似於C/C++中的指針。

㈢ Java創建完一個對象之後,對象的成員變數存儲在哪

  • Java

    (計算機編程語言)

    編輯

  • Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程[1]。

    Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點[2]。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等[3]。

㈣ java中的對象是存在哪裡

比如 String bb= new String ();new出來的對象放在堆內存中了,bb這個是局部變數放在棧內存

㈤ java中靜態對象是存放在堆還是棧

Java 把內存劃分成兩種:一種是棧內存,另一種是堆內存。在函數中定義的一些基本類型的變數和對象的引用變數都是在函數的棧內存中分配,當在一段代碼塊定義一個變數時,Java 就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java 會自動釋放掉為該變數分配的內存空間,該內存空間可以立即被另作它用。
堆內存用來存放由 new 創建的對象和數組,在堆中分配的內存,由 Java 虛擬機的自動垃圾回收器來管理。在堆中產生了一個數組或者對象之後,還可以在棧中定義一個特殊的變數,讓棧中的這個變數的取值等於數組或對象在堆內存中的首地址,棧中的這個變數就成了數組或對象的引用變數,以後就可以在程序中使用棧中的引用變數來訪問堆中的數組或者對象,引用變數就相當於是為數組或者對象起的一個名稱。引用變數是普通的變數,定義時在棧中分配,引用變數在程序運行到其作用域之外後被釋放。而數組和對象本身在堆中分配,即使程序運行到使用 new 產生數組或者對象的語句所在的代碼塊之外,數組和對象本身占據的內存不會被釋放,數組和對象在沒有引用變數指向它的時候,才變為垃圾,不能在被使用,但仍然占據內存空間不放,在隨後的一個不確定的時間被垃圾回收器收走(釋放掉)。
這也是 Java 比較占內存的原因,實際上,棧中的變數指向堆內存中的變數,這就是 Java 中的指針!

㈥ Java對象存儲到什麼地方

一個對象有屬性有方法,new這個對象的時候內存中就存在了這個對象

㈦ java的方法中new的對象存儲在內存中那個區域

這個對象存在堆中,還是棧中?
答:堆,new一個對象,一定是在堆中
方法內部new出來的對象,在哪裡存著?
答:堆,new出來對象的實例變數都存在堆上面。

棧,這個東西,需要理解為:線程運行時,才會創建,執行完,就沒了。
Person p = new Person();
上面這段代碼,在執行時,p壓入棧,通過局部變數表,找到對應的【實例數據】,執行完畢後釋放。

㈧ Java中數組對象的存儲位置

原帖地址:http://hi..com/sqldebug/blog/item/9758b9ffa605e51a09244d91.html

數組單一說在棧中還是堆中都是錯誤的,分為幾種情況:

1、固定數組在函數體內分配是在棧中的

我們做一個試驗,一般DELPHI程序線程的棧大小是1M,如果我們函數體中申請4M大小的數組,報棧溢出,則表示數據的大小是在棧中的。

const
CArrayCount = 1024*1024*4;

procere TForm1.btnMainThreadClick(Sender: TObject);
var
MainThreadArray: array[1..CArrayCount] of Char;
i: Integer;
begin
for i := Low(MainThreadArray) to High(MainThreadArray) do
MainThreadArray[i] := #0;
end;

我把以上代碼在主線程中測試時,確實報了棧溢出,如果這時你把DELPHI程序的棧調大為6M則正確,表示在函數體中申請的數組是在棧中的。

2、固定數組在類中分配是在堆中的

我們在類中加一下定義語句

FFixArray: array[1..CArrayCount] of Char;

程序正常,表示在類中分配固定數組是在堆中的。

3、固定數組全局變數是在堆中的

我們在程序定義全部數組

GFixArray: array[1..CArrayCount] of Char;

程序也正常,表示全局固定長度是在堆中的。

3、動態數組不管在函數體中、類中、全局變數都是在堆中

如果你會匯編,看一下匯編就明白了。DELPHI這么實現是合理的,在函數里中分配的固定長度數組放在棧中可以加快運行效率,而且在多線程的情況下,不用像堆分配有加鎖。只是大家在寫程序的過程中注意在函數里定義太長的數組需要注意,否則棧溢出,程序就崩潰了。

熱點內容
如何重設控制器密碼 發布:2024-10-05 14:19:13 瀏覽:437
安卓如何遠程簽到 發布:2024-10-05 14:11:11 瀏覽:299
阿里雲伺服器控制面板 發布:2024-10-05 13:57:48 瀏覽:817
涉法涉訴信訪問題意見 發布:2024-10-05 13:56:23 瀏覽:893
華為路由器配置導出的方法有哪些 發布:2024-10-05 13:55:36 瀏覽:161
我的世界好玩伺服器拍視頻 發布:2024-10-05 13:23:19 瀏覽:553
穿越火線掛機腳本 發布:2024-10-05 13:05:44 瀏覽:33
分解質因數c語言 發布:2024-10-05 12:15:53 瀏覽:779
mysql存儲過程字元編碼 發布:2024-10-05 12:05:48 瀏覽:184
c語言命名 發布:2024-10-05 11:56:38 瀏覽:617