public class B{
A a=new A();
public static void main(String[] args){
}
}
class A{
String name;
}
6 个解决方案
#1
a本身在引用区,
A ()对象在堆内存。
A ()对象在堆内存。
#2
a是在栈里么???还是在方法区??
#3
对象都是创建在栈中的,除了一些特殊的对象 如 stirng 是在字符常量池(SWIMING POOL)中 也是堆。。静态对象,创建在堆中。。
#4
java内存大致分为3块:
1、堆内存,这一块存放生成的对象以及对象的成员属性。
2、方法区,这一块存放装载的class以及方法,静态属性。
3、栈内存,这一块用于存放正在执行线程调用方法所开辟的空间,一般用于缓存方法中执行的代码,指令指针,局部变量索引,以及返回值索引。
这里给出一些解释:
1、所有的类和方法都放在方法区,但是虚拟机装载类与方法以后,会分配一个对应的Class对象以及Method对象用于描述类与方法,但是这些对象是在堆内存中。
2、静态属性属于类,所以在方法区中,动态属性属于对象在堆内存中;方法无论静态还是动态,都在方法区中。
3、局部变量名称只在编译时标注,运行时不存放局部变量名称,局部变量作为方法栈内存中当前栈内存的索引(类似于数组的下标),即是从0往后编号。
4、基本数据类型可直接存放在局部变量中,对象,局部变量只存放句柄值,程序通过句柄值搜索对内存地址找到对象。
1、堆内存,这一块存放生成的对象以及对象的成员属性。
2、方法区,这一块存放装载的class以及方法,静态属性。
3、栈内存,这一块用于存放正在执行线程调用方法所开辟的空间,一般用于缓存方法中执行的代码,指令指针,局部变量索引,以及返回值索引。
这里给出一些解释:
1、所有的类和方法都放在方法区,但是虚拟机装载类与方法以后,会分配一个对应的Class对象以及Method对象用于描述类与方法,但是这些对象是在堆内存中。
2、静态属性属于类,所以在方法区中,动态属性属于对象在堆内存中;方法无论静态还是动态,都在方法区中。
3、局部变量名称只在编译时标注,运行时不存放局部变量名称,局部变量作为方法栈内存中当前栈内存的索引(类似于数组的下标),即是从0往后编号。
4、基本数据类型可直接存放在局部变量中,对象,局部变量只存放句柄值,程序通过句柄值搜索对内存地址找到对象。
#5
使用反编译的命令javap分析下你的class文件,是最好的方法!
#6
这你能分析出啥?
#1
a本身在引用区,
A ()对象在堆内存。
A ()对象在堆内存。
#2
a是在栈里么???还是在方法区??
#3
对象都是创建在栈中的,除了一些特殊的对象 如 stirng 是在字符常量池(SWIMING POOL)中 也是堆。。静态对象,创建在堆中。。
#4
java内存大致分为3块:
1、堆内存,这一块存放生成的对象以及对象的成员属性。
2、方法区,这一块存放装载的class以及方法,静态属性。
3、栈内存,这一块用于存放正在执行线程调用方法所开辟的空间,一般用于缓存方法中执行的代码,指令指针,局部变量索引,以及返回值索引。
这里给出一些解释:
1、所有的类和方法都放在方法区,但是虚拟机装载类与方法以后,会分配一个对应的Class对象以及Method对象用于描述类与方法,但是这些对象是在堆内存中。
2、静态属性属于类,所以在方法区中,动态属性属于对象在堆内存中;方法无论静态还是动态,都在方法区中。
3、局部变量名称只在编译时标注,运行时不存放局部变量名称,局部变量作为方法栈内存中当前栈内存的索引(类似于数组的下标),即是从0往后编号。
4、基本数据类型可直接存放在局部变量中,对象,局部变量只存放句柄值,程序通过句柄值搜索对内存地址找到对象。
1、堆内存,这一块存放生成的对象以及对象的成员属性。
2、方法区,这一块存放装载的class以及方法,静态属性。
3、栈内存,这一块用于存放正在执行线程调用方法所开辟的空间,一般用于缓存方法中执行的代码,指令指针,局部变量索引,以及返回值索引。
这里给出一些解释:
1、所有的类和方法都放在方法区,但是虚拟机装载类与方法以后,会分配一个对应的Class对象以及Method对象用于描述类与方法,但是这些对象是在堆内存中。
2、静态属性属于类,所以在方法区中,动态属性属于对象在堆内存中;方法无论静态还是动态,都在方法区中。
3、局部变量名称只在编译时标注,运行时不存放局部变量名称,局部变量作为方法栈内存中当前栈内存的索引(类似于数组的下标),即是从0往后编号。
4、基本数据类型可直接存放在局部变量中,对象,局部变量只存放句柄值,程序通过句柄值搜索对内存地址找到对象。
#5
使用反编译的命令javap分析下你的class文件,是最好的方法!
#6
这你能分析出啥?