【JVM虚拟机】JVM常见面试题总结

目录

一、虚拟机的理解

二、java如何实现跨平台机制

三、JVM内存模型(JMM)

四、JVM栈和堆的区别

五、垃圾回收是在哪个区域发生,讲一下垃圾回收?

六、垃圾回收算法

七、介绍一下你知道的垃圾收集器

八、cms和g1的区别

九、谈一谈jvm常见命令与参数


一、虚拟机的理解

虚拟机其实就是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境下的完整计算机系统只要是在实体计算机上能实现的功能,虚拟机基本都能实现。

JVM虚拟机主要是由类加载器、运行时数据区、执行引擎和本地方法接口四个部分组成。

它的主要特点首先可以跨平台使用可以运行在不同的计算机系统,如Linux、MacOS等。

跨语言不管是什么编程语言经过编译转换为的字节码文件,他都能识别。


二、java如何实现跨平台机制

java的跨平台其实是因为JVM。因为不同的平台使用的JVM不一样。

通常java源代码编译后的文件为字节码文件。JVM可以将字节码文件翻译成当前平台下的机器码运行。而我们只需要在不同平台下安装相应的JVM,就可以运行字节码文件


三、JVM内存模型(JMM)

JVM内存区域分为两种一种为线程共享的区域,一种为线程私有的区域

线程共享的区域有堆区元空间

其中堆区的话是jvm中最大的一块区域,也是存放对象实例以及数组的地方。堆区中又分为老年代新生代,他们的占比分别为2:1在老年代中存放的一般是一些不容易被删除的对象,老对象而新生代存放的则是一些新创建的对象,容易被删除的对象。在新生代中也划分为3个区域Eden区和两个相同的Survivor区,他们的占比分别为8:1:1

元空间的话存放的是一些常量、静态变量、类信息、JIT即时编译器编译后的机器代码等。

线程私有的区域有虚拟机栈、本地方法栈、程序计数器。

虚拟机栈它是由一个个栈帧组成,每个栈帧都拥有局部变量表、操作数栈、动态连接和方法返回地址。而被调用一个方法,对应的栈帧都会被压入虚拟机栈、而当方法结束后,又会从虚拟机栈中弹出。最顶层的栈帧代表着当前正在执行的方法,这些栈帧其实就相当于方法的调用,调用一个方法一个栈帧入栈,当这个方法彻底结束,栈帧又会被弹出,回到调用它的那个栈帧中。

本地方法栈也是存放一个个栈帧,不过该栈帧所对应的方法是由native修饰的本地方法。

程序计数器则是用于记录当前线程所执行的字节码的行号,它主要由两个用处,一个是用于多线程的情况下,用于切换线程时记录当前执行的位置,方便下次执行时从当前位置继续执行另一个则是用于实现代码的流程控制,循环、异常等,通过行号的切换实现执行位置的跳转。


四、JVM栈和堆的区别

首先堆和栈是两个不同的区域,堆是线程共享的区域,而栈是线程私有区域

堆存放的是对象的实例和数组而栈存放的则是一个个栈帧。而栈帧中存放是局部变量、操作数栈、动态链接和方法返回值。


五、垃圾回收是在哪个区域发生,讲一下垃圾回收?

垃圾回收发生的区域堆和元空间,主要是在一般在堆中的新生代发生次数比较多老年代发生概率比较低。

当一个对象没有什么用处时,则该对象就是需要被回收的垃圾对象JVM默认使用可达性分析算法来推断这个对象是否需要回收。(可达性分析算法其实就是定义一系列称为“GC Roots”的根对象为起始节点。对一个对象通过引用关系向上寻找,如果没有找到这个GC Roots则说明这个对象为垃圾对象)。

垃圾回收是指不同的垃圾收集器通过不同的算法来对垃圾对象进行处理。


六、垃圾回收算法

垃圾回收算法主要分为三种

标记-清除算法他是先将不需要回收对象先标记起来,标记完成后,清除所有未标记的对象。如果这个区域大部分都是需要回收的对象,那么这种算法的效率就会很低下。而这个会造成空间碎片化问题,导致产生大量不连续的空间,如果有一个大的对象需要分配,就无法找到连续足够的空间。

标记-复制算法先将空间分为完全一样大小的两块空间,每次使用只是用其中一块,在一块使用完后,先将不需要回收的对象复制到另一块中,然后清除这块空间。这个算法可以改善空间碎片化问题,但是会浪费过多的空间,使现在只能是原来一般,而且如果不需要回收的对象,如果较多化,效率会很低。

标记-整理算法也是先标记所有不需要回收的对象,然后将所有标记的对象向着一端移动,最后清除边界以外的内存。这种算法也是可以防止空间碎片化问题。


七、介绍一下你知道的垃圾收集器

Serial收集器(新生代

采用标记-复制算法负责新生代的垃圾回收器,是一个单线程收集器。

Serial Old收集器(老年代

采用标记-整理算法负责老年代的垃圾回收器,也是单线程收集器。

ParNew收集器(新生代

采用标记-复制算法负责老年代的垃圾回收器,多线程收集器。

Parallel Scavenge收集器(新生代

采用标记-复制算法负责新生代的垃圾回收器,多线程收集器达到一个可控制的吞吐量为目的的收集器。

Parallel Old收集器(老年代

采用标记-整理算法负责老年代的垃圾回收器,多线程收集器同样是注重吞吐量的一个收集器。

CMS收集器(老年代

采用标记-清除算法负责老年代的垃圾收集器,多线程收集器以获取最短停顿时间为目的的收集器。他是第一个实现垃圾收集线程和用户线程同时工作。

他的工作流程分为四个步骤:初始标记快速标记一下可以通过GC roots直接关联的对象)、并发标记用户线程和标记线程同时进行)、重新标记停止用户线程,标记并发后遗留的记录)、并发清除(用户线程和清除线程同时进行)。

优点:可以并发收集、低停顿。

缺点:影响用户线程的执行效率无法处理浮游垃圾产生大量空间碎片(标记-清除算法)。

G1收集器(全代)

采用标记-整理算法面向服务器的垃圾收集器,他不严格按照分代思想进行垃圾回收。采用局部性收集的设计思想,他将堆内存划分为2048个大小相同的区域,那一块垃圾最多,对那一块进行收集,使得回收收益最大。

他的工作流程也分为四个步骤:初始标记并发标记最终标记(与重新标记一样)、筛选回收负责更新每个区域的统计数据,对其回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择多个区域进行回收,也可以通过标记-复制算法将哪一个区域存活的对象复制到另一个空区域,然后清除这个区域)。        


八、cms和g1的区别

首先使用范围不一样CMS收集器是用于老年代的收集器,可以配合SerialPaeNew收集器使用G1收集器可以用于老年代也可以用于新生代不需要结合其他收集器使用。

STW(Stop The World)的时间CMS收集器最小停顿时间为目的的收集器G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)。

垃圾回收算法不同CMS收集器使用的是标记-清除算法,容易产生内存碎片。G1收集器使用的是标记-整理算法,降低了内存空间碎片。

垃圾回收的过程不同CMS收集器依次是初始标记、并发标记、重新标记、并发清除G1收集器则是初始标记、并发标记、最终标记、筛选回收。


九、谈一谈jvm常见命令与参数

jvm常见命令:

        jps查看所有java进程。

        jstat查看jvm各方面的运行数据。

        jinfo查看jvm各项信息

        jstack生成虚拟机当前时刻的线程快照。

jvm常见参数:

        -Xms设置初始java堆大小

        -Xmx设置最大java堆大小

        -Xmn新生代大小

        -Xss设置java线程栈大小


注:本篇文章都是我自己的理解,可能用词和语句不够严谨,如有错误请评论指正,谢谢!(持续更新中......)

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

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

相关文章

Flink状态管理与检查点机制

1.状态分类 相对于其他流计算框架,Flink 一个比较重要的特性就是其支持有状态计算。即你可以将中间的计算结果进行保存,并提供给后续的计算使用: 具体而言,Flink 又将状态 (State) 分为 Keyed State 与 Operator State: 1.1 算子状态 算子状态 (Operator State):顾名思义…

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥,而守卫类型也比较多,其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难,这边主要介绍…

北邮22级信通院数电:Verilog-FPGA(5)第四第五周实验 密码保险箱的设计

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.密码箱的功能和安全性 显示:…

哪个证券公司可以加杠杆,淘配网是您的杠杆综合网站!

在证券市场中,投资者经常寻求提高资金杠杆以获得更高的回报。杠杆交易可以让您在不必拥有等额本金的情况下,参与更多的交易活动。然而,为了进行杠杆交易,您需要找到一家证券公司或平台,可以为您提供这种服务。本文将介…

VxeTable 表格组件推荐

VxeTable 表格组件推荐 https://vxetable.cn 在前端开发中,表格组件是不可或缺的一部分,它们用于展示和管理数据,为用户提供了重要的数据交互功能。VxeTable 是一个优秀的 Vue 表格组件,它提供了丰富的功能和灵活的配置选项&…

更新Xcode 版本后运行项目出现错误 Unable to boot the Simulator 解决方法

错误截图 出现 Unable to boot the Simulator 错误原因很多,以下方法不一定都适用,我是通过以下方法解决的 打开命令终端输入以下命令,可能需要你输入开机密码 sudo rm -rf ~/Library/Developer/CoreSimulator/Caches

戏剧影视设计制作虚拟仿真培训课件提升学生的参与感

说起影视制作,知名的影视制片人寥寥无几,大多数人还在依靠摄影机拍摄实景或搭建实体场景来不断精进场景布局和导演效果,成本高、投入人员多且周期长,随着VR虚拟现实技术的不断发展,利用VR模拟仿真技术进行影视制作实操…

gunicorn+flask+PaddleOCR

前言 由于公司是2G,所以一些收费的公网api不能用(同时也不安全),以至于内部尝试了多种开源ocr框架。首先是使用golang封装的一个ocr模块gosseract,使用英文模型多数字字母识别准确率高一点,不过也只有80%多…

SpringBoot的流浪宠物系统

采用技术:springbootvue 项目可以完美运行

DALL·E 3 ChatGPT-4的梦幻联动

核心内容:DALLE 3 & ChatGPT-4的梦幻联动 hello,我是小索奇,最近DALL结合ChatGPT4的话题逐渐上升了起来,今天就带大家探索一下~ DALLE的主要功能是根据文本描述来生成图片。你可以告诉它一个穿着皮草的西瓜,它就能…

百度小程序制作源码 百度引流做关键词排名之技巧

百度作为国内最大的搜索引擎,对于关键词排名和流量获取的策略格外重要,下面给大家分享一个百度小程序制作源码和做百度引流、关键词排名的一些技巧。 移动设备的普及和微信小程序的火热,百度也推出了自己的小程序。百度小程序与微信小程序类…

充电保护芯片TP4054国产替代完全兼容DP4054DP4054H 锂电充电芯片

■产品概述 DP4054H是-款完整的采用恒定电流/恒定电压单节锂离子电池充电管理芯片。其SOT小封装和较少的外部元件数目使其成为便携式应用的理想器件,DP4054H可 以适合USB电源和适配器电源工作。 由于采用了内部PMOSFET架构,加上防倒充电路,所以不需要外…

机器学习基础-数据分析:房价预测

mac设置中文字体 #要设置下面两行才能显示中文 Arial Unicode MS 为字体 plt.rcParams[font.sans-serif] [Arial Unicode MS] #设置图片大小 plt.figure(figsize(20, 11), dpi200)pie官方文档 总体代码 python import pandas as pd import numpy as np import matplotlib.…

自然灾害对物流业的影响

自然灾害是指地球自然系统的各种异常事件,例如地震、飓风、洪水、干旱、林火等,这些事件都会对人们的生活、经济和环境产生极大的影响。 自然灾害可能导致以下影响: 丧失生命:自然灾害可能会导致人员伤亡和死亡,当然包…

用PyTorch轻松实现二分类:逻辑回归入门

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

《golang设计模式》第二部分·结构型模式-07-代理模式(Proxy)

文章目录 1. 概述1.1 角色1.2 模式类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概述 代理(Proxy)是用于控制客户端访问目标对象的占位对象。 需求:在调用接口实现真是主题之前需要一些提前处理。 解决:写一个代理&#xff…

ViewPager、RecycleView实现轮播图

1.ViewPager实现轮播图形效果。 1&#xff09;layout中&#xff0c;PageIndicatorView轮播的View <RelativeLayoutandroid:layout_width"match_parent"android:layout_height"200dp"android:orientation"vertical"><androidx.viewpager…

http.header.Set()与Add()区别;

在Go语言中进行HTTP请求时&#xff0c;http.Header对象表示HTTP请求或响应的头部信息。http.Header是一个map[string][]string类型的结构&#xff0c;用于存储键值对&#xff0c;其中键表示HTTP头字段的名称&#xff0c;值是一个字符串切片&#xff0c;可以存储多个相同名称的头…

centos openssh升级

注意&#xff1a; openssh升级异常会造成服务失联&#xff0c;如果在允许的情况下可以安装talent服务&#xff0c;使用talent升级&#xff1b; 如果不能安装talent服务&#xff0c;可以打开多个终端&#xff0c;启动ping命令&#xff0c;防止升级终端失败后&#xff0c;作为备用…

巧用excel实现试卷向表格的转换

MID($E$10,FIND(D14,$E$10,1),FIND(D15,$E$10,1)-FIND(D14,$E$10,1)) MID($E$10,FIND(D15,$E$10,1),FIND(D16,$E$10,1)-FIND(D15,$E$10,1)) 中华人民共和国司法部