java堆栈

1)Stack后进先出,存储效率比heap高,可共享存储数据,但是其中数据的大小和生存期必须在运行前确定。

2) Heap是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期都可以在运行时再确定。

3) 在运行时每new一次都会在Heap里面创建对象, 因为堆数据不共享。

Eg: String str1= new String("abc");   (1)

         String str2= "abc";               (2)

 str1是在Heap里面创建的对象。

 str2是指向Stack里面值为“abc”的引用变量,语句(2)的执行,首先会创建引用变量str2, 再查找Stack里面有没有“abc”,有则将 str2指向 “abc”,没有则在Stack里面创建一个“abc”,再将str2指向“abc”。

       分配内存,在堆中分配的内存实际建立这个对象,而在栈中分配的内存只是一个指向这个堆对象的指针(引用)而已. 

## 在方法 / 类 中声明的变量:

      1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在方法栈中

      2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在方法的栈中,该变量所指向的对象是放在堆类存中的。

静态属性保存在Stack指令内存区,动态属性保存在Heap数据内存区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值