java內存佔用
① 一個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.
當然,如果類里有其他對象的話,也要把其他對象的空間算進去
② javaset鍗犵敤鍐呭瓨澶у皬
javaset灝嗗崰鐢16涓瀛楄妭鐨勭┖闂淬 鍥犳わ紝鏈鍒濇垜灝嗘潯鐩鏁頒箻浠16浠ヨ幏鍙栧唴瀛樸 浣嗗疄闄呬笂錛屾瘡涓鏉$洰鐨勫唴瀛樿繙榪滆秴榪16涓瀛楄妭銆 涔嬪悗錛屾垜鐮旂┒浜咹ashSet鐨勫疄鐜般 綆鑰岃█涔嬶紝鍦ㄥ熀紜瀹炵幇涓錛屽畠瀹為檯涓婂湪鍝堝笇闆嗙殑姣忎釜鏉$洰涓瀛樺偍浜嗕竴涓棰濆栫殑浼瀵硅薄(12涓瀛楄妭)銆 榪樻湁涓涓鎸囧悜涓嬩竴涓鏉$洰鐨勬寚閽(8涓瀛楄妭)銆 鍥犳わ紝姣忎釜鏉$洰灝嗛濆栨氮璐12 + 8涓瀛楄妭銆
鍥犳わ紝姣忎釜鏉$洰鐨勬誨唴瀛樹負錛16 + 12 + 8 = 36瀛楄妭銆 浣嗘槸褰撴垜榪愯屼唬鐮佸苟媯鏌ュ唴瀛樻椂錛屾瘡涓鏉$洰浠嶇劧瓚呰繃36涓瀛楄妭銆
③ 如何查看java進程大量佔用內存
如何查看java進程大量佔用內存
你好,方法如下:
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
(1)top
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
$ top -u oracle
內容解釋:
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)pmap
可以根據進程查看進程相關信息佔用的內存情況,(進程號可以通過ps查看)如下所示:
$ pmap -d 14596
(3)ps
如下例所示:
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是實際內存
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle | sort -nrk5
其中rsz為實際內存,上例實現按內存排序,由大到小
④ java 在內存中占幾個位元組
不同的數據類型占的內存大小不同 比如int 是四個位元組 char是一個位元組 等等
⑤ Java程序佔用內存太高了怎麼辦
先看下是否有內存泄露,簡單的方法就是隔一段時間檢查下內存,看看是否是持續上升。
然後看下資源是否可以優化,比如你載入的圖片有沒有resize過,盡可能減少資源的內存消耗。
游戲卡頓最主要的是FPS幀率太低,把幀率統計輸出來看下。檢查下UI線程里或者OpenGL線程里是否做了I/O操作,這個是造成卡頓的主要原因。把I/O操作全部放入工作線程中,UI線程只做數據讀取和渲染。這樣幀率就可以提高了