JVM面试篇

面试篇就是复习前面学的

什么是JVM

1.定义:JVM指的是Java虚拟机,本质是一个运行在计算机上的程序

2.作用:为了支持Java中Write Once ,Run Anywhere 编写一次 到处运行的跨平台特性

功能:

1.解释和运行

2.内存管理

3.即时编译

组成

常见的jvm

总结

字节码的组成

运行时数据区

方法区、堆、本地方发栈、虚拟机栈、程序计数器(后三不共享 前二共享)

直接内存主要是NIO使用,由操作系统直接管理,不属于JVM内存

程序计数器

栈-----java虚拟机栈

栈帧的组成:

1.局部变量表

2.操作数栈

3.帧数据

本地方法栈

创建出来的对象都存在于堆上

栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间的共享

堆是垃圾回收的最主要部分,堆结构更详细的划分于垃圾回收器有关

方法区

直接内存

总结

哪些区域会出现内存溢出,会有什么现象?

内存溢出指的是内存某一块区域的使用量超过了允许使用的最大值,从而使用内存时因空间不足而失败,虚拟机一般会抛出指定的错误。

在java虚拟机中,只有程序计数器不会出现内存溢出情况,因为每个线程的程序计数器只保存一个固定长度的地址

堆内存溢出:

栈内存溢出:

方法区的内存溢出

直接内存溢出

总结

JVM在jdk6-8之间在内存区域上有什么不同?

1.方法区的实现

2.字符串常量池的位置

用元空间替换永久代的原因:

字符串常量池

总结

类的生命周期

加载阶段

1.加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制的方式获得字节码信息

程序员可以使用java代码拓展不同的渠道

2.类加载器在加载完类之后,java虚拟机会将字节码中的信息保存到内存的方法区中。在方法区生成一个InstanceKlass对象,保存类的所有信息

3.在堆中生成一份与方法区中数据类似的java.lang.Class对象,作用是在java代码中获得类的信息

连接阶段

初始化阶段

卸载阶段

总结

什么是类加载器

类加载器负责在类加载过程中将字节码信息以流的方式获得并加载到内存中。在JDK8及之前如下:

启动类加载器 JDK9之前是c++编写,之后是java编写

扩展类加载器

应用程序类加载器和自定义类加载器

总结

什么是双亲委派机制

双亲委派机制是指当一个类加载器接收到加载类的任务时,会向上查找是否加载过,再由顶向下进行加载

双亲委派机制有什么作用?

1.保证类加载的安全性

2.避免重复加载

总结

如何打破双亲委派机制

重写loadclass

Tomcat的自定义类加载器

总结

如何判断堆上的对象有没有被引用

引用计数法 可达性分析法

引用计数法会为每个对象维护一个引用计数器,当对象被引用时+1,取消引用时-1

缺点:

什么是GCRoot对象

总结

JVm有什么引用类型

Threadlocal为什么要用弱引用

总结

有什么常见的垃圾回收算法

标记清除

复制算法

标记整理算法

分代GC

概念太多了 自己回去看之前的笔记吧。。。。

有哪些常用的垃圾回收器

看之前的概念

如何解决内存泄漏

主要思路

常见的JVM参数

相关推荐
CoderYanger17 分钟前
MySQL数据库——3.2.1 表的增删查改-查询部分(全列+指定列+去重)
java·开发语言·数据库·mysql·面试·职场和发展
雲墨款哥23 分钟前
一个前端开发者的救赎之路-JS基础回顾(五)-数组
前端·javascript·面试
我是哪吒2 小时前
分布式微服务系统架构第170集:Kafka消费者并发-多节点消费-可扩展性
后端·面试·github
曼巴UE52 小时前
UE5.3 C++ 接口初步使用
开发语言·jvm·c++
一只叫煤球的猫4 小时前
2025年基于Java21的的秒杀系统要怎么设计?来点干货
后端·面试·性能优化
yanlele4 小时前
前端面试第 78 期 - 2025.09.07 更新 Nginx 专题面试总结(12 道题)
前端·javascript·面试
yh云想6 小时前
《Java线程池面试全解析:从原理到实践的高频问题汇总》
jvm·面试·职场和发展
橙序员小站6 小时前
搞定系统面试题:如何实现分布式Session管理
java·后端·面试
元闰子8 小时前
怎么用CXL加速数据库?· SIGMOD'25
数据库·后端·面试
小高0078 小时前
🔥🔥🔥Vue部署踩坑全记录:publicPath和base到底啥区别?99%的前端都搞错过!
前端·vue.js·面试