开发者社区> 问答> 正文

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

月下丶 2018-12-14 21:31:07 522

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

存储 Java
分享到
取消 提交回答
全部回答(2)
  • 世界线跳跃者
    2019-07-17 23:21:34

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

    0 0
  • 小川游鱼
    2019-07-17 23:21:34

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

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

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

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

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

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

    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题