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参数

相关推荐
GSDjisidi3 小时前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展
xhxxx5 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试
有意义5 小时前
斐波那契数列:从递归到优化的完整指南
javascript·算法·面试
用户47949283569156 小时前
面试官最爱挖的坑:用户 Token 到底该存哪?
前端·javascript·面试
Heo6 小时前
Vue3.4中diff算法核心梳理
前端·javascript·面试
齐生16 小时前
iOS 知识点 - ARC / 引用计数 / SideTable / weak 表
笔记·面试
用户47949283569157 小时前
XSS、CSRF、CSP、HttpOnly 全扫盲:前端安全不只是后端的事
前端·后端·面试
大大大大物~8 小时前
JVM 之 线上诊断神器Arthas实战【内部原理?常用命令?如何使用Arthas排查cpu飙高、类加载问题、死锁、慢接口等线上问题?】
jvm·oom·arthas
镜花水月linyi8 小时前
Java 线程创建的完整链路:从 Java 层 → JVM 层 → 操作系统层
java·后端·面试
zfj3218 小时前
排查java应用内存溢出的工具和方法
java·开发语言·jvm·内存溢出