您的位置 首页 java

面试必问-你了解Java虚拟机中堆和栈的区别吗?

首先看图有个大概的了解, Java 运行时内存是如何划分的,本篇主要讲堆和栈

栈(Stack)分为: 虚拟机 栈和本地方法栈,我们一般说的栈就是虚拟机栈。

  1. 虚拟机栈随着方法运行创建,从方法运行到执行完成的过程对应着入栈和出栈的过程。
  2. 虚拟机栈 线程 私有,它的生命周期与线程相同。

虚拟机栈为虚拟机执行Java方法(字节码)服务,本地方法栈为虚拟机使用到的Native方法服务,两者发挥作用相似,在使用的语言,方式和数据结构层面也无区别。sun公司的HotSpot虚拟机就将这两个合二为一。

native方法在哪里会用到呢?

比如获取对象的哈希码(HashCode)就是用native方法

堆(Heap)是Java虚拟机中内存最大的一块。

  1. 在虚拟机启动时创建,被所有线程共享。
  2. 存放对象实例,但不是所有的对象都存放在堆中,如果不断的创建对象就会导致内存溢出。
  3. 常见异常:内存溢出, 内存泄漏

小tips:我们在运行tomcat时会设置-Xmx和-Xms,这两个值就是在设置堆内存

文章来源:智云一二三科技

文章标题:面试必问-你了解Java虚拟机中堆和栈的区别吗?

文章地址:https://www.zhihuclub.com/184242.shtml

关于作者: 智云科技

热门文章

网站地图