JVM内存结构

文章目录

  • JVM的内存结构
    • 程序计数器
    • 虚拟机栈(栈)
    • 本地方法栈
      • Native关键字
    • 元空间(JDK1.8之前为永久代)
  • 实例对象实例化的过程

JVM的内存结构

先看下图

内存结构分为以下的两种:线程私有以及线程共享
线程私有:程序计数器(PC寄存器),虚拟机栈,本地方法栈随着线程的产生而产生,随着线程的消失而消失。
线程共享:有堆,方法区(又叫元空间)

程序计数器

程序计数器是程序的一个标识,每条线程都需要有一个独立的程序计数器,用于存储即将执行的指令代码。

作用:
在线程数大于 CPU 数的情况下,会存在线程切换,程序计数器会记下线程即将执行的操作,这样执行线程切换的话就知道下一步要执行什么,比如顺序执行,选择,循坏,异常处理。

程序计数器的生命周期随着线程的创建而创建,随着线程的结束而死亡。

虚拟机栈(栈)

栈由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法返回地址。

  1. Java 虚拟机栈(简称栈)和数据结构的栈是类似的,先进后出的数据结构,只支持出栈和入栈。
  2. 线程私有的,它的生命周期和线程相同,随着线程的创建而创建,随着线程的死亡而死亡。
  3. 所有的 Java 方法(本地方法除外)调用都会通过栈来实现的。
  4. 每一次方法调用都会有一个对应的栈帧被压入栈中,每一个方法调用结束后,都会有一个栈帧被弹出。

  • 局部变量表

    局部变量表 主要存放了编译期的各种数据类型(比如:int),对象引用(reference)

  • 操作数栈

操作数栈主要作为方法调用的中转站使用,用于存放方法执行过程中产生的**中间计算结果,**比如中间计算产生的临时变量。

  • 动态链接

    Class 文件在常量池中会保存有大量的符号引用比如方法引用的符号引用。当一个方法要调用其他方法,将其中的符号引用转换为调用方法的直接引用,这个过程也被称为动态链接。

本地方法栈

和虚拟机栈所发挥的作用类似,区别是: 而本地方法栈则为虚拟机使用到的 Native 方法服务。一般使用C语言写的方法。

Native关键字

  • 不是调用Java程序,去底层调用c,c++程序
  • 会进入本地方法栈,调用本地接口
  • Java 本地接口(JNI)的作用就是扩展Java的使用,融合不同的语言被Java调用
  • 起初Java诞生的时候,C,C++横行,所以想要立足就必须要有调用C,C++的程序

这个关键字主要是调用调用底层,硬件等,如Java程序驱动打印机,管理系统

  • 存储着类的信息实例对象等等,是最大的内存空间
  • 是垃圾回收机制 GC 的重要区域
  • 用于常用于调优的地方。

主要分为

  1. 新生区** ** 1/3
  • Eden 区(伊甸园)8/10
  • survive from (幸存from区)1/10
  • survive to (辛存to区)1/10
  1. 养老区 2/3
  2. 元空间(JDK8之前叫永久区)

  • 每次GC 都会将Eden中活对象移到幸存区中,Eden 区被 GC(垃圾回收机制) 后,就会是空的
  • 幸存区 from 和 to 是动态交换的。
  • 进行轻 GC 后幸存的能进入幸存区,进行重 GC 能幸存的进入养老区。
  • 当一个对象经历了 15 次的GC都还没有死,就会进入养老区 可以通过-XX:MAXTenuringThreashold=5的参数来调试
  • 元空间(永久代)逻辑上是存在的,物理上是不存在的。

使用idea来配置JVM传参
-Xms1024m -Xmx1024 -XX:+PrintGCDetails

  • Xms:最初始化内存分配 ;一般是 本机内存的 1/64
  • Xmx:最大的分配内存 ; 一般是 本机内存的1/4
  • XX…:打印GC的细节

如果一个项目中出现 oom 错误应该如果排故障

  • 使用命令-Xmx 进行内存扩大,看看是否还是错误,尝试扩大内存看结果

-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

元空间(JDK1.8之前为永久代)

元空间是虚拟机的规范,许多厂家是没有元空间的。
元空间又名方法区,主要存储静态变量,动态变量,常量,类信息(class模板,构造方法,接口定义),运行时常量池(字符串常量池)。

实例对象实例化的过程

new test()的发生过程: 在栈中生成一个对象引用指向堆中的实例变量,堆会根据方法区中的类信息进行加载赋值类中字符串,会先从常量池中找初值
如下图:

我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/326277.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1070: 邻接矩阵存储简单路径

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int arr[100][100]; int n; int sta, des; vector<int> path; vector<vector<int>> res; void dfs(vector<int> &a,int i) {a[i] 1;path.push_back(i);…

【数据分析面试】42.用户流失预测模型搭建(资料数据分享)

题目 保持高的客户留存率可以稳定和提到企业的收入。因此&#xff0c;预测和防止客户流失是在业务中常见的一项数据分析任务。这次分享的数据集包括了电信行业、银行、人力资源和电商行业&#xff0c;涵盖了不同业务背景下的流失预测数据。 后台回复暗号&#xff08;在本文末…

【Ubuntu永久授权串口设备读取权限“/dev/ttyUSB0”】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数&#xff08;ERror Function, ERF&#xff09;进行简单的介绍&#xff0c;并探索如…

Linux网站服务

1.概念:HTML:超级文本编辑语言 网页:使用HTML,PHP,JAVA语言格式书写的文件。 主页:网页中呈现用户的第一个界面。 网站:多个网页组合而成的一台网站服务器。 URL:统一资源定位符&#xff0c;访问网站的地址。 网站架构:LAMP: LinuxApacheMYSQLPHP(系统服务器程序数据管理…

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件&#xff0c;其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch&#xff0c;用户可以轻松设置各种手势&#xff0c;如三指轻点、四指左右滑动等&#xff0c;来执行常见的任务&#xff0c;如打开应用、切换窗口、滚…

爬虫工作量由小到大的思维转变---<第七十三章 > Scrapy爬虫详解一下HTTPERROE的问题

前言&#xff1a; 在我们的日常工作中&#xff0c;有时会忽略一些工具或组件的重要性&#xff0c;直到它们引起一连串的问题&#xff0c;我们才意识到它们的价值。正如在Scrapy框架中的HttpErrorMiddleware&#xff08;HTTP错误中间件&#xff09;一样&#xff0c;在开始时&…

MATLAB R2017b安装的关键一步

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 MATLAB R2017b的安装文件比较庞大&#xff0c;由两个iso文件组成&#xff1a;R2017b_win64_dvd1.iso和R2017b_win64_dvd2.iso。安装时需要注意的是&#xff0c;首先使用DAEMON Tools Lite打开R2017b_win64_dvd1.iso&am…

【Git】Git在Gitee上的基本操作指南

文章目录 1. 查看 git 版本2. 从Gitee克隆仓库&#xff1a;3. 复制文件到工作目录&#xff1a;4. 将未跟踪的文件添加到暂存区&#xff1a;5. 在本地提交更改&#xff1a;6. 将更改推送到远程仓库&#xff08;Gitee&#xff09;&#xff1a;7. Windows特定提示&#xff1a; 1. …

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程&#xff0c;不仅是品尝美酒&#xff0c;更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得&#xff0c;养成写品鉴笔记的习惯是十分必要的。 首先&#xff0c;选择一个适合的记录工具。可以是传统的笔记本&#xff0c;也可以是…

使用Git管理github的代码库-上

1、下载安装Git https://download.csdn.net/download/notfindjob/11451730?spm1001.2014.3001.5503 2、注册一个github的账号&#xff08;已经注册的&#xff0c;可略过这一步&#xff09; 3、打开git命令行&#xff0c;配置github账号 git config --global user.name &quo…

【C语言】指针(一)

目录 一、内存 1.1 ❥ 理解内存和地址的关系 1.2 ❥ 编址 二、指针变量 2.1 ❥ 取地址操作符&#xff08;&&#xff09; 2.2 ❥ 指针变量和解引用操作符&#xff08;*&#xff09; 2.3 ❥ 指针变量的大小 三、指针类型的意义 3.1 ❥ 指针的解引用 3.2 ❥ 指针-整数 3…

攻防世界PHP2

1、打开靶机链接http://61.147.171.105:49513/&#xff0c;没有发现任何线索 2、尝试访问http://61.147.171.105:49513/index.php&#xff0c;页面没有发生跳转 3、尝试将访问 尝试访问http://61.147.171.105:49513/index.phps index.php 和 index.phps 文件之间的主要区别在于…

websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架

文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制&#xff0c;通常是1024&#xff0c;当然可以更改数…

[机器学习-06] | Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Linux 第二十九章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

FPGA第2篇,FPGA与CPU GPU APU DSP NPU TPU 之间的关系与区别

简介&#xff1a;首先&#xff0c;FPGA与CPU GPU APU NPU TPU DSP这些不同类型的处理器&#xff0c;可以被统称为"处理器"或者"加速器"。它们在计算机硬件系统中承担着核心的计算和处理任务&#xff0c;可以说是系统的"大脑"和"加速引擎&qu…

四款不同类型的企业防泄密软件推荐

在数字化快速发展的今天&#xff0c;企业数据的安全与保密显得愈发重要。防泄密软件作为一种专门的数据保护工具&#xff0c;已经逐渐成为企业不可或缺的安全屏障。本文将深入探讨防泄密软件对企业的意义&#xff0c;并介绍一些市面上主流的防泄密软件。 首先&#xff0c;防泄密…

哈希(Hash)

文章目录 1.stl提供的哈希容器1.1unordered_map和unordered_set容器1.1.1定义1.1.2这些容器和map和set的区别在于**&#xff1a;1.1.3物理结构 2 哈希&#xff08;实现哈希&#xff09;2.1本质&#xff1a;哈希表2.2底层原理&#xff1a;哈希概念2.2.1哈希方法2.2.2 哈希函数&a…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…