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.rhkb.cn/news/269180.html

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

相关文章

计算机网络(2)-----数据链路层

目录 一.数据链路层的基本概念 二.数据链路层的功能概述 功能一:为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务。 功能二:链路管理,即连接的建立、维持、释放(用于面向连接的服务)。 功能三:组帧 透明传输:…

喜讯!聚铭网络实力入选「网安新兴赛道厂商速查指南」11大细分赛道

近日,国内首家专业聚焦网络安全商业市场研究分析和加速服务的机构——斯元商业咨询正式发布2024「网安新兴赛道厂商速查指南Emerging Technology Vendor Index」。 聚铭网络凭借在网络安全领域的深厚技术积累、丰富的行业应用经验和良好的客户口碑,成功…

SkyWalking链路追踪上下文TraceContext的追踪身份traceId生成的实现原理剖析

结论先行 SkyWalking 通过字节码增强技术实现,结合依赖注入和控制反转思想,以SkyWalking方式将追踪身份traceId编织到链路追踪上下文TraceContext中。 是不是很有趣,很有意思!!! 实现原理剖析 org.apache.…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka,然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

性能问题分析排查思路之机器(3)

本文是性能问题分析排查思路的展开内容之一,第2篇,主要分为日志1期,机器4期、环境2期共7篇系列文章,本期是第三篇,讲机器(硬件)的网络方面的排查方法和最佳实践。 主要内容如图所示&#xff1a…

Re61:读论文 PRP Get an A in Math: Progressive Rectification Prompting

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Get an A in Math: Progressive Rectification Prompting ArXiv网址:https://arxiv.org/abs/2312.06867 官方实现网站:PRP 官方代码:https://github.…

Linux学习:初识Linux

目录 1. 引子:1.1 简述:操作系统1.2 学习工具 2. Linux操作系统中的一些基础概念与指令2.1 简单指令2.2 ls指令与文件2.3 cd指令与目录2.4 文件目录的新建与删除指令2.5 补充指令1:2.6 文件编辑与拷贝剪切2.7 文件的查看2.8 时间相关指令2.9 …

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图,让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的,使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

day34贪心算法 part03

1005. K 次取反后最大化的数组和 简单 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数…

【数据结构和算法初阶(C语言)】带环链表问题详解(快慢指针的烧脑应用)

目录 1.铺垫-----带环链表基本了解 2. 题目:环形链表 3.环形链表|| ​编辑 3.1题解1 3.2 题解2 4.总结 1.铺垫-----带环链表基本了解 环形链表题目启迪: 环形链表特点:遍历链表会出现一模一样的地址 2. 题目:环形链表 给…

C++输入输出(I\O)

我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…

Linux 设置快捷命令

以ll命令为例: 在 Linux 系统上,ll 命令通常不是一个独立的程序,而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义,比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令,你可以按…

李沐动手学习深度学习——4.5练习

1. 在本节的估计问题中使用λ的值进行实验。绘制训练和测试精度关于λ的函数。观察到了什么? 修改代码运行如图所示,可以发现对于lamda值的变化而言,对于训练loss和测试loss的影响不大。但是如果λ 太大后,train和test的loss会变得…

Cyber RT 组件

场景 无人车上的传感器数据可能需要被融合,比如在车辆上安装了多颗雷达,不同雷达由于安装位置与自身参数差异,可探测的角度、范围、距离等都是不尽相同的,现在需要将不同雷达感知到的数据融合在一起以建立车辆所处的完整环境&…

机器学习-面经(part5、KNN和SVM)

8. KNN 8.1 简述一下KNN算法的原理? 一句话概括:KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别 工作原理:存在一个样本数据集合,也称作为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数…

TypeError: the JSON object must be str, bytes or bytearray, not dict

参考文章:https://blog.csdn.net/yuan2019035055/article/details/124934362 Python基础系列(一)搞懂json数据解析与字典之间的关系 代码: 报错信息: TypeError: the JSON object must be str, bytes or bytearray, not dict …

局域网如何远程?

局域网远程一直是许多用户在处理远程连接需求时面临的一个难题。随着技术的不断进步,一种名为“天联”的组网解决方案应运而生。天联组网具有操作简单、跨平台应用、无网络要求以及独创的安全加速方案等独特优势,在解决各行业客户的远程连接需求方面发挥…

解决ipconfig不能使用的问题

问题所示:ipconfig不是内部或外部命令,也不是可运行的程序或批处理文件。 解决办法如下: 1.右击此电脑,点击属性设置: 2.点击高级系统设置 3.点击进入环境变量 4.在系统变量中进行设置,双击PATH进行配置 5.点击新建&am…

【如何在Docker中,修改已经挂载的卷(Volume)】

曾梦想执剑走天涯,我是程序猿【AK】 提示:添加投票!!! 目录 简述概要知识图谱 简述概要 如何在Docker中,修改已经挂载的卷(Volume) 知识图谱 在Docker中,修改已经挂载…

matlab 提取分割位于多边形区域边缘内部或边缘上的点

[in,on] = inpolygon(xq,yq,xv,yv) xv 和 yv 为定义的多边形区域的,如xv = [1 4 4 1 1 ];yv = [1 1 4 4 1 ];注意最后一个数字与第一个重复,保证多边形闭合; xq 和 yq 为待查询的点in:在多边形内部和边缘的点序号on:仅在多边形边缘的点序号 提取分割方法: matrix=[xq yq…