7 GC相关

作者: 一枝妖孽 | 来源:发表于2018-06-10 21:20 被阅读0次

GC相关

一 classloader类加载器

当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载

1 什么是类加载器
ClassLoader就是用来动态加载class文件到内存当中用的

2 类加载器类型
(站在程序员角度)
Bootstrap ClassLoader 启动类加载器【底层是C++编写的】
Extension ClassLoader 扩展类加载器
App ClassLoader 应用程序类加载器

(站在java虚拟机的角度)
启动类加载器
所有其他的类加载器【采用java语言实现的】这些都需要由启动类加载器加载之后才能加载其他的类

3 双亲委托模型
每层的上层为父加载器【非继承关系】
先把任务交给父类,父类不能加载则交给子类加载

image.png

4 类加载的过程


image.png

动态绑定,静态绑定

1、第一步-加载
1)通过一个类的全限定名来获取其定义的二进制字节流
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据
3)在Java堆中生成一个代表这个类的Java.lang.class对象,作为对方法去中这些数据的访问入口
【通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象】

2、第二步-验证
1)为了确保Class文件中的字节流包含的信息符合当前虚拟机的要求
2)文件格式的验证、元数据的验证、字节码验证和符号引用验证

3、第三步-准备----实际为java语法
1)对基本数据类型--可以默认赋值
2)对于同时被static和final修饰的常量--必须显示赋值
3)对于引用数据类型 reference--如果没有对其赋值,则系统默认赋值为null
4)在数组初始化时

4、第四步-解析


image.png

1)类或接口的解析
2)字段解析
3)类方法的解析
4)接口方法解析

5、第五步-初始化
初始化阶段是执行类构造器()方法的过程
6、使用
7、卸载

二 GC---java中堆与栈相关

1 java程序运行时的内存分配策略

1)静态存储区(方法区):主要存放静态数据、全局static数据和常量
【在程序编译的时候就已经分配好了,并且在整个程序运行期间一直存在】
2)栈区:方法体内的局部变量都在栈上创建
【当方法被执行时,方法体内的局部变量在栈上创建一个内存区,并在方法执行完成后,这些局部变量所持有的内存被释放。。。。效率极高,容量有限】
3)堆区:通常就是指在程序运行时直接new出来的内存
【这部分内存在不使用时,就会有垃圾回收器负责回收】

2 栈内存/堆内存的区别

从内存分配角度
在方法体内定义的(局部变量)一些基本类型的变量和对象的引用变量都是在方法的栈内存中分配的。
堆内存用来存放所有由new创建的对象(包括该对象其中的所有成员变量)和数组。
在堆分配的内存,将由Java垃圾回收器来自动管理

3 Java内存回收机制


image.png

4 Java内存泄露引起的原因

长生命周期的对象持有短生命周期对象的引用就很有可能发生内存泄露
【这是因为短生命周期的对象实际上已经不需要了,但是因为长周期的对象持有其引用,而导致它不能被回收】

5 总结

堆:运行时,垃圾回收,动态分配内存,存取速度较慢
栈:存取速度块,生命周期【跟生命周期是绑定的】

相关文章

  • 7 GC相关

    GC相关 一 classloader类加载器 当需要使用某个类时,虚拟机将会加载它的”.class”文件,并创建对...

  • GC-标记清除算法(mark-sweep)

    前一篇-GC算法基础相关概念[https://www.jianshu.com/p/e0c7ef91cb6b] GC...

  • JVM常用参数

    GC相关

  • GC 相关

    参考链接:http://www.iteye.com/topic/1119491 为了分代垃圾回收,Java堆内存分...

  • GC相关

    一 对象被判定为垃圾的标准是什么?  1. 没有任何引用的时候; 二 判定对象是否为垃圾的算法.  1. 引用计数...

  • 教你如何看懂 JavaGC 日志

    JVM GC 相关的参数 -XX:+PrintGC输出GC日志-XX:+PrintGCDetails输出GC的详细...

  • 漫谈GC——小心递归中产生的内存溢出

    之前的文章中有系统的讲过GC相关的理论知识,如果对GC相关的理论知识不太理解的朋友,可以阅读一下:漫谈GC —— ...

  • JVM之GC日志续

    本文大概阐述和GC日志相关的jvm启动参数的一些内容。 GC日志相关基本参数 特殊说明:生产环境gc日志要遵循够用...

  • JVM GC

    1. JVM GC相关配置 -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出G...

  • 6.HotSpot中的GC收集器简介

    目录 概述 新生代GC 老年代GC java789默认GC搭配 垃圾收集器相关参数总结 概述 整理归纳HotSpo...

网友评论

    本文标题:7 GC相关

    本文链接:https://www.haomeiwen.com/subject/mhrfeftx.html