1. System.gc()的理解

通过 system.gc()或者 Runtime.getRuntime().gc() 的调用显式触发 Full GC,同时对老年代新生代进行回收尝试释放被丢弃对象占用内存
Runtime一个线程对应一个,Runtime相当于运行数据区这样一个东西

2. 内存溢出内存泄露

内存溢出(OOM)

内存泄漏(Memory Leak:对象不会再被程序用到了,但是 GC 又不能回收他们的情况

内存泄漏并不会立刻引起程序崩溃,但是一旦发生内存泄漏,程序中的可用内存就会被逐步蚕食,直至耗尽所有内存,最终出现 OOM 异常,导致程序崩溃

3. 垃圾回收的并行并发

并行(Parallel

多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态。如 ParNewParallel ScavengeParallel Old

串行(Serial)

相较于并行概念单线程执行。如果内存不够,则程序暂停,启动 垃圾回收器进行垃圾回收。回收完,再启动程序的线程。

并发(Concurrent

用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),垃圾回收线程在执行时不会停顿用户程序运行用户程序在继续运行,而垃圾收集程序线程运行一个 CPU 上;如:CMSG1

4. 对可达的对象的GC

4.1 强软弱虚引用

引用——不回收,OOM也不回收
使用 new创建一个新的对象,并将其赋值给一个变量时候这个变量成为指向该对象的一个引用
在这里插入图片描述

引用:内存不足才回收

只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常

弱引用:只要发生GC,就回收

软引用、弱引用都非常适合来保存那些可有可无的缓存数据。当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。而当内存资源充足时,这些缓存数据可以存在相当长的时间,从而起到加速系统作用

虚引用:对象回收的跟踪

原文地址:https://blog.csdn.net/qq_51240148/article/details/134785486

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_43310.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注