当前位置: 首页 > article >正文

Java面经之JVM

[1]. 说说双亲委派机制?

类的加载器主要有启动类加载器拓展类加载器应用程序类加载器用户自定义类加载器

当Java程序需要加载一个类时,类加载器首先会检查是否已经加载过该类,如果已经加载过,则直接返回该类;如果没有加载过该类,类加载器会委托给当前类加载器的父类加载器进行加载。如果父类加载器能够成功加载该类,则加载过程结束;如果父类加载器无法加载该类,则会将加载请求再次委托给它的父类加载器,直到达到顶层的启动类加载器。如果启动类加载器也无法加载该类,则会回到初始的类加载器,尝试使用自身的加载机制加载该类;如果自身的加载机制仍然无法加载该类,则会抛出ClassNotFoundException异常。

双亲委派机制可以确保核心类库的安全性避免同一个类被多次加载,但是这种严格的层级关系也限制了它的灵活性。

[2]. 介绍JVM内存模型

JVM内存模型指的是运行时数据区。主要分为(Heap)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、程序计数器(Program Counter Register)这五个部分。

虚拟机栈、本地方法栈、程序计数器为线程私有,堆和方法区为线程共享区

是各个线程共享的内存区域,在虚拟机启动时创建。几乎所有的对象实例都在这里分配内存。

方法区也是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量等数据。

程序计数器用于记录下一条JVM指令的执行地址,字节码解释器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖程序计数器来完成。

虚拟机栈是方法执行的内存区,方法执行时会在虚拟机栈中创建栈帧,方法执行的过程,对应着虚拟机栈的入栈到出栈的过程。

本地方法栈与虚拟机栈的作用类似,是虚拟机的Native方法执行的内存区。

[3]. 我创建了一个对象,它有一个变量,这个变量在JVM哪里,是线程安全的吗?

如果是非静态成员变量,则存储在中;

如果是静态变量,则存储在方法区中;

如果是局部变量,则存储在中;

因为堆和方法区是线程共享的,如果没有适当的同步机制,则非静态成员变量和静态变量都是线程不安全的;而栈是线程私有的,因此局部变量是线程安全的。

[4]. JVM性能监控工具有哪些?分别是做什么用的?

常用的有以下三种:

JConsole:可以连接到正在运行的Java进程,并提供各种性能指标的实时视图,如内存使用情况、线程活动、类加载等。

VisualVM:支持连接到本地和远程JVM,并提供了CPU分析器、内存快照分析器、线程转储生成器等诊断工具。

GCViewer:用于监视和分析Java垃圾收集(GC)日志。提供了垃圾收集时间线、堆内存使用情况等多种图表,使得分析过程更加直观。


http://www.kler.cn/a/418747.html

相关文章:

  • node.js基础学习-querystring模块-查询字符串处理(三)
  • 算法编程题-煎饼排序 不含AAA或者BBB的字符串
  • 多种平台上安装部署调试Open5GS(四)
  • 2411rust,1.83
  • Docker 容器隔离关键技术:SELinux
  • Cesium中onTick事件监听器
  • Qt Sensors 传感器控制介绍篇
  • 【JAVA】IntelliJ IDEA 如何创建一个 Java 项目
  • Vue3+node.js实现注册
  • (免费送源码)计算机毕业设计原创定制:Apache+JSP+Ajax+Springboot+MySQL Springboot自习室在线预约系统
  • VPN连不上学校服务器
  • 大模型开发中LCEL与LLMChain响应度的对比
  • Electron PC桌面应用exe开发
  • C#中switch语句使用
  • 大模型日报 2024-12-01
  • 大模型开发和微调工具Llama-Factory-->数据处理
  • Linux设置开启启动脚本
  • Vue 3 服务端渲染(SSR)教程
  • SpringMVC |(一)SpringMVC概述
  • DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践
  • 【青牛科技】电动工具调速控制电路芯片GS016,电源电压范围宽、功耗小、抗干扰能力强
  • Transformers在计算机视觉领域中的应用【第1篇:ViT——Transformer杀入CV界之开山之作】
  • 2.vue3+openlayers加载OpenStreetMap地图
  • 【开源项目】经典开源项目数字孪生智慧商场—开源工程及源码
  • LeetCode 动态规划 爬楼梯
  • Python uvloop性能测试:异步事件循环的性能对比与实践