今天突然想到一些问题,关于java内存分配的问题,基本类型在栈上分配。new出来的对象引用分配在栈上,对象分配在堆上,一直以来都是记住了,从来没仔细思考过,在栈上到底怎么分配,在堆上到底具体怎么分配的。举个例子:
Java代码
class Test{
int number1=9;
Test t1=new Test();
public static void main(String args[]){
int number2=9;
Test t2=new Test();
}
} number2 在栈上,t2这个对象的引用”也在栈上,t2引用的对象在堆中,那t1这个对象的引用 是实例变量 它在堆中么?
number1 冒似也是在栈上,没道理啊 栈是线程私有的,当前线程运行的方法才会在上面开出一个栈帧,方法局部变量在这个栈帧的局部变量表中,那如果Test这个类中的类实例变量number1也在栈上,没道理啊.
Java代码
class Test{
int number1=9;
Test t1=new Test();
public static void main(String args[]){
int number2=9;
Test t2=new Test();
}
} number2 在栈上,t2这个对象的引用”也在栈上,t2引用的对象在堆中,那t1这个对象的引用 是实例变量 它在堆中么?
number1 冒似也是在栈上,没道理啊 栈是线程私有的,当前线程运行的方法才会在上面开出一个栈帧,方法局部变量在这个栈帧的局部变量表中,那如果Test这个类中的类实例变量number1也在栈上,没道理啊.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货