Java占用内存的研究

Java占用内存的研究

ID:46284614

大小:78.00 KB

页数:8页

时间:2019-11-22

Java占用内存的研究_第1页
Java占用内存的研究_第2页
Java占用内存的研究_第3页
Java占用内存的研究_第4页
Java占用内存的研究_第5页
资源描述:

《Java占用内存的研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java占用内存的研究Java综合:讨论关于Java占用内存的研究发布时间:2008.05.0904:50来源:赛迪网作考:方法【赛辿网技术社区整理】最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验。简要说一下,和信会对大家写出优质的程序冇所帮助。下面的论述针对32位系统,对64位系统不适用,后叙经常你写了一个程序,一测试,功能没问题,一看内存占用也不多,就不去考虑其它的东西了。但可能程序使用了一个什么数据结构,会当数据规模变大时,内存占用激增。基木&&关键的问题是,Java里各种东东占多少内存?????????对于primitive类型,有8个byt

2、eshortintlongfloatdoublecharboolean它们的长度分别是12484821这个不罗嗦了,举例来说long[]data二nowlong[1000];占用内存8*1000bytes此外,data木身是一个Object,也占用内存若干,后叙,当然它针对8*1000来说,忽略不计再说Object的占用,在说这个之前,先说说引用,一惯的说法是Java里没有指针了,只有引用,引用是安全的这个说法没错,但是从机理上来说,引用就是指针,只是jvm对指针的使用检查和限制很多,这个引用/指针变得很安全肓接来结论:一个引用占4byte,在32位系统上Objectob

3、j=null;//4byteObject[]objs=newObject[1000];〃至少4*1000byte你看我定义了一个obj,还是null,就占4byte定义了一个objs,1000个元素,但都是null啊,就都每个占4byte是的!!!虽然obj二二null,但它已经是一个引用,或者说一个指针了指针也要占地方啊!!!!啊!!!!啊!!!!接下來,直接给另一个结论:Object占8byte,注意,纯ObjectObjectobj=newObject();//多少????8byte??错!!12byte,忘了还有一个引用,8byte是Object的内容记住Obje

4、ctobj=newObject();占12byteObject[]objs=newObject[1000];for(inti=0;i<1000;i++){objs[i]=newObject();}至少占用12*1000bytes推论:Object占12bytes,似乎和上面的结论矛盾??!!没有!!不管Object,没有被垃圾回收Z前,总得被别人引用吧?总的有指针指它吧?既然指,那个引用or指针就要占地方啊4byte加起來是12byte,反正一个Object至少12bytes还是直接给结论,推导的过程我就都包办了,咱不是脏活累活抢着十么!!一个Integer占16byte

5、s这时您可能会有疑问,lntcger=Object+int,就是:publicclassInteger{publicintvalue;}Integerh'Z该占8+4=12bytes啊你说的有道理,但是jvm对所有的Object有限制!!这个限制彼我发现了,就是不管什么Object占的空间,要是8的倍数12不是8的倍数,只能是16T!!!推论:Byte也占Wbytes!!!!!!!!!!!问:Byte[]bytes=newByte[1000];占用空间多少?答:约为(至少为)(16+4)*1000bytes好家伙!!!!!!!!论题:数组空间占川怎么算?我这里直接给结论了

6、,推导这个花了更长的时间:对于数组來说,数组这个Object有一个length屈性,数组的元素相当于其成员publicclassArray{publicintlength;//...其它成员}对于数组,我们不是直接可以取length属性么,源丁•此publicbyte[]bytes=newbyte[1000];System,out.println(bytes,length);//看,有length属性上面的bytes换算过來是:publicclassArray{publicintlength;publicbytebyteO;publicbytebytel;publicby

7、tebyte999;上面的bytes占用的内存是:4+[8+4+1*1000]=4+[1012]二4+1016=10204是bytes这个引用,8是Object基占的,4是length属性占的1000是1000个成员占的,木來是1012,但要求是8的倍数,变成1016T总共是1020再如:byte[]bytes=newbyte[4];的内存占用是:4+[8+4+4*1]=4+[16]=20;byte[]bytes=newbyte[3];也是20对于元素是Object的数组,Object也是当作具成员,(注意只有引用这个数组的空

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。