1. java引用個對象是否在內存中真實存在還是只是一個地址
你表達的不夠清晰,我這樣跟你說吧!
User u = new User("亭台T","20","女");
這行語句其實分兩部分,從等號分開來說:
右邊new User();構造方法是真實的在內存中new出來一塊空間;
而你的u對象 實際上只是拿到了這塊空間的一個引用,或者說就是一個地址而已;
如果下面你再跟著一句代碼:
User d = u;
那麼d 也只是拿到了上面那塊地址的引用,也就是說u 和 d 現在為止,其實本質上是一個對象,因為內存中只有一個你最開始new 出來的那塊空間;
如果按如下方法來做你就會發現問題了:
u.setName("奇跡軟體工作室");
System.out.print(d.getName());
你會發現你set 了u對象的屬性,但是列印出來d的name也跟著變了,
也就是說,u和d都是引用,他們都引用了同一塊內存的真對象地址;
奇跡軟體工作室 東東程序猿 手打 請給分
2. 怎樣用Java獲取內存中的數據
可以考慮使用內存映射文件:java.nio.MappedByteBuffer,主要適合放入較大的數據進入系統內存
可以考慮使用:java.nio.ByteBuffer.allocateDirect()方法進行分配,可以將一些不適合放入堆里的數據放入系統內存
還可以採用java本地調用的方式,實現對系統自身內存的掌控與調度,這種方式可以讓你靈活的訪問系統的內存。
java的堆放入的對象尺度是有限制的,這里建議參考BigMemory 的實現機制以及內存管理機制
如果自己管理內存的話,建議參考其他語言對內存管理的方式。
你可以把數據放入線性數據結構中(這些數據是在系統內存中,而非jvm管理的內存里),這樣就不存在分代問題,可以由你的應用在適當的時候清理系統的內存。這樣,你的內存模型-釋放機制就與jvm的內存管理機制處於一個互不幹擾的異行線上。
3. 一個Java對象到底佔用多大內存
Object o=new Object():
在java中空對象佔八個位元組,對象的引用佔四個位元組。所以上面那條語句所佔的空間是4byte+8byte=12byte.java中的內存是以8的倍數來分配的,所以分配的內存是16byte.
舉個例子:
Class O{
int i;
byte j;
String s;
}
其所佔內存的大小是空對象(8)+int(4)+byte(1)+String引用(4)=17byte,因要是8的整數倍,所以其佔大小為24byte.
當然,如果類里有其他對象的話,也要把其他對象的空間算進去
4. java 怎麼把數據存到內存中
這里你採納與否沒關系,給你說說編程與內存的關系。
你定義的任何變數,常量,類,方法等等,其實都在內存中,沒有所謂的把數據存內存中,這概念,你可以想一下電腦重啟或關機後,內存中的所有數據,都會丟失,除非你保存到磁碟中去。
在內存中的數據有兩塊,第一、緩沖,一般寫數據到磁碟的時候開辟出來的內存空間;第二、緩存,一般是從磁碟讀數據到內存中開辟出來的內存空間。會這么使用,原因很簡單,磁碟讀寫數據速度與內存不一致(磁碟的存取效率遠遠小於內存的存取效率),為了提高數據的存取效率,才會這么乾的。
一般而言,java中的所謂數據,大部分都是類,從自動引用計數的概念來分析,你想把對象長久的放在內存中,不會被垃圾回收機制釋放,注意制葯有一個對象在使用/引用你的數據,這條數據就會存在內存中。所以,想servlet中的全局配置參數,隨時可以取到還是唯一一份,你可以參考一下。
另外內存使用分堆與棧,堆在面向對象編程中存儲對象的,棧是方法或函數執行的時候臨時開辟的存儲空間,方法或函數執行完畢就會釋放。
希望我的回復能幫助到你,採納與否沒關系。有更好的答案,我就隱藏我的回復。
5. java中能否輸出 引用的內存地址
很遺憾.不能..用java時不用考慮內存的問題,內存操作是不可見的.
有些人也許會說toString方法會列印出
"類型@十六進制數"這個十六進制數是該對象的散列碼的十六進製表示而已..