开发者社区> 问答> 正文

[@小川游鱼][¥20]Java虚拟机的堆、栈、堆栈如何去理解?

我只片面的知道堆和堆栈是一种存储结构,栈是一种数据结构

展开
收起
月下丶 2018-12-14 21:31:07 3532 0
2 条回答
写回答
取消 提交回答
  • 宇宙虽有其起源,却没有终结。无限。 星球虽也有起源,却因其自身之力走向毁灭。有限。

    一般语义下,java虚拟机的堆指java堆,java虚拟机的栈或堆栈指java虚拟机栈
    前者核心职责分配内存存储对象,后者核心职责是执行java方法

    2019-07-17 23:21:34
    赞同 展开评论 打赏
  • 阿里云问答专家、阿里云认证云计算工程师、Java研发工程师

    堆是堆(heap),栈是栈(stack),堆栈是栈。

        栈中分配的是基本类型和自定义对象的引用。
    
        堆中分配的是对象,也就是new出来的东西。被所有线程共享。
    
        方法区/静态区 存放的是类信息和static变量、常量。被所有线程共享。
    

    也可以这么理解:堆是用来存放对象的,栈是用来运行程序的。

    堆:java的垃圾回收器会自动的回收这些不用的数据。缺点是由于要动态的分配内存,存储效率会比较的慢。

    栈:栈的优势是存取效率比较快,仅次于寄存器,栈数据可以共享。但缺点是栈中的数据大小和生存期的固定的,缺乏灵活性。

    一般每个方法的调用都会独立有一个栈来保存对象的引用变量,在方法返回后,栈会清空,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

    2019-07-17 23:21:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
从《阿里巴巴Java开发手册》编写推广谈技术成长 立即下载
JVM的GC 立即下载
基于JVM的脚本语言开发、运用实践 立即下载