JVM 内存介绍

本文主要介绍: JVM 内存分哪几个区,每个区的作用是什么
备注:
橙色:堆 和 方法区 ,属于jvm公有部分,可以进行调优
灰色:java栈,本地方法栈和计数器 属于jvm的私有部分,不可进行调优

一个对象从创建到被回收的过程是怎样的?

Personp=new Person() 100个对象
第一步:
        100个对象创建之后,会存储到新生代中的伊甸园区
第二步:
        经过一轮GC后,绝大多数的对象会被回收,仅剩下5个对象存活
第三步:
        再创建100个对象+5=105对象
        又经过第二轮gc之后,仍有5个存活,其中有2个是上一轮留下的
第四步:
        经过15轮gc 后仍然存活的对象 会存入到养老区。
第五步:
        养老区中也会进行GC,一旦养老代gc速度赶不上对象的产生速度了,就会OOM,出现jvm挂机

类是如何加载进内存中?

核心是需要classLoader
会涉及双亲委派机制所以分类自上而下的去罗列
Bootstrap ClassLoader根加载器 rt.jar
Extension ClassLoader扩展类加载器
Application ClassLoader 应用类加载器
用户自定义类加载器如果
自定义String

总结过程:

        三大步 :加载---->连接---->初始化
        七小步 :加载---->验证---->准备---->解析---->初始化---->使用---->卸载
        加载:将class文件加载到内存中
        验证:验证字节码文件的正确性
        准备:为类的静态变量分配内存空间并赋予初始值
        解析:类加载器加载类所需的其他类
        初始化:为类以及变量赋予真正的值
        使用:类的调用
        卸载:类的垃圾回收

java 虚拟机主要分为以下几个区

1. 方法区 1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生
GC,在这里进行的 GC 主要是对方法区里的常量池和对类型的卸载
2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译
器编译后的代码等数据。
3. 该区域是被线程共享的。
4. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。
该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也
会存在这个常量池中。
2. 虚拟机栈
1. 虚拟机栈也就是我们平常所称的栈内存,它为 java 方法服务,每个方法在执行
的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口
等信息。
2. 虚拟机栈是线程私有的,它的生命周期与线程相同。
3. 局部变量表里存储的是基本数据类型、returnAddress 类型(指向一条字节码
指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,
也有可能是代表对象的句柄或者与对象相关联的位置。局部变量所需的内存空间在
编译器间确定
4. 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量
表通过索引来访问,而是压栈和出栈的方式
5. 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引
用是为了支持方法调用过程中的动态连接.动态链接就是将常量池中的符号引用在
运行期转化为直接引用。
3. 本地方法栈 本地方法栈和虚拟机栈类似,只不过本地方法栈为 Native 方法服务。
4.
java 堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实
例都在这里创建,因此该区域经常发生垃圾回收操作。
5. 程序计数器:
内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的
字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数
器完成。该内存区域是唯一一个 java 虚拟机规范没有规定任何 OOM 情况的区
域。
https://openjdk.org/jeps/122   介绍 静态变量、字符串常量从永久代移动到堆中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot系列:通过AOP+注解优雅实现操作日志记录

文章目录 前言一、简介1.1 操作日志在企业应用中的重要性1.2 使用AOP和注解实现操作日志记录的好处 二、开发环境三、准备工作3.1 创建操作日志记录表3.2 创建系统日志实体类 四、代码实现4.1 创建业务枚举类4.2 创建日志注解4.3 创建操作状态枚举类4.4 创建IP工具类4.5 创建切…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具,用于列出正在运行的Java进程 jps命令的使用:cmd打开直接jps 1.1不带参数: jps 默认情况下,列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l:显示完整的主类名或 JAR 文件…

增值税进项税额转出6大知识点柯桥学会计会计实操做账手把手教学

什么情况下需要进项转出? 转多少? 怎么填报? 小编梳理了一些 关于增值税进项税额转出的常见问题 快来学习吧! 哪些情况下进项税额不得从销项税额中抵扣? 1.用于简易计税方法计税项目、免征增值税项目、集体福利或…

ARM 虚拟机FVP环境搭建

ARM Fixed Virtual Platforms (FVPs) 是由 ARM 提供的一系列虚拟化硬件模拟器,用于在物理硬件可用之前开发和测试软件。FVP 模型非常适用于软件开发、验证和性能分析,涵盖了从裸机到操作系统和复杂 SoC 系统的各种应用。 这里以Cortex-M55为例&#xff0…

springcloud使用微服务的搭建

微服务的搭建 1.配置对应信息 Springboot 、springcloud、springcloud alibaba对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 2.pom.xml的配置 2.1 总项目pom.xml引入依赖 <parent><groupId>org.sprin…

Linux【文件权限的理解】

1. linux的发展史 首先在学习linux之间&#xff0c;我们要问自己几个问题&#xff0c;linux从哪里来&#xff0c;为什么会出现&#xff0c;它的出现代表着什么。 linux的前身unix Multics 和 UNIX 的起源&#xff1a; Multics 是一个由通用电器公司、贝尔实验室和麻省理工学院…

InterSystems IRIS使用python pyodbc连接 windows环境,odbc驱动安装,DSN配置,数据源配置

一、创建的数据库和数据 SELECT 1SELECT $ZVERSIONCREATE TABLE MyApp.Person ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHAR(1) );CREATE TABLE MyApp.Person2 ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHA…

AI写作不懂提示词 大象Prompt 保姆级系列教程三

一、提示词的核心价值究竟是啥&#xff1f; 最近跟不少业内朋友探讨这事儿&#xff0c;我觉得&#xff1a;提示词的核心价值在于对方法论的封装以及由此带来的知识传播速度加快。 通俗讲&#xff0c;假如你熟悉的行业里有个厉害的“老师傅”&#xff0c;他在核心业务上有好多心…

XXL-Job:分布式任务调度平台的深入解析

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

买卖股票-vector

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 当天对比当天的&#xff0c;如果符合条件就换&#xff1b; class Solution { public:int maxProfit(vector<int>& prices) {int inf 1e9;int minp inf, maxprofit 0;int n prices.size();for(i…

Docker的数据管理和网络通信

目录 一、Docker 的数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 二、端口映射 三、容器互联&#xff08;使用centos镜像&#xff09; 四、*Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3&#xff0e;基于Dockerfile 创…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

一个引发openssl崩溃问题案例

1 背景 最近用libevent写了一个https代理功能&#xff0c;在调研的时候&#xff0c;遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…

电脑分区如何合并?简单易行的操作方法!

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活中不可或缺的工具。在使用电脑的过程中&#xff0c;我们有时会对硬盘进行分区&#xff0c;以便更好地管理数据和提高运行效率。然而&#xff0c;随着时间的推移&#xff0c;我们可能会发现分区过多导致管理复杂&#xf…

【数据结构】高效解决连通性问题的并查集详解及Python实现

文章目录 1. 并查集&#xff1a;一种高效的数据结构2. 并查集的基本操作与优化2.1 初始化2.2 查找操作与路径压缩2.3 合并操作与按秩合并 3. 并查集的应用3.1 判断连通性3.2 计算连通分量 4. 并查集的实际案例4.1 图的连通性问题4.2 网络连接问题 5. 并查集的优缺点5.1 优点5.2…

如何使用ECharts和DataV.GeoAtlas创建广东省人口分布图

引言 数据可视化是数据分析中的重要环节&#xff0c;它可以帮助我们直观地理解数据。ECharts 是一个由百度团队开发的开源数据可视化库&#xff0c;它提供了丰富的图表类型和灵活的配置选项。DataV.GeoAtlas 是阿里云提供的一个地理数据可视化平台&#xff0c;它可以帮助我们获…

记录|.NET上位机开发和PLC通信的实现

本文记录源自&#xff1a;B站视频 实验结果&#xff1a;跟视频做下来是没有问题的。能运行。 自己补充做了视频中未实现的读取和写入数据部分【欢迎小伙伴指正不对的地方】 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Ste…

vue3表格使用拖拽排序

拖拽排序 实现效果实现步骤拖拽排序功能的完整代码 实现效果 实现步骤 先安装sortable.js库使用的vue文件中引入 import Sortablejs from ‘sortablejs’在进入页面后创建sortable实例在提交后端时可获取到排序后的最新table列表数据 sortable.js文档 拖拽排序功能的完整代码 …

SpringBoot中常用的注解及其用法

1. 常用类注解 RestController和Controller是Spring中用于定义控制器的两个类注解. 1.1 RestController RestController是一个组合类注解,是Controller和ResponseBody两个注解的组合,在使 用 RestController 注解标记的类中&#xff0c;每个方法的返回值都会以 JSON 或 XML…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…