JAVA运行内存

组成部分

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈
  • 方法区

前面三者为线程隔离的区域,后面两者为线程共享的区域

程序计数器

概述:较小的内存空间,当前线程执行字节码的行号指示器,每个线程之间相互独立
注意:在执行JAVA方法时,计数器记录的是字节码指令地址;在执行native方法是,计数器值为空
异常:唯一不会有OutOfMemoryError的区域

虚拟机栈

概述:JAVA方法(字节码)执行的内存模型,线程之间相互独立

方法运行时会创建一个栈帧(方法运行的基本数据结构)存储局部变量表、操作数栈等信息。
方法的调用到执行完成,对应着栈帧 入栈到出栈 的过程
局部变量表存储内容:基本数据类型和对象引用(指向对象初始地址的引用指针)
八大基本数据类型:byte、short、int、long、char、float、double、boolean
局部变量空间在编译时大小就固定了,运行时不会改变大小
64的long和double占用两个局部变量空间,其余都只占用1个空间

异常:StackOverFlowError、OutOfMemoryError

本地方法栈

概述:基本等同于虚拟机栈,只是执行的是native方法,线程之间也是相互独立的
异常:StackOverFlowError、OutOfMemoryError

JAVA堆

概述:管理内存中最大的一块,是被线程共享的区域,只要存放对象的实例。Java堆是垃圾收器的主要区域,又被称为GC堆。主要划分为新生代老年代
配置:-Xmx 和 -Xms控制大小
异常:OutOfMemoryError

方法区

概述:线程共享的区域,主要存储被加载的类信息、常量、静态变量、即时编译的代码。又被称为:非堆(Non-heap)。
在HotSpot虚拟机上,被称为永久代。原因是垃圾收集行为较少,主要是常量池的回收和类型的卸载。
配置:-XX:MaxPermSize
异常:OutOfMemoryError

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,475评论 11 349
  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 7,557评论 2 26
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 5,803评论 0 10
  • 今天不知道写点什么好,脑子里从早上开始已经过了很多遍不同的文段,然后忙碌中又忘记了。 虽然...
    慢慢猫猫阅读 1,477评论 0 0
  • 之所以下定决心每天一篇日记,大概是我觉得该磨磨心性了。 很佩服高中时候的学霸,无论遇见什么状况,在那深沉的夜色下,...
    入魔小记阅读 2,675评论 1 1

友情链接更多精彩内容