No.4的内存

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。

http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html
总结:

  • 函数(而不是类中,函数体外)中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
  • 栈内存中的内容会在相应内容超出作用域范围时被清楚,即释放该内存,这就是为什么不同{}中可以定义相同名字的变量。
  • 堆内存主要用于存放new 出来的对象或者数组的内容(不是引用),该区域的内存管理由虚拟机的内存垃圾回收机制管理。
  • (1)引用是普通变量,定义时在栈中分配内存,引用在程序运行到作用域外释放。
    (2)而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放。
    (3)数组和对象在没有引用变量指向它的时候(多个引用可以指向同一个对象),才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,
    (4)实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

你可能感兴趣的:(No.4的内存)