JVM相关知识点

news2024/12/27 13:21:17

java内存区域

在这里插入图片描述
线程私有的:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享的:

  • 方法区
  • 直接内存

程序计数器:记录当前线程执行的位置 当线程切换后能够知道该线程上次运行到哪了

java虚拟机栈:
在这里插入图片描述
方法调用的数据通过栈进行传递,每次方法调用都会有一个对应的栈帧被压入栈中,每一个方法调用结束后,会有一个栈帧被弹出

栈由一个个栈帧组成,每个栈帧包括:局部变量表、操作数栈、动态连接、方法返回地址

局部变量表:主要存放了编译器可知的各种数据类型、对象引用

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

动态连接:服务于一个方法需要调用其它方法的场景。用于将符号引用转换为调用方法的直接引用。

在这里插入图片描述
java方法有两种返回方式,一种是return,一种是抛出异常,不论怎么返回,栈帧都会弹出。即栈帧随着方法调用而创建,随着方法结束而销毁。

OutOfMemoryError:HotSpot虚拟机的栈容量并不能动态扩展,线程申请栈空间只要成功了就不会OOM,但如果申请失败会抛出OOM

本地方法栈:虚拟机栈为虚拟机执行java方法服务,本地方法栈则为虚拟机使用到的Native方法服务。在HotSpot虚拟机中和Java虚拟机栈合二为一。

堆是java虚拟机所管理的内存中最大的一块,是所有线程共享的一块内存区域,在虚拟机启动时创建。

几乎所有的对象实例以及数组都在这里分配内存

java堆时垃圾收集器管理的主要区域,因此也被称作GC堆。从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以java堆还可以细分为:新生代和老年代

在jdk7及以前堆内存分为 新生代 老生代 永久代

在jdk8之后 永久代被元空间取代

在这里插入图片描述
大部分情况 对象首先在Eden区域分配,再一次新生代垃圾回收后,如果对象还存活,则会进入S0或S1,并且对象的年龄还会加1(Eden到Survivor区后对象的初始年龄变为1)
当它的年龄增加到一定程度(默认为15),就会被晋升到老年代

堆这里最容易出现的就是OutOfMemory错误
1、java.lang.OutOfMemoryError: GC Overhead Limit Exceeded
JVM花大量时间执行垃圾回收并且只能回收很少的堆空间时

2、java.lang.OutOfMemoryError: Java heap space
创建新的对象时,堆内存中的空间不足以存放新创建的对象

方法区

方法区属于时JVM运行时数据区域的一块逻辑区域

在这里插入图片描述
设置元空间:

-XX:MetaspaceSize=N //设置 Metaspace 的初始(和最小大小)
-XX:MaxMetaspaceSize=N //设置 Metaspace 的最大大小

运行时常量池

将编译后的类信息放入方法区中,用来动态获取类信息:class文件元信息描述、编译后的代码数据、引用类型数据、类文件常量池等

字符串常量池

为字符串专门开辟的一块区域,用于避免字符串的重复创建

字符串常量池为什么在堆里? – 方法区实现的gc回收效率太低,但字符串gc回收的频率非常高

直接内存

直接内存是一种特殊的内存缓冲区,并不在java堆或方法区中分配的。而是在本地内存中。

虚拟机对象创建过程

1、类加载检查
虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过,没有的话先执行相应的类加载过程

2、内存分配
为新生对象分配内存,对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中划分出来

3、初始化零值
将分配到的内存空间都初始化为零值

4、设置对象头
对对象进行必要的设置,如对象是哪个类的实例,如何才能找到类的元数据信息,对象的哈希码,对象的gc分代年龄等信息。

5、执行init方法
对java来说,此时对象创建才刚刚开始,还需要执行init方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇文章带你重新回溯单链表的所有

🍉博客主页:阿博历练记 📗文章专栏:数据结构与算法 🚚代码仓库:阿博编程日记 🌹欢迎关注:欢迎友友们订阅收藏关注哦 文章目录 🍌前言💻无头单向非循环链表&am…

SSM(Spring、SpringMVC、MyBatis)整合、配置

SpringMVC是一个表述层(前台的页面和后台的servlet)框架,处理浏览器发送到服务器的请求,并且将一些数据响应到浏览器 MyBatis是一个持久层框架,帮助我们连接数据库,访问数据库,操作数据库中的数据 Spring是一个整合型框…

毕业论文相关

毕业论文参考文献和Word保存 一、Word中出现[7-9]多个文献的引用 在正文中选中参考文献角标,右击选择“切换域代码”,参考文献角标[7][8][9]变为{ REF _Ref98345319 \r \h * MERGEFORMAT }{ REF _Ref98345321 \r \h * MERGEFORMAT }{ REF _Ref99390603…

AQS独占锁之ReentrantLock源码调试(JDK8)

前言: 为什么需要学习ReentrantLock? 目前项目开发中使用到的几乎都是分布式锁,平时可能很少用到java自带的锁; 但实际在我们java的源码中,随处可见需要使用锁来保证线程安全,所以还是有必要学习下ReentrantLock。 1…

7.分区表和分桶表

1.创建分区表 create table dept_partition(deptno int,dname string,loc int ) partitioned by (dt string) // 分区字段(date) row format delimited fields terminated by \t; 2.增删改查操作 2.1 插入数据 1)导入本地数据 -- 创建一个名字为dt2022-06-14的…

R语言 | 输入与输出

目录 一、认识文件夹 1.1 getwd()函数 1.2 setwd()函数 1.3 file.path()函数 1.4 dir()函数 1.5 list.files()函数 1.6 file.exists()函数 1.7 file.rename()函数 1.8 file.create()函数 1.9 file.copy()函数 ​1.10 file.remove()函数 二、数据输出:ca…

单片机c51中断 — 中断扫描法行列式键盘

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断 在第4章中已介绍过行列式键盘的工作原理,并编写了相应的键盘扫描程序。但应注意的是,在单片机应用系统中,键盘扫描只是 CPU 工作的内容之一。CPU …

一文理清 TiDB 与 MySQL 中的常用字符集及排序规则

1. 字符集(character set) 1.1. 字符集与编码规则 字符集(character set)即为众多字符的集合。字符集为每个字符分配一个唯一的 ID,称为 “Code Point(码点)”。编码规则是将 Code Point 转换…

商户查询的缓存——缓存击穿问题

缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务比较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击 常见的解决方案有两种: 互斥锁(高并发时性能较差) 逻辑过期 基于互斥锁方…

ASN.1-PKCS10-x509

在国际标准ITU-T X.690 《Information technology – ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)》中定义了ASN.1编码规则。对于一般数据类型(比如Integer、octe…

【软件工程】自动化测试保证卓越软件工程能力(2)

本次内容我们抽象一个待测试的目标软件产品,产品是基于web开发的。 自动化平台不是独立存在的,必然有一个目标待测试产品,用自动化测试来反映产品功能是否还是好的。 产品抽象v1 第一个版本,使用者(USER)发…

配置本地Angular环境并使用VsCode调试Angular前端项目

配置本地Angular环境并使用VsCode调试Angular前端项目 配置本地Angular环境部署Node.Js本地环境配置一下环境变量 使用vscode调试Angular安装vscode 配置本地Angular环境 部署Node.Js本地环境 1 从官网下载node.js, 本文为(v16.13.0) 下载地址: https://nodejs.org/dist/v16.…

windows server 2016报错无法打开所需文件install.wim

报错的前提条件: 1.下载原版镜像后,使用UltraISO制作U盘系统盘。 2.正常安装系统,到“安装程序正在启动界面”时弹出错误窗口,报错“Windows无法打开所需的文件 E:\Source\install.win。请确保安装所需的所有文件可用,并重新启动安装。错误代码:0x80070026”。 问题原因…

【MySQL学习】MySQL表的复合查询

文章目录 前言一、案例准备二、基本查询三、多表查询四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 FROM子句中的子查询4.5 合并查询4.5.1 UNION4.5.2 UNION ALL 五、自连接六、内外连接6.1 内连接6.2 外连接6.2.1 左外连接6.2.2 右外连接 前言 对MySQL表的基本查…

大数据系列——Flink理论

概述 Flink是一个对有界和无界数据流进行有状态计算的分布式处理引擎和框架,既可以处理有界的批量数据集,也可以处理无界的实时流数据,为批处理和流处理提供了统一编程模型,其代码主要由 Java 实现,部分代码由 Scala实…

Java——Java选择题复习(1)(Java基础,进程,多线程,操作系统)

1. 下面关于程序编译说法正确的是() A. java语言是编译型语言,会把java程序编译成二进制机器指令直接运行 B. java编译出来的目标文件与具体操作系统有关 C. java在运行时才进行翻译指令 D. java编译出来的目标文件,可以运行在任意…

房地产中介迎来重磅文件,但核心目标仍是专业化规范化发展

5月8日下午,住房和城乡建设部、市场监管总局联合刊登重磅文件《关于规范房地产经纪服务的意见》(以下简称《意见》),因其涉及对经纪服务收费等具体问题的指导,文件引发市场重点关注。 不过,在系统性梳理文…

Redisson cannot use an unresolved DNS server address问题解决

概述 本文记录Mac IDEA开发,公司 远程办公时遇到的两个问题,记录一下。 问题 cannot use an unresolved DNS server address: [fe80::1%en0]:53 在家里,连上公司的VPN后,即可打开公司内网,远程办公。一切正常。某…

JVM学习(七):运行时数据区(精讲)

目录 一、运行时数据区概述 1.1 概述 1.2 运行时数据区中的GC和OOM 二、程序计数器(PC寄存器,Program Counter Register) 2.1 介绍 2.2 作用 2.3 特点 2.4 使用案例 2.5 常见面试题 三、虚拟机栈(Java Virtual Machi…

前端008_类别模块_新增功能

类别模块_新增功能 1、需求分析2、新增窗口实现3、列表引用新增组件4、关闭弹出窗口5、校验表单数据6、提交表单数据6.1、Mock 添加新增模拟接口6.2、Api 调用接口6.3、测试新增功能1、需求分析 点击 新增 按钮后,对话框形式弹出新增窗口输入分类信息后,点击 确定 提交表单数…