B站【狂神说Java笔记】-JVM快速入门篇

    • 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**总结:**

狂神视频地址

=====================================================================

https://www.bilibili.com/video/BV1iJ411d7jS


JVM 常问面试题


请你谈谈你对JVM的理解? java—>class---->

Java8虚拟机和之前的变化更新?

什么是OOM 内存溢出

什么栈溢出StackOverFlowError? 怎么分析

JVM 的常用调优参数?

内存快照如何抓取,怎么分析Dump文件?知道吗

谈谈JVM中,类加载器你的认识?


1.JVM的位置


在这里插入图片描述

在这里插入图片描述

JVM 调优百分之99都是在堆里面调优,方法区是特殊的堆。

在这里插入图片描述


2.JVM的体系结构


在这里插入图片描述


3.类加载器


作用:加载Class 文件,~ new Student();

类似模板,是抽象的

对象是实现,是具体的

  1. 虚拟机自带的加载器

  2. 启动类(根)加载器

  3. 扩展类加载器

  4. 应用程序加载器

在这里插入图片描述

只有一个模板

在这里插入图片描述

4.双亲委派机制


第一步:类加载器收到类加载的请求

第二步:将这个请求向上委托给父类加载器去完成 ,一直向上委托,直到启动类加载器(Boot)

第三步:启动类加载器检查是否能够加载当前和这个类 ,能加载就结束,使用当前的加载器,否则,抛出异常,通知子加载器进行加载。

第四步:重复 第三步 步骤。

null : java调用不到 ~C 、C++

Java = C++ : 去掉繁琐的东西,指针,内存管理。

Java = C+±-

双亲委派机制推荐阅读这篇文章

https://blog.csdn.net/codeyanbao/article/details/82875064


5.沙箱安全机制


没什么东西


6.Native


凡是带了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


7.PC寄存器


程序计数器:Program Counter Register

每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。


8.方法区


Method Area 方法区

方法区是被线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享空间。

静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是,实例变量存在堆内存中,和方法区无关

方法区里面存以下内容

1.static

2.final

3.Class 类模板

4.常量池

类加载过程(面试)

  1. new 一个类的时候,先在方法区有一个类的模板

  2. 类模板完了 ,方法区还有个常量池

  3. 引用在栈内存

  4. 真实的 对象在堆内存

  5. 引用指向堆内存真实的地址


9.栈


数据结构

程序 = 数据结构 +算法 : 持续学习~

程序 = 框架 + 业务逻辑 : 吃饭

栈:先进后出、后进先出

在这里插入图片描述

队列:先进先出(FIFO:First Input First Output)

在这里插入图片描述

喝多了吐就是栈,吃多了拉就是队列

为什么main 方法 先执行,最后结束!

栈:栈内存,主管程序的运行,生命周期与线程同步;

线程结束,栈内存也就释放,对于栈来说,不存在垃圾回收问题

一旦线程结束,栈就over了

栈:8大基本类型+对象引用

栈运行原理:栈帧

程序正在执行的方法,一定在栈的顶部

在这里插入图片描述

栈 + 堆 + 方法区:的一些交互关系

在这里插入图片描述


10.三种JVM


  1. Sun公司 HostSpot Java HotSpot™ 64-Bit Server VM (build 25.101-b13, mixed mode)

  2. BEA Jrockit

  3. IBM J9 VM


11.堆


Heap,一个JVM 只有一个堆内存,堆内存的大小是可以调节的。

类加载器读取了类文件后,一般会把什么东西放到堆中?

类的实例、方法、常量、变量~,保存我们所有引用类型的真实对象

堆内存中还要细分为三个区域:

  1. 新生区 (伊甸园区) Young/New

  2. 养老区 old

  3. 永久区 Perm

在这里插入图片描述

1.GC 垃圾回收主要是在伊甸园区和养老区~

2.假设内存满了,OOM ,堆内存不够!

3.在JDK 8以后,永久存储区改了个名字(元空间)


12.新生区、老年区


类:诞生 和 成长的地方、甚至死亡。

伊甸园区,所有的的对象都是在伊甸园区new 出来的!

幸存者区(0,1)

假设我的伊甸园区只能存储10个对象,当伊甸园区满了,就会触发一次轻GC。

在这里插入图片描述

这次gc有以下情况:

有的对象可以还被引用,就幸存下来了。

有的对象没有被引用了,就死了、没了。

幸存的下来的对象就移动到伊甸园区。

当伊甸园区和性幸存区都满了,就会触发一次重GC。

重gc 清理一次后,能活下来的对象就进入养老区了。

(就跟一场战争一样,不断的活下来)

真理:经过研究,99%的对象都是临时对象! new

13.永久区


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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
外链图片转存中…(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)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值