深入理解JVM(一)-JVM内存模型
2017-10-01 16:20
260 查看
title: 深入理解JVM(一)-JVM内存模型
date: 2017-10-01 15:41:14
categories: technology
tags:
Java源代码文件(.java)会被Java编译器编译为字节码文件(.class)
由JVM中的类加载器加载各个类的字节码文件(.class)
JVM执行引擎执行
在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这 段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。
JVM内存分布
Runtime Data Area(运行时数据区)包括 :
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—JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM(二)——内存模型、可见性、指令重排序
- 深入理解JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM—JVM内存模型
- 【深入理解JVM】内存模型
- 深入理解JVM—JVM内存模型
- 深入理解Java虚拟机笔记--JVM内存模型及溢出问题总结
- 深入理解JVM—JVM内存模型
- [java]深入理解JVM内存模型
- 深入理解JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM内存模型
- 深入理解JVM—JVM内存模型
- 【Java】深入理解JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM—JVM内存模型
- 深入理解JVM(一)——JVM内存模型