天天看点

JVM深入学习(十三)-垃圾回收概念1. 垃圾的定义2. 为什么要垃圾回收3. 早期的垃圾回收4. Java的内存管理机制5. Java自动内存管理存在的问题6. 垃圾回收的工作范围7. 垃圾回收的阶段

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. 垃圾回收的阶段

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