JVM进阶(2)

news2025/4/22 3:09:36
一)方法区:

 java虚拟机中有一个方法区,该区域被所有的java线程都是共享,虚拟机一启动,运行时数据区就被开辟好了,官网上说了方法区可以不压缩还可以不进行GC,JAVA虚拟机就相当于是接口,具体的HotSpot就是虚拟机的实现,因为永久代还是使用的是JAVA虚拟机的内存,

方法区域可以是固定大小的,也可以根据计算的需要扩展,如果不需要更大的方法区域,则可以收缩,物理上是不连续的,在逻辑上是连续的;

1)方法区和JAVA堆一样,是各个线程共享的内存区域

2)方法区在JVM启动的时候就被创建,并且它的实际的物理内存空间和JAVA队去一样都可以是不连续的

3)方法区的大小和堆空间一样,可以选择固定大小或者是可扩展

4)方法去的大小决定了系统可以保存多少各类,如果系统定义了太多的类,导致方法去溢出,虚拟机同样也会抛出内存溢出错误,java.lang.OutOfMemory:perm space(永久代空间溢出)或者是java.lang.OutOfMemeory:MeatSpace(元空间空间溢出),比如说大量加载第三方jar包,Tomact部署的工程过多,大量的动态生成反射类,加载大量第三方jar包,Tomact部署的应用程序太多,一个简单的代码可能要加载很多类,动态生成反射类,比如说动态代理,元空间不在虚拟机设置的内存中,而是使用本地内存物理内存,字符串常量池和静态变量也会变化,但是如果超过本地内存上限,也会发生OOM metaSpace,因为方法区是不共享的,所以说只能有一个类可以调用类加载器实现类加载;

5)关闭JVM就会释放这个区域的内存,JDK7以前,习惯上把方法区称之为是永久代,JDK8开始使用元空间替代了永久代,本质上方法区和永久代并不是等价的,但是仅仅是针对于HotSpot虚拟机而言的;也就是JAVA虚拟机规范,对于如何实现方法区不会做统一要求,现在来看使用永久代共容易出现OOM;

6)元空间的本质和永久代类似,都是对JVM规范中方法去的实现,不过元空间和永久代最大的区别在于元空间不在虚拟机设置的内存中,二时使用的是本地内存,永久代和元空间不光名字变了,况且内部结构也调整了,根据JAVA虚拟机规范规定,如果方法去无法满足新的内存分配的需求的时候,会抛出OOM异常,本地内存是无限大的,况且静态变量字符串常量池等等也会变化;

-XX:MetaspaceSize=100m,-XX:MaxMetaspaceSize=100m

一般在实际开发中会进行设置MetaspaceSize,不会设置MaxMetaspaceSize是默认值-1即可,这个Metaspace一开始要设置的大一些,为了避免频繁的发生FullGC导致调整水平线

方法区用于存放已经被虚拟机加载的类型信息,常量,静态变量以及即时编译器编译过后的代码缓存

1)类型信息:对于每一个加载的类型(类 class,接口 interface,枚举Enum,注解 annoation),JVM必须在方法中存放一下类型信息:

1)这个类型的完整有效名称(全名=包名+类名)

2)这个类型直接的父类的完整有效名字(对于interface和java.lang.object,都是没有父类的)

3)这个类型的修饰符

4)这个类直接接口的有效列表

2)域信息:就是成员变量的属性,JVM必须在方法区中保存类型的所有域的相关信息以及域的声明顺序,域的相关信息包括,修饰符,关键字等等,名称类型,修饰符,在方法区中也是保留着这个类信息是被哪一个类加载器加载进来的,类加载器的信息也是在类的信息中是有纪录的,同时类加载也会记录他都加载过那些类,彼此相互记录;

3)方法信息:操作数栈的深度,方法的权限,形参,局部变量表的深度,以及try catch包裹的代码范围信息;

上面的这段代码执行也不会出现空指针异常,被static和final修饰的量是在编译过程中的准备阶段就被附上初值了

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

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

相关文章

IDEA 2023.2.2 使用 Scala 编译报错 No scalac found to compile scala sources

一、问题 scala: No scalac found to compile scala sources 官网 Bug 链接 二、临时解决方案 Incrementality Type 先变成 IDEA 类型 Please go to Settings > Build, Execution, Deployment > Compiler > Scala Compiler and change the Incrementality type to …

STM32MP157D BSP

一,全志R16、IMX6ULL和STM32MP157D启动相关 1,IMX6ULL是EMMC启动后,通过uboot fat命令的load进内存进行启动测试 2,openedv应该也是参考的官方的板子,类似调试口等均应该是一致的,所以目前就是用正点原子…

网络扫描与网络监听

前言:前文给大家介绍了网络安全相关方面的基础知识体系,以及什么是黑客,本篇文章笔者就给大家带来“黑客攻击五部曲”中的网络扫描和网络监听 目录 黑客攻击五部曲 网络扫描 按扫描策略分类 按照扫描方式分类 被动式策略 系统用户扫描 …

干货满满,上传多个文件秒变微信翻页电子书

亲们,你们还在为找不到好的制作电子书网站烦恼吗?今天给大家分享一个超级实用的神器! 这个神器就是——FLBOOK在线制作电子杂志平台!如果你有排版好的电子文档,就能一键上传多个文件秒变微信翻页电子书,是不…

市面上最好的 9 款 Android 数据恢复软件榜单

Android 是世界上最受欢迎的智能手机操作系统,拥有超过 20 亿的用户群,这是一个巨大的数字,而且还在不断增加。然而,随着用户数量的不断增加,Android数据丢失的问题也日益增多。Android 确实提供了 Google Drive 和 Go…

UWB技术在定位系统中的革新应用

超宽带技术(Ultra-Wideband, UWB)的崛起为定位系统领域带来了前所未有的机遇。其亚米级别的高精度定位、强大的穿透能力以及高速数据传输的特性,使得UWB在室内和室外定位系统中得以广泛应用。本文将深入探讨UWB技术在定位系统中的应用&#x…

PyTorch卷积神经网络各层实现与介绍

本文将讲解,PyTorch卷积神经网络各层实现与介绍,包括:基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 😜 对于相关原理,可以跳转👉卷积神经网络CNN各层基本知识 &…

2023.10.26 关于 CAS 和 ABA 问题

目录 CAS 操作 执行过程 CAS 应用场景 实现原子类 实现自旋锁 ABA 问题 CAS 操作 全称 Compare and swap ,译为 比较并交换 执行过程 我们假设内存中的原始数据 V,旧的预期值 A,需要修改的新值 B 比较 A 与 V 是否相等如果比较相等&…

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录 【SpringBoot日志】 什么是日志,日志的作用 关于日志的基本信息,又有哪些呢? 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…

QT图形视图框架绘制曲线图和Smith图

QT图形视图框架绘制曲线图和Smith图 QGraphicsView是Qt框架中的一个图形视图部件,用于显示和处理2D图形元素。它提供了强大的工具来创建交互式和自定义的图形应用程序。在绘制折线图和Smith图时,使用QGraphicsView有以下一些优点: 交互性&am…

二叉树题目:最大二叉树 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:最大二叉树 II 出处:998. 最大二叉树 II 难度 5 级 题目描述 要求 如果一个树满足其中每个结点的值…

【Python学习】—Python基础语法(六)

一、数据容器 Python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 二、list列表 列表的下标索引 嵌套列表的下标 my_list[aaa,1,True] print(my_list[0]) p…

电压检测芯片如何发挥作用,保护电路?纳米软件为您介绍工作原理

电压检测芯片是一种常见的集成电路芯片,用来监测电路中的电压变化,防止电路受到过电压和欠电压的损坏。电源电压检测芯片被广泛应用于各种电子设备中,比如手机、电脑、家电等,在电压监测、电源管理、电池电量检测、温度检测、电压…

3D模型怎么贴法线贴图?

1、法线贴图的原理? 法线贴图(normal mapping)是一种计算机图形技术,用于在低多边形模型上模拟高多边形模型的细节效果。它通过在纹理坐标上存储和应用法线向量的信息来实现。 法线贴图的原理基于光照模型。在渲染过程中&#x…

云表低代码:数字化转型的新风口,你了解多少?

自2019年起,低代码开发平台骤然引发热议,成为了科技领域的新宠。关于其定义和影响力,众说纷纭。有人将它誉为第四代编程语言,有人视它为开发模式的颠覆者,更有人认为它引领了企业管理模式的变革。这股热潮在社区内引发…

BIOS MBR UEFI GPT详解

先来看下名词 启动方式: Legacy:传统的。指的就是BIOS。 BIOS:Basic Input Output System,中文名称"基本输入输出系统"。 UEFI:Unified Extensible Firmware Interface,中文名称"统一的…

获取IEEE会议论文的标题和摘要

获取IEEE会议论文的标题和摘要 – 潘登同学的爬虫笔记 文章目录 获取IEEE会议论文的标题和摘要 -- 潘登同学的爬虫笔记 打开IEEE的高级搜索环境准备完整爬虫过程获取文章地址翻译函数获取文章标题和摘要 前几天接到导师的一个任务,要我去找找IEEE Transactions on K…

用低代码平台代替Excel搭建进销存管理系统

目录 一、用低代码平台搭建系统 1.需求调研 2.基于痛点梳理业务流程 3.低代码实现 (1)基础资料模块 (2)采购管理模块 (3)销售管理模块 (4)库存管理模块 (5&…

快手联合阿里云构建容器混合云架构,轻松应对百万级秒杀

云布道师 摘要:快手电商在 2023 年某大 V 大促直播活动中,首次采用混合云弹性调度架构,应对大 V 百万级别秒杀峰值的计算资源需求。此次为【快手容器云 阿里云】的深度技术结合,在【快手电商直播秒杀】场景下的大规模首次应用。既…

Calcite 解析层详解

1、概述 用户的操作请求经过服务层的接收和封装被传递给calcite-core模块。 其中第一站就是解析层,它的作用主要是对SQL语句进行语法解析。 在这个过程中,初始的SQL字符串会被转化为Calcite内部的语法解析节点,为进一步的语法校验和优化做…