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中只有一个堆区被所有线程所共享:对象和数 ...
随机推荐
- Java中SMB的应用
目录 SMB 服务操作 Ⅰ SMB简介 Ⅱ SMB配置 2.1 Windows SMB Ⅲ 添加SMB依赖 Ⅳ 路径格式 Ⅴ 操作共享 Ⅵ 登录验证 SMB 服务操作 Ⅰ SMB简介 SMB(全称 ...
- NOI2.5 4980:拯救行动
描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁(#).和守卫(x). 英勇的骑士(r)决定孤身一人去拯 ...
- Java 单向队列及环形队列
队列的特点 1.可以使用数组和链表两种方式来实现. 2.遵循先入先出(FIFO)的规则,即先进入的数据先出. 3.属于有序列表. 图解实现过程: 1.定义一个固定长度的数组,长度为maxSize. ...
- linux C++类中成员变量和函数的使用
1.undefined reference to XXX 问题原因 1)XXX所在的so库等未指定 2)XXX在类中实现的时候没有加上类::函数的格式 2. was not declared in t ...
- ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'system.sysuser', bu
问题:已经在settings.py文件中注册过app仍旧提示没有安装,并且使用makegirations命令时会抛出如下异常. ValueError: The field admin.LogEntry ...
- nginx适用哪些场景
1.静态资源服务 通过本地文件系统提供服务 2.反向代理服务 ningx的强大性能 缓存 负载均衡 3.API服务 openresty
- 如何优雅地使用containerd?这里有一份必读的技巧攻略
前 言 Docker是我们常用的容器runtime,友好的CLI,丰富的社区资料,外加研发运维人员多年的经验积累,使用Docker几乎是没有任何门槛的事.而k3s为了降低资源消耗,将默认的runtim ...
- FFMPEG学习----遍历所支持的解码器
下面简单介绍一下遍历ffmpeg中的解码器信息的方法(这些解码器以一个链表的形式存储): 1.注册所有编解码器:av_register_all(); 2.声明一个AVCodec类型的指针,比如说AVC ...
- asp.net core 3.x 身份验证-3cookie身份验证原理
概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...
- 使用MS Devops 来部署CRM Solution
在D365 CE开发当中,有一个非常痛苦的问题就是开发,测试环境中的export import solution 部署问题. Devops中能很好的解决这个问题. 工作原理: 在Azure Devop ...