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

JVM面试题

JVM

1.jvm的组成部分

  1. 类加载器:将javac编译的class文件加载到内存中

  2. 运行时数据区:将内存划分成若干个不同的区域。

  3. 执行引擎:负责解析命令,提交操作系统执行。

  4. 本地接口:融合不同的语言为java所用

2.运行时数据区

  1. 方法区(线程共享):储存已经被虚拟机加载的类信息
  2. 堆(线程共享):对象实例分配内存,垃圾回收只回收堆中的内容
  3. 本地方法栈(线程私有):第三方内容
  4. 虚拟机栈(线程私有):局部变量等信息
  5. 程序计数器(线程私有):java是多线程,每个线程都有程序计数器,用来选择执行哪行字代码

3.类加载过程

  1. 加载:反射的过程,把class文件读取到jvm中
  2. 验证:验证文件格式,访问修饰符,局部变量是否赋值,类型是否匹配等。
  3. 准备:检查有没有静态变量,有就给静态变量分配内存,赋初始值
  4. 解析:给final成员赋值
  5. 初始化:给静态变量赋值

4.堆和栈的区别

堆:内存空间不连续,效率慢,存放对象的实例和数组,更关注存储

栈:内存空间连续,效率高,存放局部变量,更关注方法的执行

5.垃圾回收机制

jvm中有垃圾回收线程,是低优先级的,正常情况下不会执行,虚拟机空闲或者内存不足的时候才会执行。

6.GC

垃圾回收,内存处理的问题程序员容易忽视,java提供gc能自动检测对象是否超过作用域,进行垃圾回收

7.垃圾回收算法

标记清楚

标记整理

复制算法

分代

8.新生代,老年代,永久代

新生代:

1个伊甸园区和2个幸存者区,比例是8:1:1。新创建的队形分配到伊甸园区,经过一次垃圾回收如果仍然存活,就会被移动到幸存者区,在幸存者区中每经历一次垃圾回收年龄就会增长一岁,年龄到达一定程度后,就会被移动到老年代中。(复制算法)

老年代:

主要存放生命周期长的内存对象。

老年代的对象比较稳定,垃圾回收不会频繁进行,在新生代进入老年代导致内存不够时才会触发垃圾回收。(标记清除)

永久代

永久代在方法区中,指的是永久保存区域,存放class和元数据信息,class被加载的时候被放入永久代。java8被元空间替代。

9.JVM的作用

通过编译吧java代码转换成字节码,类加载器把字节码加载到内存中,将其放在方法区内,系统并不能直接执行字节码指令,执行引擎将字节码翻译成系统指令,再由cpu去执行。

http://www.lryc.cn/news/23019.html

相关文章:

  • @FeignClient注解
  • 一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)
  • Airbyte API
  • vue项目使用Electron开发桌面应用
  • std::chrono笔记
  • 接收arp请求并发送回应的实例
  • 【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读
  • 消息中间件的概念
  • 窃密恶意软件Raccoon最新样本Stealer v2分析
  • 足球俱乐部管理系统
  • 2023上半年数学建模竞赛汇总(比赛时间、难易程度、含金量、竞赛官网)
  • 【python学习笔记】:PHP7 Null合并运算符
  • 数据结构与算法——3.时间复杂度分析1(概述)
  • FPGA学习之日常工作复位电路
  • 【洛谷 P1177】【模板】快速排序 题解(快速排序+指针)
  • Pthon--自动化实用技巧篇--文件目录处理
  • 想招到实干派程序员?你需要这种面试法
  • cesium常见操作:鼠标点击获取对象
  • 【玩转c++】git的安装和使用以及可视化处理
  • 第三阶段02-Mybatis框架
  • 基于超像素的多视觉特征图像分割算法研究
  • mysql的三大日志
  • API接口及社区电子商务化的解释
  • [蓝帽杯 2021]One Pointer PHP
  • 【JAVA】xxl-job服务搭建
  • 毕业设计 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计
  • 【10k~30k的区别】=== 功能测试、自动化测试、性能测试的区别
  • 《MySQL学习》 索引失效的三种特殊情况
  • wafw00f 防火墙探测
  • MySQL学习(1)[参考书籍:mysql是怎么运行的]