13、JVM实战:垃圾回收概念

1. 垃圾的定义

什么是垃圾?
运行程序中没有任何指针指向的对象

2. 为什么要垃圾回收

1、 垃圾不回收的情况下,内存空间迟早会被占用完,影响应用程序的正常运行;
2、 垃圾回收可以进行内存碎片整理,保证大空间对象的分配;

3. 早期的垃圾回收

在c/c++中都是使用手动垃圾回收的方式进行垃圾回收
具体的说: 使用new申请内存,使用delete回收内存

4. Java的内存管理机制

java使用自动内存管理的方式来对内存进行操作,内存的分配和回收都由java实现,不用开发人员手动分配及回收.
相较于c/c++来说,极大的省略了开发的复杂度,开发人员也无需担心忘记回收内存而导致的内存泄露问题.
可以称java为 (c++)–,减配版的c++,此处的减配意思是 1. 复杂度减小,不用关心内存回收 2. 手动回收相较于自动回收在某种程度上可能会有更好的性能,从这个角度说java是c++的减配版本

5. Java自动内存管理存在的问题

java使用垃圾回收器自动回收垃圾,那么相应的,开发人员对应内存分配和回收的能力就可能变弱,在发生内存泄露/内存溢出问题时,可能无法及时的找到问题
需要借助于一些监控工具,分析java的内存情况.

6. 垃圾回收的工作范围

垃圾回收主要针对堆和方法区
栈只有入栈和出栈操作,不存在垃圾回收,但是存在内存溢出问题
程序计数器不存在垃圾回收也不存在内存溢出问题

垃圾回收的分代机制:

1、 主要针对新生代YGC;
2、 较少针对老年代MinorGC;
3、 基本不针对永久代(元空间)FULLGC;

7. 垃圾回收的阶段

垃圾回收分为标记阶段清除阶段

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: