導航:首頁 > 編程語言 > java實例內存

java實例內存

發布時間:2022-07-15 21:00:04

❶ 怎樣用java實現內存動態分配

1、java是如何管理內存的

Java的內存管理就是對象的分配和釋放問題。(兩部分)
分配 :內存的分配是由程序完成的,程序員需要通過關鍵字new 為每個對象申請內存空間 (基本類型除外),所有的對象都在堆 (Heap)中分配空間。
釋放 :對象的釋放是由垃圾回收機制決定和執行的,這樣做確實簡化了程序員的工作。但同時,它也加重了JVM的工作。因為,GC為了能夠正確釋放對象,GC必須監控每一個對象的運行狀態,包括對象的申請、引用、被引用、賦值等,GC都需要進行監控。
2、 JVM的內存區域組成
java把內存分兩種:一種是棧內存,另一種是堆內存1。在函數中定義的基本類型變數和對象的引用變數都在函數的棧內存中分配;2。堆內存用來存放由new創建的對象和數組以及對象的實例變數 在函數(代碼塊)中定義一個變數時,java就在棧中為這個變數分配內存空間,當超過變數的作用域後,java會自動釋放掉為該變數所分配的內存空間;在堆中分配的內存由java虛擬機的自動垃圾回收器來管理
堆和棧的優缺點
堆的優勢是可以動態分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的。
缺點就是要在運行時動態分配內存,存取速度較慢; 棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。
另外,棧數據可以共享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。

❷ Java的堆內存是什麼

Java堆(Java Heap)是java虛擬機所管理的內存中最大的一塊
java堆被所有線程共享的一塊內存區域
虛擬機啟動時創建java堆
java堆的唯一目的就是存放對象實例。
java堆是垃圾收集器管理的主要區域。
從內存回收的角度來看, 由於現在收集器基本都採用分代收集演算法, 所以Java堆可以細分為:新生代(Young)和老年代(Old)。 新生代又被劃分為三個區域Eden、From Survivor, To Survivor等。無論怎麼劃分,最終存儲的都是實例對象, 進一步劃分的目的是為了更好的回收內存, 或者更快的分配內存。
java堆的大小是可擴展的, 通過-Xmx和-Xms控制。
如果堆內存不夠分配實例對象, 並且對也無法在擴展時, 將會拋出outOfMemoryError異常。

❸ 一道java實例內存劃分的問題

String a = "Java"; String b = "Java"; 這種直接賦值的方式為:初始化字元串,所有初始化的字元串變數都存儲在 字元串連接池中 (字元串連接池是內存開辟出來的一塊獨立空間), 字元串連接池底層實現了 哈希演算法,值相同的字元串哈希值也相同,所以物理地址也就是同一塊空間
所以a 與 b 指向同一個對象
String c = x + y; 這種字元串拼接的方式,是由兩個字元串對象重新生成一個新的字元串對象,在內存中獨自佔有一塊內存空間,與字元串連接池是不同的存儲空間,所以 a與c不指向同一個對象

❹ Java靜態方法和實例方法在內存的分布情況

像類、靜態(static)變數還有代碼塊都存儲在方法區里,棧中存儲的是靜態方法、實例方法和變數,堆中存儲的是實例對象和實例變數。

❺ java類在實例化的時候會在內存中創建一份方法的代碼嗎

Java執行的時候,如果是實例化的話,會在堆里分配一份內存,也就有了自己的虛擬機,如果長時間不用的話,會有個GC(垃圾回收器)回收。所說的實例,就是New的時候,這個時候,就開始開始放在堆里了。
Java程序運行的時候 ,所有類實例或者數組都會放在同一個堆里,但是Java實例中只存在一個堆空間,所以都會共享這個堆,但是每個Java程序遠行的時候,都會有自己的虛擬機,所以,每個Java程序都會有自己的堆空間的。
如果想深入理解的話,你看一下深入《JVM虛擬機》這本書。

❻ 關於JAVA對象的實例變數內存問題

你的class
b
實例變數是tom
因為你有b
tom=new
b();
沒有實例變數
這個類中看是否有靜態變數
和方法
因為靜態變數和靜態方法也要佔內存
如果沒有
不佔內存占硬碟

❼ java 小問題 關於實例對象內存回收。。

首先,你可能對JAVA的垃圾回收機制不了解,那麼請看下面一段話(過來的)
JAVA垃圾回收機制的特點:
以下兩個特性。
1. 自動性。Java技術提供了一個系統級的線程,即垃圾收集器線程,來跟蹤每一塊分配出去的內存空間,當Java 虛擬機處於空閑循環時,垃圾收集器線程會自動檢查每一塊分配出去的內存空間,然後自動回收每一塊可以回收的無用的內存塊。
2. 不可預期性。一個對象成為了垃圾,但是你不能斷言,該對象在這行以後就立刻被清除,甚至有可能當程序結束後,該對象仍然佔用內存。像Windows這樣的軟體常常會出現內存不足的情況,JAVA程序很少出現就是因為可以自動回收內存。然而,因為JAVA也不能保證及時地清除無用的對象,所以JAVA程序也會出現內存不足的情況,只是這種情況很少出現。垃圾收集線程在一個Java程序中的執行是自動的,不能強制執行,即使程序員能明確地判斷出有一塊內存已經無用了,是應該回收的,程序員也不能強制垃圾收集器回收該內存塊。程序員唯一能做的就是通過調用System.gc 方法來"建議"執行垃圾收集器,但其是否可以執行,什麼時候執行卻都是不可知的

那麼針對你的問題:
1、走完這個方法,這個對象確實變成了垃圾,但是不會立即被收回。只有當垃圾堆積到一定的程度時,虛擬機才會自動回收垃圾。
2、是每次都實例,但不是每次都回收。
不會有問題。
3、在JAVA中,不需要特意去管這個垃圾回收機制,因為垃圾回收的自動性。
即使你調用System.gc()方法,也只是建議虛擬機回收內存,但虛擬機是否立即進行回收是不一定的。

❽ Java400萬數據佔多數內存

java的內存回收,是自動回收,如果gc木有回收,可能是,實例一直被持有,導致內存一直得不到釋放
1。 以上結論適用於32位系統,對於64位系統,有很多不同。反正結論是雖然64位系統能用的內容更多了,但相同的程序佔用內存也多了不少
2。 上面討論的是類的實例佔用的內存,沒有考慮靜態變數的佔用。 靜態變數引用的是算在Class數據里的,內容的佔用和實例無關,單獨計算就可以了
3。 以上沒有考慮 Class本身占的內存。 Class本身也需要佔地方啊,就是類的結構,以及靜態變數的引用的佔用。但是這個佔用是靜態的,不隨實例變多而變多的。也不好統計出來,想統計的話,看jvm源碼里jclass的表示。

❾ 如何查看linux上java實例消耗內存

mpstat
-P
ALL

sar
-P
ALL
說明:sar
-P
ALL
>
aaa.txt
重定向輸出內容到文件
aaa.txt
top命令經常用來監控linux的系統狀況,比如cpu、內存的使用,程序員基本都知道這個命令,但比較奇怪的是能用好它的人卻很少,例如top監控視圖中內存數值的含義就有不少的曲解.下面幾種方法都可以插件Java實例消耗的內存.
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
內容解釋:
PID:進程的ID
USER:進程所有者
PR:進程的優先順序別,越小越優先被執行
NInice:值
VIRT:進程佔用的虛擬內存
RES:進程佔用的物理內存
SHR:進程使用的共享內存
S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
%CPU:進程佔用CPU的使用率
%MEM:進程使用的物理內存和總內存的百分比
TIME+:該進程啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。
COMMAND:進程啟動命令名稱
常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
2、便捷的進程內存查看:/proc/pid
,不過比較難理解
測量一個進程佔用了多少內存,linux為我們提供了一個很方便的方法,/proc目錄為我們提供了所有的信息
說明:
/proc/N
pid為N的進程信息
/proc/N/cmdline
進程啟動命令
/proc/N/cwd
鏈接到進程當前工作目錄
/proc/N/environ
進程環境變數列表
/proc/N/exe
鏈接到進程的執行命令文件
/proc/N/fd
包含進程相關的所有的文件描述符
/proc/N/maps
與進程相關的內存映射信息
/proc/N/mem
指代進程持有的內存,不可讀
/proc/N/root
鏈接到進程的根目錄
/proc/N/stat
進程的狀態
/proc/N/statm
進程使用的內存的狀態
/proc/N/status
進程狀態信息,比stat/statm更具可讀性
/proc/self
鏈接到當前正在運行的進程
3、可以看到進程中每個資源都佔用了多少內存:pmap
pmap命令可以顯示一個或多個進程所使用的內存數量。你可以使用這個工具來了解伺服器上的某個進程分配了多少內存,並以此來判斷這是否是導致內存瓶頸的原因。要得到更加詳細的信息,使用pmap
-d選項。
4、free
free:
invalid
option
--
h
usage:
free
[-b|-k|-m|-g]
[-l]
[-o]
[-t]
[-s
delay]
[-c
count]
[-V]
-b,-k,-m,-g
show
output
in
bytes,
KB,
MB,
or
GB
-l
show
detailed
low
and
high
memory
statistics
-o
use
old
format
(no
-/+buffers/cache
line)
-t
display
total
for
RAM
+
swap
-s
update
every
[delay]
seconds
-c
update
[count]
times
-V
display
version
information
and
exit

❿ 在java中如何獲得某個實例佔用多少內存

java中可以用.getBytes().length獲取字元串佔用內容的大小,原理是java中任何字元都採用Unicode編碼,所以衡量佔用內存大小採用佔用的位元組數。
舉例如下:
public class TestStringSize {
public static final void main(String[] args) {
System.out.println("佔用內存大小:"+"學java".getBytes().length);
}
}
輸出結果:
佔用內存大小:6 byte

閱讀全文

與java實例內存相關的資料

熱點內容
javaweb程序設計郭 瀏覽:247
gm聲望命令 瀏覽:484
pdf轉換器電腦版免費 瀏覽:41
解壓歌曲什麼歌最好 瀏覽:151
諾貝爾pdf 瀏覽:967
雲伺服器快速安裝系統原理 瀏覽:788
蘋果騰訊管家如何恢復加密相冊 瀏覽:115
手機軟體反編譯教程 瀏覽:858
sqlserver編程語言 瀏覽:650
gpa國際標准演算法 瀏覽:238
伺服器編程語言排行 瀏覽:947
怎麼下載快跑app 瀏覽:966
小紅書app如何保存視頻 瀏覽:172
如何解開系統加密文件 瀏覽:811
linux切換root命令 瀏覽:283
c編譯之後界面一閃而過怎麼辦 瀏覽:881
怎麼看ic卡是否加密 瀏覽:726
lgplc編程講座 瀏覽:809
cnc手動編程銑圓 瀏覽:724
cad中幾種命令的意思 瀏覽:328