文章目录

  • JVM架构图分析
    • Java虚拟机运行时数据区
    • 对象的创建方式有几种?
    • 创建对象的过程
    • 对象的访问定位
  • 垃圾回收机制
    • 如何判断一个对象是否可以回收
    • 垃圾回收算法都有哪些?
    • 对象分代
  • 垃圾回收器
    • CMS垃圾回收器
    • G1垃圾收集器
  • 类加载机制
    • 类装载执行过程
    • 类加载器有哪些?
    • 双亲委派模型

JVM架构图分析


我们编写的代码是java源文件.java文件,经过编译器编译成字节码文件.class文件,通过类装载器装载进jvm内存区域。

Java虚拟机运行时数据区

程序计数器:当前线程的行号指示器,用来记录当前执行到代码的哪一行、

Java虚拟机栈:存局部变量表,操作数栈,动态链接,方法出口等

本地方法栈:与虚拟机栈一样,只不过调用native服务

Java堆:存放数组,和对象实例,该区域线程共享

方法区:也叫永久代,存类信息,常量,静态变量。在jdk1.8取消了方法区,叫原空间,直接有直接内存管理

对象的创建方式有几种?

1 new关键字 通过构造方法创建
2 Class的newInstance 构造方法
3 Constructor类的呢哇Instance 构造方法
4 clone
5 反序列化

创建对象的过程

new 判断类是否加载
分配内存 指针碰撞,空闲列表
并发处理 CAS同步
初始化
init

对象的访问定位

直接指针:直接指向对象地址

句柄访问:指向指针的指针

在java堆中会维护一个句柄池,来装句柄,当对象发生改变的时候,只需要改变句柄池中的句柄就可以

垃圾回收机制

如何判断一个对象是否可以回收

1 引用计数器法:每个对象被引用一次,该对象的计数器加一,引用完计数器减一,到0 的时候可以被垃圾回收。
问题:对象之间相互引用,永远无法被垃圾回收

2可达性分析法:通过GCRoot形成一个引用链,只要是引用链可达的对象,就不会垃圾回收

垃圾回收算法都有哪些?

1 标记清除: 先标记垃圾,然后对垃圾对象进行垃圾回收。
问题:产生内存碎片

2 标记整理: 先标记垃圾,在对垃圾进行整理,不会产生内存碎片,但是降低了回收效率

3 复制算法:当一般空间满了的时候,就会把非垃圾回收对象复制到另一半内存,然后把那一半内存垃圾回收
问题:浪费一半的内存

4分代垃圾回收

对象分代

按存周期来分成 年轻代,老年代 , 永久代

年轻代占3分一1 老年代占3分之2

年轻代分为三个区域,Eden,Survivor from ,Survivor to 默认比例是8:1:1

对象会被先分 分配到Eden区,经过一次MinorGC进入from区,from和to区交换指针,对象年龄加1 ,对象到达15岁会进入老年代。

大对象Eden放不下,会直接进入老年代

垃圾回收器

一共有7种垃圾回收器

Serial(复制算法):是年轻代单线程的垃圾回收器
ParNew(复制算法):是年轻代多线程的垃圾回收器
Parallel Scavenge(复制算法):多线程 高吞吐,高cpu

SerialOld(标记整理):单线程,Serial老年代版本
ParallelOld(标记整理):多线程,老年代
CMS(标记清除):老年代并行收集器,追求最短停顿

G1收集器(标记整理):整个堆垃圾回收器

CMS垃圾回收器

1 初始标记—》stop the world
2 并发标记 --》
3 重新标记 --》stop the world
4并发清除

G1垃圾收集器

G1将整个堆分称大小固定的独立区域(Region),跟踪这些区域的垃圾堆积程度,维护一个优先级队列,优先回收垃圾最多的区域

类加载机制

类装载方式:
1 隐式装载: new
2 显示装载: class.forName

类装载执行过程

1 加载: 找到对应的class文件

2 验证:检查加载的class文件的正确性

3准备:给类中静态变量分配内存

4 解析:将常量池中的符号引用转化成直接引用

5 初始化:静态变量,静态代码块初始化

类加载器有哪些?

1 启动类加载器

2 扩展类加载器

3 系统类加载器

4 用户自定义加载器

双亲委派模型

接到加载请求的时候,自己先不去处理,交给自己的父类去处理,最顶层父类处理不了,再逐级向下加载。

1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

详解JVM和GC垃圾回收相关推荐

  1. JVM内功心法-GC垃圾回收之GC垃圾回收过程

    JVM内功心法-GC垃圾回收之GC垃圾回收算法 GC 全称garbagecollection,垃圾回收.JAVA 为了屏蔽操作系统和平台之间的差异.选择的是采用 java 虚拟机来运行 java 应用 ...

  2. 【JVM】GC垃圾回收(三)——零落成泥碾作尘,只有香如故

    [引子] 当世界上最后一个记得我的生命也忘记了我的时候,我该如何自处呢?我想我会最后看一眼我深爱的故乡,然后将占用这个世界的最后一缕精华也散去,让灵魂永归沉寂.GC垃圾回收机制也是如此,每一个最终消亡 ...

  3. java垃圾回收system_java应用性能调优之详解System的gc垃圾回收方法

    1.什么是System.gc()? System.gc()是用Java,C#和许多其余流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...

  4. java 强制gc_java应用性能调优之详解System的gc垃圾回收方法

    一.什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...

  5. java强制gc_java应用性能调优之详解System的gc垃圾回收方法

    一.什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...

  6. JVM与GC垃圾回收(各种垃圾收集器,Jvm相关工具)

    1.JVM内存区域: 虚拟机栈,本地方法栈,程序计数器线程隔离,方法区,本地内存,直接内存,堆线程共享. ①.虚拟机栈:描述方法执行时的内存模型, 主要保存执行方法时的局部变量表.操作数栈.动态连接和 ...

  7. java 内存 开发 经验_七年开发经验详解JVM的GC 算法

    概述 GC 是 JVM 自带的功能,它能够自动回收对象,清理内存,这是 Java 语言的一大优势,但是GC绝不仅伴随着Java,相反,GC历史比Java更悠久.关于GC,我认为有四个问题需要解决: 为 ...

  8. 在linux上gc日志详解,JVM CMS GC日志详解

    # JDK8 -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC CMS 日志格式: [GC (Allocation Failure ...

  9. java gc 有钱人_小猿圈java之GC垃圾回收机制

    垃圾回收机制是提高性能的重要机制,所以不管学什么语言也好,垃圾回收机制都是有的,也是很重要的,小猿圈这章详解一下java的GC垃圾回收机制,需要用的或者感兴趣的朋友们,可以跟着小编学习一下. 一.GC ...

最新文章

  1. GEF调色板中的多级树结构
  2. 人工智能开发语言排行榜:不死Java,不朽C/C++,新贵Python
  3. boost::graph模块实现读写graphviz的测试程序
  4. 文献学习(part89)--Diversity-induced Multi-view Subspace Clustering
  5. 前端设定项目奖金有多少_【系列二】建筑工程项目激励模式探讨
  6. aspx转发php_asp,php,aspx一句话合集
  7. go去掉最后一个字符_Go:字符串操作
  8. 在windows server2003邮件服务器的搭建
  9. 大道至简第七章读后感
  10. c语言入门编程题库100题,C语言入门100题
  11. Matlab使用for循环实现5阶乘和的计算
  12. ERStudio8.0 破解版 下载 download
  13. matlab定积分程序,[转载]Matlab数值积分程序集合【转载】
  14. OpenSSL源码下载及编译
  15. 不同vlan实现互通
  16. 计算机快捷键ctrl记忆,PS篇:有效记忆快捷键
  17. 团建活动随感(r11笔记第9天)
  18. STVD生成HEX格式文件
  19. 威纶通触摸屏如何隐藏系统设置箭头图标及通过参数进入系统设置?
  20. 计算广告——读书笔记(二)

热门文章

  1. Tomcat简介和安装
  2. 南理工计算机考研复试科目,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...
  3. 锐捷交换机配置SSH
  4. 传统 51 与STC-Y5内核 51 单片机对比汇编指令
  5. zynq中mgtx应用_[ZYNQ入门宝典]GTX高速口怎么玩(一)
  6. python 调用萤石摄像头视频流
  7. vue——vue-i18n
  8. 人民币转换(20200327)
  9. 小程序-Now you can provide attr wx:key for a wx:for to improve performance
  10. 51单片机 Proteus仿真 超声波 液位测量与报警