jvm原理(37)JVM内存空间划分与作用详解

2023-10-31

JVM内存区域分了如下几个区域:

虚拟机栈(Stack Frame)

在执行一个方法的时候,会有一个栈帧,用来存储,方法里边的操作数的出栈入栈,当java文件编译完成的时候,max_stack(栈最大的深度),max_local(最大局部变量表有多少个元素)等都是确定的。

程序计数器(Program Counter)

记录方法执行的位置,线程切换回来之后继续从这个位置执行。

本地方法栈

主要执行本地方法,native 方法

堆(Heap)

所有进程共享的。
我们子啊操作对象的时候,是使用引用的方式去操作对象的,引用放在栈帧里边,对象放在堆里边。
那么引用指向的对象在对里边存储有一下2种方式:
在这里插入图片描述
在这里插入图片描述

都是指针

栈指向堆里边的那块区域分成2部分,每一部分都是存储的一个指针。一个指针指向实际的对象数据,另一个指向
元数据区的class数据。

一半是对象数据,一半类型指针

栈指向堆里边的那块区域分成2部分,一部分直接就是存储的对象数据。另一部分是一个指针,指向元数据区的类,也就是class数据。

oracle的hospot用的是一半是对象数据,一半数类型指针这种方式。
为什么采用这种方式?
在堆里边很对对象都会因为垃圾收集算法,对象地址也伴随着移动,这种对象的移动是很频繁的,如果用第一种方式
每次对象的移动,对象的地址就会发生变化,那么指向它的指针也要跟着变化,这样是很繁琐的,而第二种栈里边指向的区域,第一部分就是直接是对象的数据,而第二部分是class的数据,class的数据一般不会发生变化。这样就相对于第一种方式减少了指针地址变化的次数。

方法区(Method area)

存储元信息,class对象,常量等
永久代(Permanent Genaration)和方法区不是完全等价的,jdk1.8开始彻底去掉了永久代,jdk8使用元空间(meta space)

运行时的常量池

是方法区的一部分,存放常量

直接内存

不是jvm管理的内存区域,DirectBuffer申请的,这部分内存是os管理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jvm原理(37)JVM内存空间划分与作用详解 的相关文章

随机推荐

  • 《C++ Primer》13.1.2节练习

    练习13 6 拷贝赋值运算符本身是一个重载的赋值运算符 定义为类的成员函数 左侧运算对象绑定到隐含的this参数 而右侧运算对象是所属类类型的 作为函数的参数 函数返回指向其左侧运算对象的引用 当对类对象进行赋值时 会使用拷贝赋值运算符 通
  • 网络端口详解

    0端口 无效端口 通常用于分析操作系统 1端口 传输控制协议端口服务多路开关选择器 2端口 管理实用程序 3端口 压缩进程 5端口 远程作业登录 7端口 回显 9端口 丢弃 11端口 在线用户 13端口 时间 17端口 每日引用 18端口
  • C#中GDI绘制高质量平滑图形实例

    protected override void OnPaint PaintEventArgs e try Graphics g e Graphics 获取绘制对象 设置参数 g SmoothingMode System Drawing Dr
  • k8s部署nginx实例、iptables开放端口

    1 运行nginx实例 kubectl run nginx image nginx replicas 2 port 80 2 查看pod root localhost kubectl get pods NAME READY STATUS R
  • 【计算机毕业选题】2023~2024计算机毕业设计选题篇-选题推荐

    学弟学妹们 大家好 这里是JAVA编码选手的博客空间 一年一度的计算机专业毕业设计又要开始了 大四的你们准备好选题了吗 先介绍一下自己 本人软件工程毕业 5年软件开发经验 计算机程序设计 java程序 Java代做 微服务SSM Java管
  • linux删除大量文件时,报错  argument list too long 

    linux删除大量文件时 报错 argument list too long 原因 删除数据量太大 解决办法 1 删除某个文件夹下 所有文件 cd 到需要删除的文件夹内 删除所有文件 ls xargs rm r 执行完后 可能有些文件删除不
  • COMP 9417 T2_2021 Lesson 8

    贝叶斯 numeric attributes 决策树 优点 某种形式的树可能仍然是最流行的data mining 易于理解 易于实施 易于使用 可以分类可以回归 可用于大数据的处理 例子 例子 在N中需要多少个M来分类 N个特征 thres
  • MeshLab相关&纹理贴图

    安装MeshLab sudo apt get install meshlab 操作 旋转视图 鼠标左键 拖动 缩放视图 滑动鼠标滚轮 shift 左键 平移视图 鼠标滚轮按钮 拖动 指定旋转 轨迹球中心 鼠标左键双击模型特定点 改变界面左下
  • python爬虫什么意思-终于知道python爬虫是什么意思

    爬虫过程中也会经历一些绝望啊 比如被网站封IP 比如各种奇怪的验证码 userAgent访问限制 各种动态加载等等 下面是小编为您整理的关于python爬虫是什么意思 希望对你有所帮助 python爬虫是什么意思 python爬虫即网络爬虫
  • ndarray对象——创建

    首先需要创建数组才能对其进行运算和操作 可以通过arrray 函数传递Python的序列对象来创建数组 如果传递的是多层嵌套的序列 将创建多维数组 下例变量中的c import numpy as np a np array 1 2 3 4
  • 信用卡评分模型(R语言)

    信用卡评分 2016年1月10日 一 数据准备 1 问题的准备 目标 要完成一个评分卡 通过预测某人在未来两年内将会经历财务危机的可能性来提高信用评分的效果 帮助贷款人做出最好的决策 背景 银行在市场经济中起到至关重要的作用 他们决定谁在什
  • 1.业务架构·应用架构·数据架构实战 --- 架构实践全景图

    第1章 架构实践全景图 1 1 战略 BA DA AA TA五者的关系 业务架构是跨系统的业务架构蓝图 应用架构 数据架构 技术架构是解决方案的不同方面 BA Business Architecture 业务架构 DA Data Archi
  • 计算机网络-应用层协议3(SMTP、POP3、IMAP)

    1 SMTP 简单邮件传输协议 1 1 SMTP的基本操作 假设Alice想给Bob发送一封简单的ASCII报文 Alice调用她的邮件代理程序并提供Bob的邮件地址 bob someschool edu 撰写报文 然后指示用户代理发送该报
  • 【2022版】Golang面试题目全网超全超详细的口语化解答总结

    2022版 Golang面试题目全网超全总结 1 特性篇 1 1 Golang 使用什么数据类型 1 2 字符串的小问题 1 3 数组定义问题 1 4 内存四区 1 5 Go 支持什么形式的类型转换 1 6 空结构体的作用 1 7 单引号
  • 完全理解图(上)——图的概念、存储及遍历

    术语 图 由结点的有穷集合V和边的集合E组成 在图中 结点常被称为顶点 若两个顶点之间存在一条边 则表示两个顶点相邻 有向图 图的每条边都有方向 无向图 图的每条边没有方向 弧 有向图中 常将边称为弧 含箭头的一端称为弧头 另一端称为弧尾
  • spark机器学习训练模型示例(一)

    利用逻辑回归建立模型 建立训练集和测试集 from pyspark ml import Pipeline from pyspark ml classification import LogisticRegression from pyspa
  • 并发编程系列之线程池工厂类:Executors

    前言 上节讲了讲自定义线程池 今天我们来聊聊线程池框架 在实际开发中我们还是基本使用线程框架Executor给我们提供的一些工具类 Java提供的Executor都在JUC java util concurrent 包下面 主要包括 线程池
  • ChatGPT 与 Github Copilot 对于程序员的作用

    文章目录 1 ChatGPT 是什么 2 ChatGPT 的用处 ChatGPT 写代码 ChatGPT 定位问题 ChatGPT 厘清概念 ChatGPT 内容创作 3 Github Copilot 的用处 4 小结 参考文献 1 Cha
  • Qt Creater Bug: multiple define of ...

    在导入自己写的文件到Qt 工程时 发现报了好多个 multiple define of 的错误 网上查了以下 解决方法有提到 头文件重复包含 ifndef define endif 编译出来的 o文件链接失败 需要clean工程的生成文件
  • jvm原理(37)JVM内存空间划分与作用详解

    JVM内存区域分了如下几个区域 虚拟机栈 Stack Frame 在执行一个方法的时候 会有一个栈帧 用来存储 方法里边的操作数的出栈入栈 当java文件编译完成的时候 max stack 栈最大的深度 max local 最大局部变量表有