您的位置:首页 > 编程语言 > Java开发

深入理解JVM(一)-JVM内存模型

2017-10-01 16:20 260 查看
title: 深入理解JVM(一)-JVM内存模型

date: 2017-10-01 15:41:14

categories: technology

tags:

- 深入理解JVM

JVM内存模型

Java程序执行过程

Java源代码文件(.java)会被Java编译器编译为字节码文件(.class)

由JVM中的类加载器加载各个类的字节码文件(.class)

JVM执行引擎执行

在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这 段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。

JVM内存分布

Runtime Data Area(运行时数据区)包括 :

Java栈(VM Stack)、本地方法栈(Native Method Stack)、程序计数器(Program Counter Register)、堆(Heap)、方法区(Method Area)


1. Java栈

Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用(Reference to runtime constant pool)、方法返回地址(Return Address)和一些额外的附加信息。


2. 本地方法栈

本地方法栈则是为执行本地方法(Native Method)服务的


3. 程序计数器

用来指示执行哪条指令的,每个线程都需要有自己独立的程序计数器。
由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。


4. 堆

堆是用来存储对象本身的以及数组
Java 垃圾收集器管理的主要区域
堆是被所有线程共享的,在JVM中只有一个堆


5. 方法区

方法区是被线程共享的区域。
在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm java 内存