-
- JVM 常问面试题
-
1.JVM的位置
-
2.JVM的体系结构
-
3.类加载器
-
4.双亲委派机制
-
5.沙箱安全机制
-
6.Native
-
7.PC寄存器
-
8.方法区
-
9.栈
-
10.三种JVM
-
11.堆
-
12.新生区、老年区
-
13.永久区
-
14.堆内存调优
-
15.GC :垃圾回收机制
-
- 15.1**垃圾回收 = GC**
-
15.2**复制算法**
-
15.3**图解复制算法**
-
15.4**标记清除算法**
-
15.5**标记压缩**
-
15.6**总结:**
=====================================================================
请你谈谈你对JVM的理解? java—>class---->
Java8虚拟机和之前的变化更新?
什么是OOM 内存溢出
什么栈溢出StackOverFlowError? 怎么分析
JVM 的常用调优参数?
内存快照如何抓取,怎么分析Dump文件?知道吗
谈谈JVM中,类加载器你的认识?
JVM 调优百分之99都是在堆里面调优,方法区是特殊的堆。
作用:加载Class 文件,~ new Student();
类似模板,是抽象的
对象是实现,是具体的
-
虚拟机自带的加载器
-
启动类(根)加载器
-
扩展类加载器
-
应用程序加载器
只有一个模板
第一步:类加载器收到类加载的请求
第二步:将这个请求向上委托给父类加载器去完成 ,一直向上委托,直到启动类加载器(Boot)
第三步:启动类加载器检查是否能够加载当前和这个类 ,能加载就结束,使用当前的加载器,否则,抛出异常,通知子加载器进行加载。
第四步:重复 第三步 步骤。
null : java调用不到 ~C 、C++
Java = C++ : 去掉繁琐的东西,指针,内存管理。
Java = C+±-
双亲委派机制推荐阅读这篇文章
没什么东西
凡是带了native 关键字的,说明java 的作用范围达不到了,会去调用底层C 语言的库。
凡是带了native 关键字的,会进入本地方法栈。
调用本地接口:JNI
JNI作用:扩展Java的使用,融合不同的编程语言为Java 所用!最初C、C++
它在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native 方法
在最终执行的时候去加载本地方法库的方法,通过JNI
本地方法接口(JNI)Java Native Interface
本地方法库
private native void start0();
调用其他接口:Scoket 、WebService~http
程序计数器:Program Counter Register
每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。
Method Area 方法区
方法区是被线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享空间。
静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是,实例变量存在堆内存中,和方法区无关
方法区里面存以下内容
1.static
2.final
3.Class 类模板
4.常量池
类加载过程(面试)
-
new 一个类的时候,先在方法区有一个类的模板
-
类模板完了 ,方法区还有个常量池
-
引用在栈内存
-
真实的 对象在堆内存
-
引用指向堆内存真实的地址
数据结构
程序 = 数据结构 +算法 : 持续学习~
程序 = 框架 + 业务逻辑 : 吃饭
栈:先进后出、后进先出
队列:先进先出(FIFO:First Input First Output)
喝多了吐就是栈,吃多了拉就是队列
为什么main 方法 先执行,最后结束!
栈:栈内存,主管程序的运行,生命周期与线程同步;
线程结束,栈内存也就释放,对于栈来说,不存在垃圾回收问题
一旦线程结束,栈就over了
栈:8大基本类型+对象引用
栈运行原理:栈帧
程序正在执行的方法,一定在栈的顶部
栈 + 堆 + 方法区:的一些交互关系
-
Sun公司 HostSpot Java HotSpot™ 64-Bit Server VM (build 25.101-b13, mixed mode)
-
BEA Jrockit
-
IBM J9 VM
Heap,一个JVM 只有一个堆内存,堆内存的大小是可以调节的。
类加载器读取了类文件后,一般会把什么东西放到堆中?
类的实例、方法、常量、变量~,保存我们所有引用类型的真实对象
堆内存中还要细分为三个区域:
-
新生区 (伊甸园区) Young/New
-
养老区 old
-
永久区 Perm
1.GC 垃圾回收主要是在伊甸园区和养老区~
2.假设内存满了,OOM ,堆内存不够!
3.在JDK 8以后,永久存储区改了个名字(元空间)
类:诞生 和 成长的地方、甚至死亡。
伊甸园区,所有的的对象都是在伊甸园区new 出来的!
幸存者区(0,1)
假设我的伊甸园区只能存储10个对象,当伊甸园区满了,就会触发一次轻GC。
这次gc有以下情况:
有的对象可以还被引用,就幸存下来了。
有的对象没有被引用了,就死了、没了。
幸存的下来的对象就移动到伊甸园区。
当伊甸园区和性幸存区都满了,就会触发一次重GC。
重gc 清理一次后,能活下来的对象就进入养老区了。
(就跟一场战争一样,不断的活下来)
真理:经过研究,99%的对象都是临时对象! new
1.jdk 1.6之前:永久代,常量池是在方法区中
2.jdk 1.7 :永久代, 但是慢慢的退化了,去 永久代,常量池在堆中
3.jdk 1.8 之后:无永久代,常量池在元空间
永久区常驻内存的,用来存放JDK自身携带的class对象,interface元数据,存储的是Java运行时的一些环境或类信息这个区域不存在垃圾回收!关闭虚拟机就会释放这个区域的内存
OOM出现条件:一个启动器,加载了大量的第三方jar包、Tomcat部署了太多应用,大量动态生成的反射类,直到内存满。
逻辑上存在,物理上不存在。
在一个项目中,突然出现OOM 故障,那么该如何排除研究为什么出错~
1.能够看到代码第几行出错:内存快照分析工具,Eclipse MAT,Jprofiler
2.Dubug,一行行分析代码~
MAT,Jprofiler作用:
1.分析Dump内存文件,快速定位内存泄漏;
2.获得堆中的数据
3.获得大的对象~
idea 安装Jprofiler
安装之后配置
idea 配置vm 参数
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
windows 客户端安装
https://www.ej-technologies.com/download/jprofiler/files
Dump 内存文件分析
分析:
一眼就可以看成ArrayList 出现问题了
错误代码如下
byte[] array = new byte[110241024];//1mb
public static void main(String[] args) {
List list = new ArrayList<>();
int count = 0;
try {
while (true){
list.add(new P1());
count++;
}
}catch (Throwable e){
e.printStackTrace();
System.out.println(“count===”+count);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
程序员代码面试指南 IT名企算法与数据结构题目最优解
这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!
《TCP-IP协议组(第4版)》
本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。
本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。
Java开发手册(嵩山版)
这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
JAVA核心知识点+1000道 互联网Java工程师面试题
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
外链图片转存中…(img-dzj1NV7u-1713309526786)]
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
[外链图片转存中…(img-UMfuMxyX-1713309526786)]
JAVA核心知识点+1000道 互联网Java工程师面试题
[外链图片转存中…(img-AH2eY9no-1713309526786)]
[外链图片转存中…(img-rHWpMfqN-1713309526786)]
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
[外链图片转存中…(img-7tPcsJKX-1713309526787)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!