01-学习大纲

02-体系结构

作业:JVM画图
https://www.cnblogs.com/liululee/archive/2019/09/04/11461998.html

03-类加载器及双亲委派机制

类加载器画图:虚拟机自带加载器-启动类/根加载器/扩展类加载器/应用程序加载器
百度双亲委派机制
APP-Exr-rt -EXR-APP
Java=c+±-,去掉了指针和内存管理,native本地c++方法

04-沙箱安全机制

05-Native、方法区

计数器

06-栈

栈:数据结构;先进后出
队列:先进先出(FIFO)
main()先执行后结束——在栈中执行
栈:又称栈内存,主管程序的运行;生命周期和线程同步;线程结束,栈内存释放,不存在垃圾回收。
栈中存放:8大基本类型+对象引用+实例方法
栈的运行原理:栈满了StackOverflowError

07-HotSpot和堆

三种JVM

  • Sun公司:HotSpot
  • BEA:JRockit
  • IBM:J9 VM
    堆 heap,一个JVM只有一个堆,堆内存的大小是可以调节的
    类加载器读取了类文件后,一般会把类,方法,常量,变量,保存所有引用类型的真实对象放到堆中。
    垃圾回收:轻量级GC,重量级GC(Full GC)
    堆内存分为三个区域:新生区(伊甸园区Eden Space;幸存0区,幸存1区)、养老区、永久存储区。
    GC垃圾回收,主要在伊甸园区和养老区
    假设内存满了OOM,java.lang.OutOfMemoryError
    在JDK8以后,永久存储区叫元空间

08-新生区、永久存储区、堆内存调优

  • 新生区、类诞生和成长的地方,甚至死亡;经过研究,99%的对象都是临时对象

    • 伊甸园区Eden Space:所有对象都在伊甸园区new出来
    • 幸存0区
    • 幸存1区
  • 养老区Old:杀不死的
  • 永久存储区Perm:这个区域是常驻内存的,用于存放JDK自身携带的class对象,Interface元数据,存储的是Java运行时的一些环境。这个区域不存在垃圾回收,关闭虚拟机就会释放这个区域的内存。
  • 一个启动类加载了大量的第三方jar包;tomcat部署了大量的应用;大量动态生成的反射类;不断地被加载,直到内存满,会导致这个区域崩溃,出现OOM
    -jdk1.6之前:永久代,常量池在方法区之中
    -jdk1.7:永久代,但是慢慢的退化了,去永久代,常量池在堆中
    -jdk1.8:无永久代,常量池在元空间(方法区/非堆)
    默认的情况下:分配的总内存 是电脑内存的1/4;而初始化的内存:1/64
    ? -Xms1024m -Xmx1024m -XX:+PrintGCDetails
    参数调优

09-JPofiler工具分析OOM原因

内存快照分析工具:MAT(Eclipse:https://www.jianshu.com/p/d8e247b1e7b2),JPofiler
-分析Dump内存文件,快速定位内存泄漏
-获得堆中的数据
-获得大的对象
-。。。
待看*

10-GC介绍之引用计数法

JVM在进行GC时,并不是对这三个区域统一回收,大部分时候,回收都是新生代。
轻GC:普通的GC
重GC:全局的GC
标记清除法,标记压缩,复制算法,
引用计数器:每个对象都记录使用次数,清除使用次数为零的算法。微软,python,

11-GC之复制算法

谁空谁是to
1。每次GC都会将Eden活得对象移到幸存区中,一旦Eden区被GC后,就会是空的。
2.如果空的相等,就把from移动到to,
当一个对象经历了15(-XX:MaxTenuringThreshold)次GC,都还没有死,进入老年代
年轻代主要使用复制算法。
好处:没有碎片
坏处:浪费内存空间,多了一半空间是空的,极端下,对象百分百存活,操作移动复杂

12-标记压缩清楚算法

1.扫描对象,对活着的对象标记
2. 清除:对没有标记的对象进行清除
优点:不需要额外空间
缺点:两次扫描浪费时间,会产生内存碎片。
3.再优化:压缩
防止内存碎片产生,再次扫描,向一端移动存活的对象
标记清除压缩:先标记清除几次再压缩

13-总结

内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
内存整齐度:复制算法=标记清除算法>标记压缩算法
内存利用率:标记压缩算法=标记清除算法>复制算法

GC:分代收集算法
年轻代:存活率低-复制算法
老年代:区域大,存活率高-标记清除(内存碎片不是太多)+标记压缩

《深入理解JVM》

14-JMM

什么是JMM:百度
https://www.cnblogs.com/zhengbin/p/5654805.html
它干嘛的:官方,其他人博客,视频
它该如何去学习

Day 12 狂神说Java基础笔记(JVM01-14)相关推荐

  1. Java基础笔记(14)—— Java的基础类型和字节大小

    Java基础笔记(14)-- Java的基础类型和字节大小 Java基础笔记(14)-- Java的基础类型和字节大小 Java语言提供了八种基本类型.六种数字类型(四个整数型(默认是int 型),两 ...

  2. Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

    Java基础笔记(2)--HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1.HashMap: HashMap是基于哈希表的 Map 接口的实现.此实现提 ...

  3. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  4. Java基础笔记23-集合练习题

    Java基础笔记23-集合练习题 定义一个集合,实现去重复的功能 定义一个数组,数组中存放的是图片的后缀,给一个文件的名字,判断是否是图片 定义一个带有数字和字符串的集合,使用迭代器进行迭代,只输出字 ...

  5. Java基础笔记6——File、流、枚举、断言

    Java基础笔记6 十一.File 代表文件或目录的类. 所表示的文件或目录在计算机中不一定真实存在. 绝对路径:以盘符或者/开头的路径--不以当前路径为基准,直接跳转到指定的位置 相对路径:不以盘符 ...

  6. 狂神说Java学习笔记 Java基础

    目录 机器语言 第二代语言(汇编语言) 第三代语言 高级语言 Java特性和优势 JDK(Java Development Kit) JRE(Java Runtime Enviroment) JVM( ...

  7. Java基础笔记(4w字长文警告)

    Java核心笔记 提示:点击右上角关注博主,收获共同话题 下面是我的个人学习Java的笔记,现在分享给广大友友: 文章目录 Java核心笔记 0.导论 标柱注释: 学习方法: 1 java概述 1.1 ...

  8. 狂神说Java Spring5笔记

    Spring介绍 Spring是致力于解决企业级开发软件的各层技术. Spring相当于一个技术大杂烩,将各种技术方案整合在一起. 2002年,Rod Jahnson首次推出了Spring框架雏形in ...

  9. 【Java基础笔记】类型转换

    目录 前言 类型转换(基本数据类型) 1.自动类型转换 2.强制类型转换 前言 该文章为Java基础自学笔记 其他内容:Java基础学习笔记目录 学习用书: <Java核心技术 卷Ⅰ 基础知识( ...

最新文章

  1. PPM图片格式及其C读写代码
  2. [转载]关于Android ProGuard混淆学习记录
  3. 今天下棋,结合以前一些技巧的总结
  4. php limit限流,php+redis 限流
  5. java播放背景音乐的几种方式
  6. Linux上的node站点之centos配置nodejs运行环境笔记
  7. 【实用代码片段】将json数据绑定到html元素 (转)
  8. HTML 5中的tips两则
  9. eclipse中文汉化操作 2020-12
  10. hsqldb mysql_HSQLDB的研究与性能测试(与Mysql对比)
  11. NJU机器学习导论课程笔记之写作缘由
  12. 【程序员读论文】LeCun, Y., Bengio, Y. Hinton, G. Deep learning. *Nature* **521,** 436–444 (2015).
  13. ArduCopter——ArduPilot——Notch Filter(陷波滤波器)
  14. 12个你值得拥有的虚拟科学实验APP、工具和资源
  15. vue学习笔记-绑定属性 绑定class及style(2)
  16. 单元测试,我有话说(No tests to run. No tests were executed)
  17. BZOJ 2794: [Poi2012]Cloakroom 询问离线 背包dp
  18. 关于laravel 使用__call,__callStatic实现静态,动态方法互相调用
  19. java 纳秒_如何在Java 8中使用Date API达到精确的纳秒精...
  20. java面试(JVM)

热门文章

  1. 【转】动态口令(OTP)认证技术
  2. 处理日常事务的 Linux 程序和它们的配置
  3. 日常生活中的机器学习--各类机器学习问题
  4. 【SMTP测试】windows环境利用cmd命令发送smtp协议邮件
  5. linux简述什么是shell,【Linux小知识】什么是shell?
  6. 聚焦数字孪生——盈嘉再次亮相第六届世界互联网大会
  7. 140个电脑技巧值得收藏
  8. 如何理解无偏估计量?
  9. Python协程还不理解?请收下这份超详细的异步编程教程!还没学会来找我!
  10. rxJava源码解析系列五之Disposable