jvm 内存结构
jvm 内存结构
A(jvm)-->E(类加载器系统)
A-->B(运行时数据区)
A-->D(本地库接口)
A-->C(执行引擎)
B-->虚拟机栈
B-->本地方法栈
B-->堆区
B-->方法区
B-->程序计数器
运行时数据区
从整个计算机内存中开辟一块内存存储 jvm 运行时需要用到的对象,变量等
虚拟机栈
- 线程私有
- 服务于方法
- 用于存储局部变量表、操作数栈、动态链接、方法出口等信息
本地方法栈
- 线程私有
- 为虚拟机调用 Native 方法服务
堆区
- 线程共享
- 存储对象实例,是虚拟机中内存最大的一块
- 分为年轻代、年老代、持久代(JDK8 中废弃),年轻代用来存放新对象,当对象存活时间够长时,移动到年老代
方法区
- 线程共享
- 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据
- jdk7 及以往版本,方法区基于堆的永久代实现,理论上是堆的一部分
- jdk8 取消了永久代,在本地内存中划分区域-元空间,不属于 JVM 内存,方法区位于元空间中
- 包括运行时常量池和 class 文件常量池
程序计数器
- 线程私有
- 是当前线程所执行的字节码的行号指示器
- 字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令
- 分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成
执行引擎
- 解释器:解释执行经过编译后生成的字节码文件
- 即时编译器 JIT: 收集一些代码的执行信息(预热过程)之后,将频繁执行的代码(热点代码)直接编译成本地机器码
- 垃圾收集器:java 虚拟机自动进行内存管理,根据垃圾收集算法,清理无用对象
本地库接口
- 本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++ 程序,Java 诞生的时候 C/C++ 横行,要想立足,必须可以调用 C/C++ 程序,于是就在内存中专门开辟了一块区域处理标记为 native 的代码
- 它的具体作法是 Native Method Stack 中登记 native 方法,在 Execution Engine 执行时加载本地方法库
- 目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过 Java 程序驱动打印机,或者 Java 系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用 Socket 通信,也可以使用 Web Service 等
类加载器系统
- 负责加载字节码文件,class 文件在文件开头有特定的文件标示,并且 ClassLoader 负责 class 文件的加载等,至于它是否可以运行,则由 Execution Engine 决定
- 主要功能
- 定位和导入二进制 class 文件
- 验证导入类的正确性
- 为类分配初始化内存
- 帮助解析符号引用
jvm 内存结构的更多相关文章
- jvm系列(二):JVM内存结构
JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...
- JVM内存结构之三--持久代
本文会介绍一些JVM内存结构的基本概念,然后很快会讲到持久代,来看下Java SE 8发布后它究竟到哪去了. 基础知识 JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令. ...
- JVM内存结构
前言 在Java语言开发过程中,out of memory错误是很常见的一种错误.对于JVM的内存结构有更深入的了解,更更好的帮我们排查此类问题,有效的避免此类问题发生.在JAVA 8中内存结构有进行 ...
- 管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控
如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...
- JVM内存结构,运行机制
三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...
- JVM内存结构简单认知
关于JVM的面试传送门:https://blog.csdn.net/shengmingqijiquan/article/details/77508471 JVM内存结构主要划分为:堆,jvm栈,本地方 ...
- 【JVM】JVM内存结构 VS Java内存模型 VS Java对象模型
原文:JVM内存结构 VS Java内存模型 VS Java对象模型 Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清 ...
- 【转】JVM内存结构 VS Java内存模型 VS Java对象模型
JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途. 其中有些区域随着虚拟机进程的启动而 ...
- jvm系列二、JVM内存结构
原文链接:http://www.cnblogs.com/ityouknow/p/5610232.html 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemory ...
- JVM内存结构之堆、栈、方法区以及直接内存、堆和栈区别
JVM内存结构之堆.栈.方法区以及直接内存.堆和栈区别 一. 理解JVM中堆与栈以及方法区 堆(heap):FIFO(队列优先,先进先出):二级缓存:*JVM中只有一个堆区被所有线程所共享:对象和数 ...
随机推荐
- .net core appsetting/获取配置文件
修改appsetting 最近用Identity4所以需要做一个配置项项目 { "Logging": { "IncludeScopes": false, &qu ...
- Ubuntu16手动安装OpenStack——keystone篇
本博客来自于https://www.voidking.com/dev-ubuntu16-manual-openstack-keystone/ 赶紧做笔记 keystone简介 OpenStack身份识 ...
- JS-01-js的三种引入方式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios--->cell里面 self 和self.contentview的区别
一般我们向cell中添加子视图,有两种方式 [cell addSubview:] [cell.contentView addSubview:] 区别在于进行cell编辑时,比如cell内容向左移或者右 ...
- PyCharm安装和使用教程(Windows系统)
说明: PyCharm 是一款功能强大的 Python 编辑器, 本文简单的介绍下PyCharm 在 Windows下是如何安装的. PyCharm 的下载地址:http://www.jetbrain ...
- python笔记13
今日内容 装饰器 推导式 模块[可选] 内容回顾 函数 参数 def (a1,a2):pass def (a1,a2=None):pass 默认参数推荐用不可变类型,慎用可变类型. def(*args ...
- Linux后门的几种姿势
转载自 https://evilanne.github.io/2017/08/26/Linux%E5%90%8E%E9%97%A8-%E6%8C%81%E7%BB%AD%E5%85%B3%E6%B3% ...
- 使用Qt自动注册Lav
Qt播放视频使用QMediaPlayer要注册Lav解码器,如果手动去注册,每次去使用管理员运行命令或者生成.bat文件都比较麻烦. 解决方法步骤如下: 一:编写注册Lav解码器脚本,并取消控制台的显 ...
- 实验11:EIGRP
实验8-1:EIGRP 基本配置 实验目的通过本实验可以掌握:(1)在路由器上启动EIGRP 路由进程(2)启用参与路由协议的接口,并且通告网络(3)EIGRP 度量值的计算方法(4)可行距离(FD) ...
- 今天更新IDEA后,我依旧要永久激活(支持2019.3.3版本)
起因 今天一早用IDEA写代码,看到有下角有提示更新,有点强迫症的我,就手欠的又点了下更新,结果尼玛悲剧了,居然许可证过期,IDEA过期了,如下图所示: 就想用下新功能,就这样对我,就给两天的使用时间 ...