面试之JVM类的生命周期

news2024/11/27 4:32:59

按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段:

 加载:

类的加载指的是将类的.class文件中的二进制数据读取到内存中,存放在运行时数据区的方法去中。

在加载的过程中。jvm需要做三件事:

1:通过类的全限定名来获取此类的二进制文件。

2:将这个字节流所对应的静态存储结构转换为方法区运行时数据结构

3:在内存中生成一个Java.lang.class对象,作为方法区这个类的入口

验证:

这一阶段的目的是确保Class文件的字节流中包含的信息符合当前虚拟机的要求,保证这些信息被当作代码运行后不会危害虚拟机自身的安全。包含(文件格式验证,元数据验证,字节码验证,符号引用验证);

准备:

准备阶段就是为非final修饰的静态变量 分配内存并设置初始值。因为静态变量和类绑定在一起的。并不需要初始化类对象访问,所以就这个静态变量放在 方法区中。

解析:

Java虚拟机将常量池内的符号引用替换为直接引用的过程。

符号引用:符号引用是一组符号来描述所引用的目标,符号引用可以任何形式的字面量。只要是使用时可以准备的定位到目标即可。

直接引用:直接可以定位到目前的指针,相对偏移

量或者一个能够定位到内容的句柄。

初始化:

  • 初始化阶段,主要是为静态变量赋予正确的初始值
  • 在初始化阶段,开始执行Java代码。初始化阶段重要的工作是执行类的初始化方法clinit().

从jvm层面分析一个方法是如何执行的。

 首先。找到这个类Application。类加载器加载。将这个类信息加载在 元空间空。然后将 执行main方法就是开启一个main 线程,将这个 方法 加入对应的 虚拟机栈栈底。然后在加对应的load方法加入对应的虚拟机栈头。将对应的config变量是方法的内部变量也压入对应的方法栈中,将对应的new Config()对象 压入对应的 堆中。然后将方法执行完。栈帧指向移动,方法执行完就会出栈。

对应的类信息都是元空间,已经对应的静态常量。常量池都是在 元空间中。

 虚拟机栈的特点以及作用:

1:线程私有。

2:方法执行会创建对应的栈帧。然后将对应的局部变量表等。

3:方法执行进入虚拟机栈,方法执行后出栈。先进后出。

4:栈深度大于虚拟机栈深度时。会报错StackOverflowError.

5: 栈需要扩展而无法申请对应的空间而OOM(比较少见的),hotspot是没有的。(当虚拟机的栈内存允许动态扩展,当扩展栈容量无法申请到足够内存是,将抛出OOM异常。但是hotspot虚拟机不支持栈的自动扩展

6:随着线程而生,随线程而死

7:  该区域不存在gc。

本地方法栈的特点:

1、与虚拟机栈类似。

2、区别在于本地方法为Native方法提供

3、有StackOverFlowError 和OOM

4、随线程而生,随线程而死

5、GC不会回收

元空间:

1:在jdk1.8以后才出现元空间的概念,叫做 永久代/方法区。

2:元空间与java堆类似,是线程共享的内存区域。

3:储存被加载的类信息,常量,静态变量,常量池

4:元空间采用的是本地内存,本地内存有多少空间,他就可以扩展到多大空间

-XX:MetaspaceSize=20M     -XX:MaxMetaspaceSize=100M

5:元空间不足时,就容易发生OOM

6:元空间很少有GC垃圾收集,一般该区域回收苛刻。能回收的信息比较少。

堆:

1:线程共享的一块区域。

2:虚拟机启动时创建

3:存放所有实列或者数组

4:可分为新生代,老年代

5:通过xms,xmx调节堆大小

程序计数器:

1、程序计数器是一块比较小的内存空间

2、是当前线程执行的字节码的行号指示器
3、java多线程执行时,每个线程都有一个独立的程序计数器,各条线程之间的程序计数器互不影响。

4、该区域不存在OOM

5、该区域不会被GC

说出几个常用的核心参数:

xms  初始化堆大小  xmx堆的最大的大小

-XX:metaspaceSize  初始化元空间大小

-XX:MaxmetaspaceSize: 申请元空间的最大

-XX:SurvivorRatio =8 设置edem去和survivor去大小的比列 默认8:1:1

-XX:MaxTenuringThreshold =  5 年龄阈值

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

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

相关文章

java版本Spring Cloud + Spring Boot +二次开发+企业电子招标采购系统

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

2.css公共样式、LOGO SEO优化、常用模块和注册页类名命名、tab栏布局原理、Web服务器

2.1 css公共样式 模块开发: ●有些样式和结构在很多页面都会出现, 比如页面头部和底部, 大部分页面都有。此时, 可以把这些结构和样式单独作为一个模块, 然后重复使用 ●这里最典型的应用就是common.css公共样式。写好一个样式, 其余的页面用到这些相同的样式 ●模…

基于php+mysql日志审计管理系统

基于phpmysql日志审计管理系统 一、系统介绍二、系统展示1.用户登陆2.监控日志3.监控规则4.用户管理 三、代码展示四.其它系统五、获取源码 一、系统介绍 本系统实现了:用户登陆、日志审计、监控规则、用户管理。 二、系统展示 1.用户登陆 2.监控日志 3.监控规则…

Postman接口测试实战-接口断言/newman执行集成(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口测试用例 接…

2023年项目管理系统排名:客观分析+推荐解决方案

一个高效的项目管理系统可以帮助企业提高生产力、降低成本并确保按时交付高质量的产品或服务。然而,市场上有众多的项目管理系统供选择,使得消费者在做出决策时可能会感到困惑。本文将对当前市场上最受欢迎的项目管理系统进行客观分析,并提供…

原型和原型链条、ES6、前后端交互Ajax

一、原型和原型链条 1.原型<script>/*原型 解决问题> 当你需要给实例对象添加方法> 直接书写在构造函数体内> 这个行为并不好> 我们的原型就是解决了这个问题 不好的原因> 当我把方法书写在构造函数体内> 每次创建实例的时候, 都会创建一个函数数据类…

21matlab数据分析牛顿插值(matlab程序)

1.简述 一、牛顿插值法原理 1.牛顿插值多项式   定义牛顿插值多项式为&#xff1a; N n ( x ) a 0 a 1 ( x − x 0 ) a 2 ( x − x 0 ) ( x − x 1 ) ⋯ a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) N_n\left(x\right)a_0a_1\left(x-x_0\right)a_2\left(x-x_0\…

SpringCloud【负载均衡策略、OpenFeign概述、入门案列、日志增强 、超时机制 】(三)

目录 客户端负载均衡_负载均衡策略 服务接口调用_OpenFeign概述 服务接口调用OpenFeign_入门案列 服务接口调用OpenFeign_日志增强 服务接口调用OpenFeign_超时机制 客户端负载均衡_负载均衡策略 以前的Ribbon有多种负载均衡策略 RandomRule - 随性而为 解释&#xff…

物联网如何为智慧城市提供动力

智慧城市可以创造一个基础设施顺畅、效率提升的乌托邦&#xff0c;改善城市地区的生活质量&#xff0c;促进当地经济发展。 其影响意义重大&#xff0c;预计到 2024 年智慧城市基础设施的收入将超过 1000 亿美元。 从改善公共交通到解决犯罪问题和提高能源效率——应有尽有&am…

2023年杭电多校第一场-E.Cyclically Isomorphic题解

样例&#xff1a; 输入&#xff1a; 2 2 2 ab ba 1 1 2 4 3 aab baa bba bab 6 1 2 1 3 1 4 2 3 2 4 3 4 输出&#xff1a; Yes Yes No No No No Yes 题目大意&#xff1a; 给定一个字符串数组&#xff0c;每次查询两个字符串是否可以通过一个字符串循环右移可以变成另一个字…

Java实现检测本地指定路径下某一个程序是否在运行

项目有一个需求需要通过网页超链接唤醒本地桌面程序&#xff0c;有一个小bug是重复打开桌面程序。需要后台开一个接口来判断本地桌面程序是否打开。可以通过以下简单的方法来实现。 要检测本地指定路径下某一个程序是否在运行&#xff0c;可以使用Java的ProcessBuilder类来实现…

千兆网口 VS 2.5G网口 VS 5G网口:如何选?

随着互联网应用的不断扩展和数据传输需求的增加&#xff0c;为了更好满足高质量、高效率的日常生活和工作需求&#xff0c;对于网络速度和数据传输能力的要求日益严苛。这推动了网络技术发展的进程。在千兆网口研发并普遍应用后&#xff0c;又进一步研发出了2.5G网口和5G网口两…

硬件知识:从1.0到5.3,各版本蓝牙协议有什么功能特点

目录 蓝牙1.0 蓝牙1.1 蓝牙1.2 蓝牙2.0 蓝牙2.1 蓝牙3.0 蓝牙4.0 蓝牙4.1 蓝牙4.2 蓝牙5.0 蓝牙5.1 蓝牙5.2 蓝牙5.3 不断更新的蓝牙协议升级了哪些功能&#xff1f; 蓝牙作为一种小范围无线连接技术&#xff0c;具有低功耗、低成本、方便快捷的特点&#xff0c;…

基于whisper和whisperx的语音视频和字幕对齐

环境的安装 创建py310虚拟环境,需要安装Anaconda的Python环境。 Python初学者在不同系统上安装Python的保姆级指引 Win10+Python3.9+GPU版pytorch环境搭建最简流程 Python虚拟环境的安装和使用 还需要提前安装FFmpeg用于音频操作,并添加到环境变量中。 创建一个名称为w…

中移链与BSN分布式云管平台集成,共同构建专属协同体系

01 中移链与BSN分布式云管平台集成&#xff0c; 融入BSN生态体系 中移链OPB&#xff08;OPB即开放联盟链&#xff0c;Open Permissioned Blockchain&#xff09;与BSN基于BSN分布式云管平台&#xff0c;打造了中移链专属门户、中移链专属运营、中移链专属运维功能模块&#x…

龙曲良 Tensorflow —— 随机梯度下降(自用)-4

目录 一、梯度下降 二、激活函数及其梯度 2.1 最简单的阶梯激活函数 2.2 sigmoid / logistic&#xff08;tf.sigmoid&#xff09; 2.3 tanh&#xff08;tf.tanh&#xff09; 2.4 ReLU&#xff08;tf.nn.relu&#xff09; 三、损失函数及其梯度 四、单、多输出感知机梯度…

springBoot使用webSocket的几种方式以及在高并发出现的问题及解决

一、第一种方式-原生注解&#xff08;tomcat内嵌&#xff09; 1.1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>1.2、配置文件 package …

HTML5——基础知识及使用

HTML 文件基本结构 <html><head><title>第一个页面</title></head><body>hello world</body> </html> html 标签是整个 html 文件的根标签(最顶层标签).head 标签中写页面的属性.body 标签中写的是页面上显示的内容.title 标…

LiveGBS流媒体平台GB/T28181功能-用户管理数据支持页面excel导入数据excel导出数据

LiveGBS功能-用户管理数据支持页面excel导入数据excel导出数据 1、用户管理2、Excel导出导入2.1、支持用户数据的Excel导出2.2、支持用户数据的Excel导入 3、搭建GB28181视频直播平台 1、用户管理 用户管理&#xff0c;支持配置添加管理员、操作员、观众等角色的用户&#xff…

QGIS二次开发:集成二维CAD控件MxDraw

本文记录在QGIS中集成MxDraw控件的方法。 一、安装MxDraw 参见笔者博文“FreeCAD二次开发&#xff1a;集成二维CAD控件MxDraw”所述的安装方法。 二、编译安装QGIS 参见笔者博文"Windows 10下编译安装QGIS"所述的编译安装方法。 二、集成方法 2.1 添加MxDrawVie…