对象的存储:

对象的存储区域有:寄存器(Registers)、栈(Stack)、堆(Heap)、静态存储空间(Static Storage)、常量存储空间(Constant storage)、Non-RAM存储空间。

  • 寄存器:寄存器位于处理器内部,由于寄存器个数有限,编译器根据本身需求适当地分配寄存器使用。
  • 栈:此里用来存储对像的引用和基本型别的变量。基本型别包括:boolean,char,byte,short,int,long,float,doule,void。
  • 堆:此里用来存储所有的Java对象。栈里的所有关于对像的引用均指定堆里的具体对象。
  • 静态存储空间:用来存储对象内的特定静态成员,此静态成员是用static变量声明的。但Java对象绝无可能置于静态存储空间中。
  • 常量存储空间:用来存储常量,常量也可存于ROM只读内存中。
  • Non-RAM存储空间:用来存储串流化对象(streamed objects)和持久性对象(persistent objects)。

基本数据类型:

基本型别包括:boolean,char,byte,short,int,long,float,doule,void。(string 属于对象,不属于基本类别。)而其对应的外覆型分别是:Boolean,Character,Byte,Short,Integer,Long,Folat,Double,Void。
别外,Java还提供了两个高精度计算的Classes:BigInteger(可以精确表示任意长度整数数值,不会在运算过程中丧失任何信息)和BigDecimal(提供任意精度的定点数)。虽然它们也可以视为外覆类,但两者都没有对应的基本型别。
缺省值:当Class的某个成员属于基本型别时,即使没有为它提供初值,Java仍保证它有一个缺省值,缺省值如下:
boolean: false
char :'/u0000/(null)
byte : (byte)0
short : (short)0
int : 0
long : 0L
float : 0.0f
double 0.0d
但是:只有当变量身份是“Class内的成员”时,Java才保证为该变量提供初值。但当变量属于局域变量(如位于某个函数内时)时,Java并不提供初始值。如:int x 。x可能是任意值(和C/C++)中的一样,不会被自动设为0.
所有数组的初始值为null。

垃圾回收:
当一个对象不再被引用后,其Reference会在栈内消失,当垃圾收集器在堆内检测对象,发现有的对象不再有Reference引用指向它时,就会把它销毁。

 


本文转载:CSDN博客