本文最后更新于10 天前,其中的信息可能已经过时,如有错误请发送邮件到1169063119@qq.com
jvm内存结构分为五个区域:栈,堆,本地方法栈,程序计数器,方法区。
栈是存储函数运行中的一些变量,当程序进入一个方法时,会为这个方法单独分配一块私属存储空间,叫做栈帧,用于存储这个方法内部的局部变量,等这个方法结束时,对应栈帧释放,栈帧中变量随之释放。
堆用来存储所有new出来的对象实例及数组
本地方法栈是java虚拟机运行时数据区域的一部分,用于支持本地方法的运行
程序计数器是执行程序当前的位置,此区域是jvm中唯一不可能出现内存溢出或内存泄漏的位置
方法区主要时存储一些静态的方法或者是静态变量、运行时常量池等
其中栈和本地方法栈以及程序计数器合起来是线程私有的。线程私有的意思是程序在运行过程中会单独创建一份内存,有多少个线程就会有多少个栈
堆区和方法区是线程共享的。
在堆上创建的对象它是不能够随着函数运行完毕自动清理的,因为你也不知道是否有其他线程也引用当前的对象来访问的




