首页 > 编程知识 正文

java打印线程堆栈(java堆栈区别)

时间:2023-05-04 02:04:24 阅读:77253 作者:3610

转载文章: https://www.cn blogs.com/I believe 618/p/6380328.html

如果有侵权,请联系我,马上删除!

JAVA在执行程序时,在存储器中分割5个区域进行数据的存储。 分别为1 :寄存器。 2 )本地方法区域。 3 )方法区。 4 :堆栈。 5 )堆栈。 (有关——JVM运行时内存分配https://www.cn blogs.com/ys ocean/p/6759737.html的信息,请参见此处。)

一、要点基本数据类型、局部变量存储在堆栈存储器中,使用完毕后消失。

new创建的实例化对象和数组存储在堆内存中,并在用完后通过垃圾回收机制不定期地自动删除。

二、例示例1

main () {int x=1; show (; }show () intx=2)主函数main ) )中变量int x=1,show ) )函数中定义变量int x=1。 最后show ) )函数执行完毕。

执行上述步骤。

步骤——main ()函数是程序入口,JVM首先被执行,打开了在堆栈存储器中存储int型变量x的空间,其值为1。

步骤——JVM为show ) )函数,在堆栈存储器中存储int型变量x,用值2打开新的区域。

此时,主空间和show空间共存,同时工作,互不影响。

步骤——show ()执行完成后,变量x立即释放,空间消失。 但main (函数空间依然存在,main中的变量x依然存在,不受影响。

示意图如下:

示例2

main () (int ) ) x=newint ) ); x[0]=20}在主函数main ()中定义数组x、元素类型int和元素个数3。

以上程序执行步骤

步骤1——int[]x=newint[3];

隐藏下一个分支

JVM执行main ()函数,在堆栈存储器中创建存储x变量(x变量为局部变量)的空间。

堆内存还开设了用于存储new int[3]数组的空间,堆内存将自动存储0x0045等起始地址值。

数组中的地址值附加在x上。 这样,x也有地址值。 所以,x指向这个数组(参照)。 此时,所有元素都没有值,但有默认的初始化值0。

步骤——执行x[0]=20

也就是说,堆内存中名为[0]的数组元素被分配20。 因此,数组中三个元素的值分别为20、0和0

图如下。

示例3

main () (int ) ) x=newint ) ); x[0]=20x=null; }按以上步骤执行步骤

1、2步骤——与例2完全相同,省略。

步骤3—— x=执行空值;

null表示删除空值,即x的引用数组内存地址0x0045后,不再指向堆栈内存中的数组。 此时,堆中的数组不再用于x,即视为垃圾,JVM启动垃圾回收机制并不定期自动删除。

图如下所示

示例4

main () (int ) ) x=newint ) ); int[] y=x; y [1]=100 x=空值; }按以上步骤执行步骤

步骤——与实施例2的步骤1一致,省略。

执行步骤2——int[]y=x,

在堆栈存储器中定义新的数组变量存储器y,同时将x的值0x0045添加到y中。 因此,y也指向堆内存中的同一数组。

执行步骤3——y[1]=100

也就是说,堆内存中名为[0]的数组元素被分配20。 因此,数组中三个元素的值分别为0、100和0

执行步骤4——x=null

变量x不再指向堆栈内存中的数组。 但是,变量y仍然指向,所以数组不会消失。

图如下所示

示例5

Car c=new Car; c.color='blue '; Car c1=new Car; c1.num=5; 个对象都引用new Car,但它们是两个不同的对象。 每个new都会产生不同的实体

样品6

Car c=new Car; c.num=5; Car c1=c; c1.color='green '; c.run (; Car c1=c,一词相当于复制对象,两个对象的内存地址值相同。 因此,如果指向同一实体并修改c1的属性,则相当于c的属性也将发生变更。

三.堆栈和堆栈特征堆栈:

函数中定义的基本类型变量、对象的引用变量都被分配给函数的堆栈内存。

堆栈内存的特点、数据执行后,变量会立即释放,节约内存空间。

堆栈内存中的数据没有默认初始化值,需要手动设置。

堆:

堆内存存储由new创建的对象和数组。

堆中的所有实体都有内存地址值。

堆内存中的实体用于封装具有默认初始化值的数据。

当堆中的实体不再被指定时,JVM将启动并自动清除垃圾回收机制。 这也是JAVA优于c的事情之一(在c中程序员需要手动删除)。

注:

什么是局部变量:在函数中定义的变量、在函数中定义的参数中定义的变量、在for循环内部定义的变量

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