爱问知识人 爱问教育 医院库

Java占用内存如何解决?

首页

Java占用内存如何解决?

Java占用内存如何解决?

提交回答

全部答案

    2017-07-28 10:12:54
  •   最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验
    简要说一下,相信会对大家写出优质的程序有所帮助
    下面的论述针对32位系统,对64位系统不适用,后叙
    经常你写了一个程序,一测试,功能没问题,一看内存占用也不多,就不去考虑其它的东西了。
      但可能程序使用了一个什么数据结构,会当数据规模变大时,内存占用激增。
       基本&&关键的问题是,Java里各种东东占多少内存????????? 对于primitive类型,有8个 byte short int long float double char boolean 它们的长度分别是 1 2 4 8 4 8 2 1 这个不罗嗦了,举例来说 long[] data=new long[1000]; 占用内存 8*1000 bytes 此外,data本身是一个Object,也占用内存若干,后叙,当然它针对 8*1000来说,忽略不计 再说Object的占用,在说这个之前,先说说引用,一惯的说法是 Java里没有指针了,只有引用,引用是安全的 这个说法没错,但是从机理上来说,引用就是指针,只是jvm对指针的使用检查和限制很多,这个引用/指针变得很安全 直接来结论:一个引用占4byte ,在32位系统上 Object obj=null; //4byte Object[] objs=new Object[1000]; //至少4*1000byte 你看我定义了一个 obj,还是null,就占4byte 定义了一个 objs,1000个元素,但都是null啊,就都每个占4byte 是的!!!!! 虽然obj==null,但它已经是 一个引用,或者说一个指针了 指针也要占地方啊!!!!啊!!!!啊!!!! 接下来,直接给另一个结论: Object占8byte,注意,纯Object Object obj=new Object(); //多少???? 8byte?? 错!! 12byte,忘了还有一个引用,8byte是Object的内容 记住 Object obj=new Object(); 占12byte Object[] objs=new Object[1000]; for(int i=0;i<1000;i++) { objs[i]=new Object(); } 至少占用 12*1000 bytes 推论: Object占12bytes,似乎和上面的结论矛盾??!! 没有!! 不管Object,没有被垃圾回收之前,总得被别人引用吧? 总的有指针指它吧? 既然指,那个引用or指针就要占地方啊 4byte 加起来是12byte,反正一个Object至少 12bytes 还是直接给结论,推导的过程我就都包办了,咱不是脏活累活抢着干么!! 一个Integer占 16 bytes 这时您可能会有疑问,Integer=Object+int,就是: public class Integer { public int value; } Integer应该占 8+4=12 bytes啊 你说的有道理,但是jvm对所有的Object有限制!! 这个限制被我发现了,就是不管什么Object占的空间,要是8的倍数 12不是8的倍数,只能是16了!!!。

    能***

    2017-07-28 10:12:54

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):