栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM:初学垃圾回收器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM:初学垃圾回收器

System.gc() 的理解

System.gc() 调用附带一个免责声明,无法保证对垃圾回收器的调用
一般情况下,垃圾回收应该是自动进行的,无需手动触发,否则就过于麻烦了

内存溢出:

没有空闲内存,并且垃圾回收器也无法提供更多的内存(在报 OutOfMemoryError 之前,一定会调用一个 gc())

没有空闲内存:
1、Java 虚拟机的堆内存设置不够

2、代码中创建了大量的对象,并且长时间不能被垃圾收集器收集(存在被引用)

内存泄漏

严格来说,在只有对象不会再被程序用到了,但是 GC 又不能回收他们的情况,才叫内存泄漏。
举例:
1、单例模式
单例的生命周期和应用程序是一样长的,所以单例程序中,如果持有对外部对象的引用的话,那么外部对象是不能被回收的,则会导致内存泄漏的发生

2、一些提供 close 资源未关闭导致内存泄漏
数据库连接 dateSource.getConnection(),网络连接 socket 和 io 连接必须手动 close,否则不能被回收,导致内存泄漏

垃圾回收的并行与并发

并发:
并发并不是真正意义上的 “同时进行” 而是 CPU 把一个时间短划分成几个时间片段,然后在这几个时间区间之间来回切换,由于 CPU 处理的速度很快,只要时间间隔处理得当,即可让用户感觉是多个程序同时进行

并行:
当系统有一个以上的 CPU 时,两个进行互不抢占 CPU 的资源,可以同时进行,这种我们成为并行
决定并行的因素不是 CPU 的数量,然是 CPU 核心数量,比如一个 CPU 多核也可以并行

并行与并发的对比:
并发的多个任务之间互相抢占资源
并行的多个人物之间不互相抢占资源

引用

面试题:强引用,软引用,弱引用,虚引用有什么区别,具体的使用场景是什么?

四中引用强度依次逐渐减弱,除了强引用以外,其他三种引用都能在 lang 包下的 ref 包中找到

强引用:类似 Object obj = new Object 这种关系,只要强引用的关系还存在,那么垃圾回收器就永远不会回收被引用的对象(打死也不回收)

软引用:在系统将要发生内存溢出之前,会把这些对象列入回收范围之中进行二次回收,如果回收后害没有足够的内存,才会抛出异常(内存不足,才会回收)

被弱引用生成的对象,只能存活到下一次垃圾收集之前,当垃圾回收器工作时,无论内存空间是否足够,都被回收

虚引用,唯一目的是能够在这个对象被回收的时候,收到一个系统的通知

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号