对java内存分配的理解
看了下很多高人的贴子,越来越发现java基础的重要性,看了几遍thinking in java,大学时候看都是云里雾里,现出社会接触实践,对其中的内存分配有自己的一些理解,和一些疑惑,在此发表下自己的想法,理解有误,疑惑 请指点,感激 (1)寄存器 “寄存器的数量十分有限,所以寄存器是根据需要由编译器分配”引用《thinking in java》的话,不知道怎么玩,什么情况下把东西放进去,放什么进去,实际项目没有用过
(2)堆栈(RAM) 1.保存一些java句柄,就是对象的引用,可以理解为c++里面的指针类似
2.也保存“不是用new 创建变量,而是创建一个并非句柄的“自动”变量。这个变量容纳了具体的值,并置于堆栈中”《thinking in java》的话
如:Java代码
A a=new A();
A b=a;
A c=a;//b,c就是引用,为句柄,所以就保存在堆栈区
如:Java代码
int i=9;//类加载器动态加载的对象,所以就保存在堆栈区
(3)堆(RAM) 保存java对象 ,new 出来的对象,消耗时间
(4)静态存储(RAM) 保存静态的数据,但是 static 对象就类外
如:Java代码
static int i=0;//保存在静态存储区
static A a;//保存在堆区
static int i=0;//保存在静态存储区
static A a;//保存在堆区
(5)常数存储(ROM) final类型,保存在ROM,但是本人疑惑,fianl类型的对象保存在堆区还是 常数存储区呢??
如:Java代码
final A a=new A();//保存在堆区? 常数存储区?
final A a=new A();//保存在堆区? 常数存储区?用了new ,但是也是final
(6)非RAM 存储 保存“流式对象”和“固定对象”我理解的是
比如I/O流对象(流式对象)和数据库的Resultset(固定对象)