深入理解java中栈,堆常量池。。

栈:

   在函数中定义的一些基本变量数据,还有对象的引用变量都在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,java会自动释放掉为该变量所分配的内存空间,该内存空间可立即被另做他用。

    栈也叫栈内存,是java程序的运行区,是在线程创建时创建,它的生命是跟随线程的生命,线程结束栈内存也就释放。

    栈中的数据都是以栈帧的格式存在,栈帧是一个内存区块,是个数据集,是一个有关方法和运行期数据的数据集。

堆:

    堆内存是用来存放关键字new创建的对象和数组。在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。

 在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的值就等于数组或对象在堆中的首地址。栈中的这个变量就成了数组或对象的引用变量。引用变量就相对与为数组或对象起了个别名。

   实际上,栈中的变量指向内存中的变量,就是java中的指针。

    堆也是一个运行时的数据区。是一块所有线程共享的内存区域。堆在虚拟机的启动时创建。


常量池

     常量池是指在编译器就被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型和对象型(String及数组)的常量值(Final)还包含一些以文本形式出现的符号引用,比如:

        类和接口的全限定名

       字段的名称和描述符

       方法的名称和描述符

  虚拟机必须为每个被装载的类型维护一个常量池。


方法区:

   方向区是在虚拟机启动时创建,也是一块所有线程共享的内存区域。方法区用于存储以被虚拟机加载的类信息,常量,静态变量,即时编译器编译或的代码等数据。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值