本地方法栈 程序计数器 方法区
文章目录
- 本地方法栈
- PC寄存器/程序计数器
- 方法区
- 堆栈方法区交互关系
本地方法栈
本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合
C/C++
程序,Java诞生的时候是C/C++
横行的时候,要想立足,必须有调用C/C++
程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机或者Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等等,不多做介绍。
PC寄存器/程序计数器
每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。如果执行的是一个Native方法,那这个计数器是空的。用以完成分支、循环、跳转、异常处理、线程恢复等基础功能。不会发生内存溢出(OutOfMemory=00M)错误
方法区
供各线程共享的运行时内存区域。它存储了每一个类的结构信息,例如运行时常量池(Runtime Constant Pool)、字段和方法数据、构造函数和普通方法的字节码内容。上面讲的是规范,在不同虚拟机里头实现是不一样的,最典型的就是永久代(PermGen space)和元空间(Metaspace)。
实例变量存在堆内存中,和方法区无关
实际而言,方法区(MethodArea)和堆一样,是各个线程共享的内存区域,它用于存储虚拟机加载的:类信息+普通常量+静态常量+编译器编译后的代码等等,虽然JVM规范将方法区描述为堆的一个逻辑部分,但它却还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。
对于HotSpot虚拟机,很多开发者习惯将方法区称之为“永久代(ParmanentGen)”,但严格本质上说两者不同,或者说使用永久代来实现方法区而已,永久代是方法区(相当于是一个接口interface)的一个实现,jdk1.7的版本中,已经将原本放在永久代的字符串常量池移走
堆栈方法区交互关系
本地方法栈 程序计数器 方法区相关推荐
- JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器
文章目录 Pre 运行时数据区总览 线程栈 概要 栈内部主要组成部分 局部变量 操作数栈 动态链接 方法出口 小结 程序计数器 本地方法栈 附 测试demo javap JVM字节码指令集手册 Pre ...
- 本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...
JVM 运行时数据区域大致可以分为:程序计数器.虚拟机栈.本地方法栈.堆区.元空间.运行时常量池.直接内存等区域:就是下面这个样子的: 其中有些区域,随着 JDK 版本的升级不断调整,例如: JDK ...
- 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)
46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...
- 12.JDK1.8 JVM运行时数据区域概览、各区域介绍、程序计数器、Java虚拟机栈、本地方法栈、堆、堆空间内存分配(默认情况下)、字符串常量池、元数据区、jvm参数配置
12.JDK1.8 JVM运行时数据区域概览 12.1.JDK1.8 JVM运行时数据区域概览 12.2.各区域介绍 12.3.各区域介绍 12.3.1.程序计数器 12.3.2.Java虚拟机栈 1 ...
- JVM学习笔记之-运行时数据区概述及线程概述,程序计数器(PC寄存器),虚拟机栈(栈,局部变量表,操作数栈,动态连接,方法调用,方法返回地址等),本地方法接口,本地方法栈
运行时数据区概述及线程概述 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JV ...
- 【JVM】运行时数据区概述(程序计数器、虚拟机栈、本地方法栈)
前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会 ...
- JVM_03 运行时数据区 [ 程序计数器+本地方法栈 ]
一. 程序计数器 ①. 作用,是用来存储指向下一条指令的地址,也即将要执行的指令代码.由执行引擎读取下一条指令 ②. 特点:①. 是线程私有的 ②. 不会存在内存溢出 ③. 注意:在物理上实现程序计数 ...
- 11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))
11.JDK8内存模型 11.1.本地方法栈(Native Method Stacks) 11.2.虚拟机栈(Java Virtual Machine Stacks) 11.3.栈帧结构 11.3.1 ...
- JVM程序计数器,虚拟机栈,本地方法栈
程序计数器 它记录了程序执行字节码的行号和指令,字节码解释器的工作就是改变程序计数器的值,切换下一条需要执行的指令(分支,循环,跳转,异常等).java虚拟机是多线程通过轮流切换CPU时间片的方式实现 ...
最新文章
- modelsim-win64-10.4-se 破解(win7实验成功)(其他操作系统也可参考,大同小异)
- Windows 钩子的使用
- MySQL trim()函数
- arm64动态链接库通过函数名获取函数偏移
- 网站被黑了被挂马篡改后,如何解决网站被挂马?
- 在Qt 中如何使用OpenCV库
- qtp如何连接mysql_QTP连接MYSQL数据库方法
- java web不用框架_初学javaweb,远离各自框架
- Elastic-Job-Lite分析——作业调度器 JobScheduler 的创建过程
- arcpy_intersectmerge
- 荒唐可笑的文言文编程语言
- 5.10300 - Ecological Premium
- 前端200道面试题及答案(更新中)
- hbiuder运行php_hbuilderx中运行php图文说明
- 网站木马修复网站漏洞修复方案
- 安卓数据转移到iphone老是中断_99元1次!iOS、安卓跨系统互传游戏数据:《王者荣耀》角色转移来了...
- java 实现http长轮询,Long Polling长轮询实现进阶
- Tcp为什么是4次挥手呢?为什么是3次握手,不能是3次挥手呢?
- idc服务器维护岗位,IDC运维工程师工作内容
- Android 主题资源风格定制 1