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

Java后端八股----JVM篇

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中线程1,2如果资源被抢占了,则程序计数器记录一下执行的行号,等到资源就绪后会从记录的行号继续向后执行。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
Java8把静态变量以及常量放到了线程的本地内存原空间中(避免放在堆中不可控)。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
👆图中第二种情况不太容易出现。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法区存放在永久代的信息,jdk8之后存在了线程的元空间里。元空间的默认大小是没有上限的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
👆 IO速度远小于NIO
IO是用的IOStream NIO用的是FileChannel。
在这里插入图片描述
Java是没有权限之间读到系统内存的,是需要CPU进行状态切换然后读到Java堆内存再进行数据处理。
在这里插入图片描述
而直接内存就能解决上面的情况,在系统内存和堆内存中创建一块区域给双倍都有权限,这样进行拷贝的时候速度就能快上不少。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般我们自己写的类都是用第三种应用类加载器加载的。
在这里插入图片描述
加载前都进行上一任的委托,从下往上委托,像Student类最后会从最上面下到AppClassLoader进行加载。当Student类需要使用String类型的时候也会向上委托,发现最高层的BootStrap里lib下有这个类,就可以返回给AppClassLoader直接使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加载的时候,使用Person的class对象作为一个访问Person类的接口,Heap堆访问对象方法的时候还是要调用方法区的方法进行使用。
在这里插入图片描述
在这里插入图片描述
图中的Object类会在初始化阶段赋值。
在这里插入图片描述
解析阶段所做的就是把符号引用(图中的数字指向),变换为直接引用,使用指针直接指向执行方法。
在这里插入图片描述
第三条:如果子类调用了父类的静态属性,那么只会初始化父类的静态代码。👇在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回收垃圾一般是回收堆里的没有引用的数据。在这里插入图片描述
👆进行第二条指令之后 New String(“123”)的引用就成了0。
在这里插入图片描述
即使a,b都为null了之后
在这里插入图片描述
堆中的对象一样引用无法归零,引用计数法就失效了。
在这里插入图片描述
在这里插入图片描述
图中的第二段代码可以理解为 b.instance = new Demo();
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分代回收算法也是垃圾回收算法的一种。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般不常用fullGC,只在新生代和老年代内存实在长期不足的时候才调用使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重新标记好像等于对于标记的再确认。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制到s后会释放E,然后再重新分配Eden。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上这时的垃圾回收就包括了新生代垃圾回收和老年代垃圾回收。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当内存不够时会使用一次FullGC。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
弱引用容易造成内存泄漏的问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.sh是在linux环境下的结尾,如果是windows环境结尾会是bat。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
👆目前只有jdk1.8中有。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过上图可以得知,堆溢出的情况是在ToolDemo中的java的第26行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)
  • 十.pandas方法总结Numpy
  • 数据结构——双向链表(C语言版)
  • 20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
  • 20240318-2-推荐算法Graph_Embedding
  • C++ 的标准模板库(STL)常用算法介绍
  • 微信小程序事件处理
  • 操作系统内功篇:硬件结构之软中断
  • 树形递归模板
  • 面试算法-88-反转链表
  • 【软件测试_黑白盒测试】白盒测试黑盒测试 区别
  • window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
  • [Repo Git] manifests的写法
  • 【LLM多模态】Cogvlm图生文模型结构和训练流程
  • mysql的实训操作任务指南
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Android 架构优化~MVP 架构改造
  • js正则,这点儿就够用了
  • Vue.js-Day01
  • WebSocket使用
  • 包装类对象
  • 看域名解析域名安全对SEO的影响
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端性能优化——回流与重绘
  • 前嗅ForeSpider教程:创建模板
  • 用jQuery怎么做到前后端分离
  • Nginx实现动静分离
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (3)选择元素——(17)练习(Exercises)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)球球大作战
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)JAVA中的堆栈
  • (转)linux 命令大全
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • [AIGC] Spring Interceptor 拦截器详解
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C#]winform部署PaddleOCRV3推理模型
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [flask]http请求//获取请求体数据
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!
  • [MySQL光速入门]003 留点作业...
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • [Typescript]基础篇之接口
  • [Unity]关于iOS申请因为Advertising Identifier问题被拒绝的解决方法