详解JVM和GC垃圾回收
文章目录
- 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垃圾回收相关推荐
- JVM内功心法-GC垃圾回收之GC垃圾回收过程
JVM内功心法-GC垃圾回收之GC垃圾回收算法 GC 全称garbagecollection,垃圾回收.JAVA 为了屏蔽操作系统和平台之间的差异.选择的是采用 java 虚拟机来运行 java 应用 ...
- 【JVM】GC垃圾回收(三)——零落成泥碾作尘,只有香如故
[引子] 当世界上最后一个记得我的生命也忘记了我的时候,我该如何自处呢?我想我会最后看一眼我深爱的故乡,然后将占用这个世界的最后一缕精华也散去,让灵魂永归沉寂.GC垃圾回收机制也是如此,每一个最终消亡 ...
- java垃圾回收system_java应用性能调优之详解System的gc垃圾回收方法
1.什么是System.gc()? System.gc()是用Java,C#和许多其余流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...
- java 强制gc_java应用性能调优之详解System的gc垃圾回收方法
一.什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...
- java强制gc_java应用性能调优之详解System的gc垃圾回收方法
一.什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...
- JVM与GC垃圾回收(各种垃圾收集器,Jvm相关工具)
1.JVM内存区域: 虚拟机栈,本地方法栈,程序计数器线程隔离,方法区,本地内存,直接内存,堆线程共享. ①.虚拟机栈:描述方法执行时的内存模型, 主要保存执行方法时的局部变量表.操作数栈.动态连接和 ...
- java 内存 开发 经验_七年开发经验详解JVM的GC 算法
概述 GC 是 JVM 自带的功能,它能够自动回收对象,清理内存,这是 Java 语言的一大优势,但是GC绝不仅伴随着Java,相反,GC历史比Java更悠久.关于GC,我认为有四个问题需要解决: 为 ...
- 在linux上gc日志详解,JVM CMS GC日志详解
# JDK8 -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC CMS 日志格式: [GC (Allocation Failure ...
- java gc 有钱人_小猿圈java之GC垃圾回收机制
垃圾回收机制是提高性能的重要机制,所以不管学什么语言也好,垃圾回收机制都是有的,也是很重要的,小猿圈这章详解一下java的GC垃圾回收机制,需要用的或者感兴趣的朋友们,可以跟着小编学习一下. 一.GC ...
最新文章
- GEF调色板中的多级树结构
- 人工智能开发语言排行榜:不死Java,不朽C/C++,新贵Python
- boost::graph模块实现读写graphviz的测试程序
- 文献学习(part89)--Diversity-induced Multi-view Subspace Clustering
- 前端设定项目奖金有多少_【系列二】建筑工程项目激励模式探讨
- aspx转发php_asp,php,aspx一句话合集
- go去掉最后一个字符_Go:字符串操作
- 在windows server2003邮件服务器的搭建
- 大道至简第七章读后感
- c语言入门编程题库100题,C语言入门100题
- Matlab使用for循环实现5阶乘和的计算
- ERStudio8.0 破解版 下载 download
- matlab定积分程序,[转载]Matlab数值积分程序集合【转载】
- OpenSSL源码下载及编译
- 不同vlan实现互通
- 计算机快捷键ctrl记忆,PS篇:有效记忆快捷键
- 团建活动随感(r11笔记第9天)
- STVD生成HEX格式文件
- 威纶通触摸屏如何隐藏系统设置箭头图标及通过参数进入系统设置?
- 计算广告——读书笔记(二)
热门文章
- Tomcat简介和安装
- 南理工计算机考研复试科目,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...
- 锐捷交换机配置SSH
- 传统 51 与STC-Y5内核 51 单片机对比汇编指令
- zynq中mgtx应用_[ZYNQ入门宝典]GTX高速口怎么玩(一)
- python 调用萤石摄像头视频流
- vue——vue-i18n
- 人民币转换(20200327)
- 小程序-Now you can provide attr wx:key for a wx:for to improve performance
- 51单片机 Proteus仿真 超声波 液位测量与报警