深入了解java内存释放机制,为什么不用像c一样手动free指针?(阅读文档后的个人总结)

3. 深入了解java内存释放机制,为什么不用像c一样手动free指针?(阅读文档后的个人总结)

首先需要了解堆跟栈的概念。栈是一种先进后出数据结构,像是一个封口的瓶子存储数据,而且栈是一种连续的存储结构,而堆不是连续的存储结构,而是一种树状结构,通过指针分辨。堆栈放在一起来指一般程序运行时候的内存,但是实际上,堆栈是不一样的概念。

参考

http://c.biancheng.net/c/stack/

理解

在程序中,栈是先进后出的数据结构,而堆则是一种特殊的完全二叉树,堆是一种经过排序后的树形结构,像是一个小土堆。
在内存分配时,栈跟堆实质上都表示存储的空间,不同的是栈一般由系统自己分配,并且栈的存储空间一定是连续的且一般比较小,而堆内存的存储空间不一定连续且比较大。这也就是为什么栈的存取是更快(因为连续,不会多余地查找,并且比较小,遍历起来查找次数少)。
在java中,堆栈的分配都是由程序自动实现,而在c中堆的分配是由程序员手动分配以及释放,所以十分灵活但也相对复杂,但也可能造成内存泄露(我的理解是某一部分内存分配了但没释放导致一直处于占用状态而无法被重复利用)。而java中的垃圾(规定没有任何引用指向这部分资源则就是垃圾,就像是c中单链表丢失了头指针,那么你就没办法再读链表的数据)会在某一不确定时间被 jvm 自动释放(回答)。

提到这里,我目前的理解是

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值