java内存占用大堆内存少

Python011

java内存占用大堆内存少,第1张

首先java内存可以大体分为堆内存和栈内存。一般收的内存使用过大是指堆内存使用过大。一般分步骤分析。

现在内存过大到底到何种程度。是否引起了GC或者FUll GC。是否影响了正常工作。

1.明白现在内存有多大,可以通过工具看,和使用的内存比例。如果项目中需要缓存很多缓存,可以理解使用是合理的。如果服务器内存够大,应用可以适当调整XMX xms参数进行JVM调整。

2.如果系统中没有使用缓存,和大对象内存过高,那就考虑是否有内存泄漏。可以使用jmap等jVM调优工具进行对象分析。然后定位过高原因修改代码。

jmap -dump:format=b,file=文件名 [pid]

dump当前系统,根据dump文件我们可以分析当前系统中存在的内存问题。

分析dump文件的工具很多,JDK自带的Jhat,Eclipse也有相关的插件。

我使用的是Eclipse Memory Analyzer,功能很强大,能够生成各种报表,另外可以在不同的时间生成不同的dump,然后通过工具分析两个dump的内存变化。

大家专注我,我写了好多JVM 原理和调优的文章。

文版权归是三僡然所有,转载请标明出处。欢迎转载,欢迎评论,欢迎分享。如果你有文章想分享可以联系我。

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.

当然,如果类里有其他对象的话,也要把其他对象的空间算进去

第一问中,integer,Double是可以准确知道大小的

java中int double(包装类分别是Integer和Double,实际是一样的)分别占用的大小是4B 和8B

这里说的B,就是我们通常说的KB中的那个B,全称是Byte。

1B = 8bit。 所以我们通常会说int是32位,有时候又4字节

而String他是有char数组组成,一个长度为10的String,占用的char就是10个,一个char是2B。

所以看String占多少内存,需要知道String的长度

二问中:答案是可以的

摘自ObjectOutPutStream的API说明

FileOutputStream fos = new FileOutputStream("t.tmp")

ObjectOutputStream oos = new ObjectOutputStream(fos)

oos.writeInt(12345)

oos.writeObject("Today")

oos.writeObject(new Date())

oos.close()