java面试(jvm)

JVM内存模型

jvm内存结构
细分Eden:

java类加载过程?双亲委派机制?一个对象从加载到JVM,再到被GC清除过程?

JAVA类加载器:AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录。
每个类加载器对他加载过的类都有一个缓存
双亲委派:向上委托查找,向下委托加载。为了保护java底层的类不会被应用程序覆盖。
类加载机制
类加载过程:加载 - 连接 - 初始化
加载:通过双亲委派机制把java的字节码数据加载到JVM内存中,并映射成JVM认可的数据结构。
连接:分为3个阶段:1.验证:检查加载到字节信息是否符合JVM规范。2.准备:创建类或接口的静态变量,并赋初始值,半初始化状态。3.解析:把符号引用转化为直接引用

一个对象从加载到JVM,再到被GC清除经历了什么过程?

method{ClassLoaderDemo c = new ClassLoaderDemo; c.xxx} GC
1.用户创建一个对象,JVM先需要在方法区去找对象的类型信息,然后再创建对象。
2.JVM要实例化对象,首先再堆中创建一个对象。-半初始化状态
3.对象先分配在堆内存中新生代的Eden区。然后经过一次Minor GC后对象如果存活会进到S区,后续每次GC对象如果一直存活,就会再S区来回拷贝并给年龄+1(年龄最大15),多次GC后会放入老年代。
4.当方法执行结束后,栈中的指针会先移除掉。
5.堆中的对象,经过Full GC,就会标记为垃圾,然后被GC线程清理掉。

怎么确定一个对象是不是垃圾,什么是GC Root?

有两种垃圾回收机制:
1.引用计数:这种方式是给堆内存当中的每个对象记录一个引用计数,引用个数为0的就认为是垃圾。问题是无法解决循环引用的问题,会造成内存泄漏。
2.根可达算法:内存中从引用根对象向下一直找引用,找不到的对象就是垃圾,可解决循环引用。
GC Root:Stack(JVM Stack,Native Stack),class类,run-time constant pool常量池,static reference静态变量。

JVM有哪些垃圾回收算法?

https://www.cnblogs.com/hellostar/p/16497856.html
1.MarkSweep标记清除算法
标记清除算法
这个算法分为两个阶段:标记阶段:从引用根节点开始所有被引用的对象,垃圾内存标记出来。清除阶段:直接将垃圾内存回收。
缺点:GC时要停掉整个应用,清除后的空闲内存不连续,产生内存碎片。
2.Copying拷贝算法
拷贝算法
将内存分为两半,每次只使用一半,垃圾回收时麻将存活对象拷贝至另一半,这一半全部清除。
缺点:需要两倍内存空间。
3.MarkCompack标记压缩算法
标记压缩
结合了标记-清除和复制优点,第一阶段从根节点标记被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象压缩到其中一块,按顺序排放。
缺点:算法复杂度高

JVM有哪些垃圾回收器?什么是STW?他们发生在哪些阶段?什么是三色标记?如何解决错标记和漏标记?为什么要设计这么多垃圾回收器? -> 内存逐渐变大

STW:Stop-The-World。垃圾回收算法执行过程中,需要将JVM内存冻结的一种状态,在STW状态下,JAVA所有线程都是停止执行的GC除外。native可以执行,但不能与JVM交互。GC算法优化就是减少STW
JVM垃圾回收器:
垃圾回收算法
1.Serial串行:
需要GC时,直接暂停,GC完继续执行。早期垃圾回收期。只有一个线程执行GC,多CPU下性能会下降,适用于几十兆内存的空间。
Serial
2.Parallel并行:
多线程GC,PS+PO组合是JDK8默认的垃圾回收器,多核CPU下,性能高。
并行
CMS:Concurrent Mark Sweep。将STW打散,让一部分GC线程并发执行。
1.初始标记阶段:STW只标记出根对象直接引用的对象。
2.并发标记:继续标记其他对象,与应用程序时并发执行。
3.重新标记:STW对并发执行阶段的对象进行重新标记。
4.并发清除:并行,将产生的垃圾清除,清除过程中,会不断产生新的垃圾,这些垃圾会留在下次GC。
G1:Garbage Fitst垃圾优先。这种内存模型中对于堆内存不分老年代和新生代,而是划分成小内存块Region。
1.初始标记,标记出GCRoot直接引用的对象。STW
2.标记Region,通过RSet标记出上一个阶段标记的Region引用到Old区的Region
3.并发标记阶段,跟CMS差不多,只是遍历范围不再是整个old区,而是只需要遍历第二部标记出来的Region。
4.重新标记,跟CMS中的重新标记过程是差不多的。
5.垃圾清理:与CMS不同的是,G1可以采用拷贝算法,直接将整个Region中的对象拷贝到另一个Region,而这个阶段,G1只选择垃圾较多的Region来清理,并不是完全清理。
CMS的核心算法就是三色标记。
三色标记:将内存分为三种颜色:黑色(自己和成员变量都标记完毕),灰色(自己标记完,成员变量内没有),白色(自己未标记完)
漏标记:白色的被漏掉了。解决:CMS通过增量标记increment update的方式来解决漏标记的问题。

如何进行JVM调优?JVM参数有哪些?怎么查看一个JAVA进程的JVM参数?如果一个java程序每次运行一段时间后变得卡顿,怎么优化?

jvm通过定制运行参数提高java运行。
jvm参数可分为三类:
1.标注指令:- 开头,所有HotSpot都支持的参数,可以用java -help打印出来。
2.非标注指令:-X开头,特定的HotSpot,可用java -X打印出来。
3.不稳定参数:-XX开头,特定的HotSpot,并且变化大。

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

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

相关文章

2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题是由安全生产模拟考试一点通提供,聚合工艺证模拟考试题库是根据聚合工艺最新版教材,聚合工艺大纲整理而成(含2024年聚合工艺证…

ANSYS穿孔板随机微孔隙构建及力学模拟

多孔结构板在减轻结构重量、满足吸声功能等环境下应用广泛,本案例采用ANSYS Workbench对曲线边界孔洞的随机多孔板进行轴心受拉力学分析。 随机微穿孔板可采用CAD Voronoi插件构建,三维模型构建如下。 CAD Voronoi插件采用参数化建模方式,根…

Mysql去除重复项:力扣182. 查找重复的电子邮箱

题目链接:182. 查找重复的电子邮箱 - 力扣(LeetCode) 题目描述 sql语句 方法1:使用临时表 select Email from (select Email, count(Email) as numfrom Persongroup by Email ) as statistic where num > 1 ;方法2&#xff…

树状图怎么做?这个方法教你轻松制作

树状图怎么做?在日常生活和工作中,我们经常需要用到树状图来整理和展示信息。树状图不仅能够帮助我们清晰地表达层级关系,还能够让复杂的数据和信息一目了然。那么,如何制作一个既美观又实用的树状图呢?本文将为你详细…

【回溯算法】【组合问题】Leetcode 77.组合 216. 组合总和 III

【回溯算法】【回溯算法剪枝】 Leetcode 77.组合 216. 组合总和 III 回溯算法可以解决的问题Leetcode 77.组合解法1 回溯法三部曲,函数参数、终止条件和单层搜索逻辑解法一plus 回溯法剪枝 另一道组合回溯问题 216. 组合总和 III解法:回溯解法&#xff1…

ArcGIS学习(十一)公服设施服务区划分与评价

ArcGIS学习(十一)公服设施服务区划分与评价 本任务带来的内容是公服设施服务区划分与公服设施服务区评价。本任务包括两个关卡: 公服设施服务区划分公服设施服务区空间价值评价1.公服设施服务区划分 首先,来看看这个案例的场景和基础数据。我们以上海市图书馆为例进行分析…

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据:用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素:数据的基本单位,一个数据元素可由若干数据项组成。 数据结构:指相互之间存在一种或多种特…

VR 全景模式OpenGL原理

VR 全景模式OpenGL原理 VR 全景模式原理 VR 全景模式原理将画面渲染到球面上,相当于从球心去观察内部球面,观察到的画面 360 度无死角,与普通播平面渲染的本质区别在渲染图像部分,画面渲染到一个矩形平面上,而全景需…

啤酒:精酿啤酒与烤串的夜晚滋味

夏日的夜晚,微风拂面,星光璀璨。此时,能抚慰人心的莫过于与三五好友围坐一起,享受烤串与Fendi Club啤酒的美味。这种滋味,不仅仅是味蕾的盛宴,更是心灵的满足。 Fendi Club啤酒,每一滴都蕴含着大…

Apache SeaTunnel 2.3.4 版本发布:功能升级,性能提升

​Apache SeaTunnel团队自豪地宣布2.3.4版本正式发布!本次更新聚焦于增强核心功能,改善用户体验,并进一步优化文档质量。 此次版本发布带来了多项重要更新和功能增强,包括核心与API的修复、文档的全面优化、Catalog支持的引入&…

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意: 浮动的元素是互相贴靠在一起的(不会有缝隙)&…

机器学习专项课程03:Unsupervised Learning, Recommenders, Reinforcement Learning笔记 Week02

Week 02 of Unsupervised Learning, Recommenders, Reinforcement Learning 课程地址: https://www.coursera.org/learn/unsupervised-learning-recommenders-reinforcement-learning 本笔记包含字幕,quiz的答案以及作业的代码,仅供个人学习…

YOLOv9独家改进|使用HWD(小波下采样)模块改进ADown

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、改进点介绍 HWD是一种下采样模型,应用了小波变换的方法。 ADown是YOLOv9中的下采样模块,对不同的数据场景具有一定的可学…

no declaration can be found for element ‘rabbit:connection-factory‘

spring-mvc 配置 rabbitmq 出现问题。 我的解决方案如下: 1 找到配置文件 spring-rabbitmq.xml 我的配置文件叫:spring-rabbitmq.xml,你们按照自己的查找。 2 定位如下URI 接着 Ctrl鼠标左键 3 确定spring-rabbit-x.x.xsd 按照步骤2 &…

uniapp同步将本地图片转换为base64,支持微信、H5、APP

接上篇,少了一个方法的源代码。 先上代码: ploadFilePromiseSync (url) > { return new Promise((resolve, reject) > { // #ifdef MP-WEIXIN uni.getFileSystemManager().readFile({ filePath: url, encoding: base64, success: res > { let …

Rabbitmq消息丢失-生产者消息丢失(一)

说明:消息生产者在将数据发送到Mq的时候,可能由于网络等原因造成数据投递失败。 消息丢失大致分三种:这里说的是生产者消息丢失! 分析原因: 1.有没有一种可能,我刚发送消息,消息还没有到交换…

MySQL中有事务无法回滚的语句?

目录 0.从修改表结构语句开始 1.DDL(Data Definition Language) 数据定义语言 2.DCL(Data Control Language) 数据控制语言 3.在该事务还没提交时开启新事务 4.锁操作 5.行政声明语句 6.主从复制的从机操作 7.如何避免出现隐式提交导致的错误 0.从修改表结构语句开始 试…

tomcat nginx 动静分离

实验目的:当访问静态资源的时候,nginx自己处理 当访问动态资源的时候,转给tomcat处理 第一步 关闭防火墙 关闭防护 代理服务器操作: 用yum安装nginx tomcat (centos 3)下载 跟tomcat(centos 4&#xff0…

Ansible-Playbook

目录 1、概念介绍 roles 角色 playbook 核心元素 ansible-playbook 命令 playbook 简单案例 2、Ansible 变量 自定义变量 facts 变量 Palybook 部署 LAMP ansible 端安装 LAMP playbook 系统环境脚本 构建 httpd 任务 构建 mariadb 任务 构建 php 任务 编写整个任务…

2024年【陕西省安全员C证】考试资料及陕西省安全员C证找解析

题库来源:安全生产模拟考试一点通公众号小程序 陕西省安全员C证考试资料根据新陕西省安全员C证考试大纲要求,安全生产模拟考试一点通将陕西省安全员C证模拟考试试题进行汇编,组成一套陕西省安全员C证全真模拟考试试题,学员可通过…