Java 栈、堆、方法区


栈、堆

栈(先进后出)

栈(stack)又名堆栈,它是一种运算受限的线性表。只能在栈顶端进行插入和删除操作的线性表。

堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性。

在这里插入图片描述

堆(Heap)

堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。


栈、堆、方法区的区别

通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间。

通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域。

  • 方法区

方法区用于存储已经被JVM加载的类信息、常量、静态变量、JIT(Just-In-Time)即时编译器编译后的代码等数据;

程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在常量池中;

常量池是方法区的一部分。


在这里插入图片描述

String str = new String("hello");

变量 str 存放在栈中;

new String()存放在堆中;

hello 存放在静态区中;

就速度来说:寄存器 < 堆栈 < 堆 < 其他

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值