首页 > 编程知识 正文

大有堆栈栈单(java中堆栈方法区放的什么)

时间:2023-05-03 21:39:03 阅读:77252 作者:4646

(自转) http://www.iteye.com/topic/634530

1 .寄存器:最快的内存空间由编译器根据需要分配,所以我们不能用程序控制。

2 .堆栈:存储基本类型的变量数据和对对象的引用,但对象本身不存储在堆栈中,而是存储在堆(从new出来的对象)或常量池中。 字符串常量对象存储在常量池中。 )

3 .堆:存储从new出来的所有对象。

4 .静态域:存储静态成员(在静态中定义) ) ) ) ) ) ) ) )。

5 .常量池:存储字符串常量和基本类型常量(公共静态final )。

6 .非RAM存储:永久存储空间,如硬盘

这里主要关心堆栈、堆和常量池,可以共享堆栈和常量池中的对象,而不能共享堆中的对象。 可以确定堆栈中的数据大小和生命周期,如果没有要引用的数据,则该数据将消失。 回收堆中的对象由垃圾收集器负责,因此不需要确定大小和生命周期,并且具有灵活性。

对于字符串:对该对象的所有引用都存储在堆栈中,如果是编译时已经创建的(直接在双引号中定义的),则存储在常量池中;如果是运行时(在new中出现的),则存储在堆中如果equals是相等的字符串,则常量池中始终只有一份,堆中有多份。

Java代码Strings1='china ',如以下代码所示: Strings2='china '; Strings3='china '; stringsS1=newstring('China ' ); stringsS2=newstring('China ' ); stringsS3=newstring('China ' );

现在说明黄色的三个箭头,在new上生成字符串“china”时,首先检查常量池中是否已经有“china”对象,否则在常量池中创建此字符串对象,然后在堆中创建此“china” 这也就是有道问题。 strings=newstring(「XYZ”); 生成多少个对象? 一两个,定数池本来就没有“xyz”的话就是两个。

对于基本类型的变量和常量:变量和引用存储在堆栈中,常量存储在常量池中。

以下代码:

Java代码inti1=9; inti2=9; inti3=9; publicstaticfinalintINT1=9; publicstaticfinalintINT2=9; publicstaticfinalintINT3=9;

对于成员变量和局部变量:成员变量是在方法外部、类内部定义的变量。 局部变量是在方法或语句块中定义的变量。 局部变量必须初始化。

形式参数是局部变量,局部变量的数据存在于堆栈存储器中。 堆栈内存中的局部变量随着方法的消失而消失。

成员变量存储在堆中的对象中,由垃圾收集器负责回收。

以下代码:

Java代码classBirthDate{privateintday; 私密int month; 隐私在年; 公共birth date (intd,intm,inty ) {day=d; month=m; 年=y; 省略get,set方法……} public class test { publicstaticvoidmain (string args (} { int date=9; 测试测试=new test (; test.change (数据; birth date D1=new birth date (7,7,1970 ); }公共语音更改1 (Inti ) {i=1234; }

}

在以上代码中,date是局部变量,I、d、m、y都是自变量为局部变量,day、month、year是成员变量。 分析一下代码运行时的变化。

1 .开始执行1. main方法: int date=9;

date局部变量、基本类型、引用和值存在于堆栈中。

2 .测试测试=new test (;

test是对象引用,存在于堆栈中,对象(new Test ) )存在于堆中。

3.test.change(date );

I是局部变量,引用和值存在于堆栈中。 方法change执行完成后,I将从堆栈中消失。

4.birth date D1=new birth date (7,7,1970 );

d1是对象引用,存在于堆栈中,对象(“new BirthDate”) )存在于堆中。 其中d、m、y以局部变量存储在堆栈中,它们的类型是基本类型,因此这些数据也存储在堆栈中。 day、month和year是成员变量,存储在堆中。 new BirthDate () )。 执行BirthDate构造方法时,d、m和y将从堆栈中消失。

5 .执行5.main方法后,date变量、test和d1引用从堆栈中消失,new Test ()、new BirthDate ) )等待垃圾回收。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。