简体字、冯|大话JVM内存模型

撸代码有段时间了,对虚拟机一直是一知半解。这段时间有点飘,就想着静下来夯实下基础。话不多说,看官随我往下。

JVM内存模型.jpg

图有点丑哈,画图是为了自己记起来方便,可以随时看。

运行时数据区

java虚拟机内存结构,包含方法区、堆、虚拟机栈、本地方法栈、程序计数器。
这五大模块可划分为两部分线程共享区、线程独享区。

1)线程共享区

堆、方法区。被所有线程共享。

存储几乎所有对象,GC活动的主要场所。
几乎所有对象 :因为在jdk7开始加入了栈上分配(对于无逃逸对象尽可能的保存在虚拟机栈中),这样能及时回收这部分对象,并且为GC减负。分为:
新生代:Eden、From Survior、To Survior;老年代。

方法区
存储类的元信息、静态变量、常量(常量池)等(主要存储class的组成信息包括成员类、方法等相关信息)。

2)线程独享区

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

虚拟机栈
每个线程都会拥有自己的虚拟机栈。
每个虚拟机栈中包含N多个栈帧(可以理解一个栈帧对应一个方法)。
相应的栈帧的内容便是方法中对应的信息:局部变量表、操作数栈、动态链接、方法出口信息。
本地方法栈
功能、结构上与 虚拟机栈相似。Java虚拟机栈用来管理Java函数调用,本地方法栈用来管理本地方法的调用。
程序计数器
存储当前线程正在执行的字节码的行号指示器。用来控制分支、循环、跳转、异常处理、线程恢复等逻辑运算。

是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError的内存区

直接内存

是一块额外的内存区,不包含在虚拟机内存之内,但是虚拟机可以操作该区域。具体看图中直接内存中文字部分。

此文只作概要,具体细节关注后续。

你可能感兴趣的:(简体字、冯|大话JVM内存模型)