什么是内存垃圾
什么是垃圾回收 GC (garbage collection)
手动gc, JDK提供了一个gc函数, 调用这个函数, 就完成对JVM虚拟机内存进行一次GC
System.gc()
自动gc, 当JVM虚拟机启动后, 后台会自动运行一个gc程序, 负责内存的gc操作
这个后台的gc程序会定时做gc操作, 或者是当JVM内存不够用的时候, 会立刻触发gc
JDK自带的jvisualvm工具,安装Visual GC插件
同一个对象可以被多个指针同时指向
一个指针可以指向不同的对象, 但是同一时刻只能指向一个对象
测试当对象有指针指向的时候, 对象不会被垃圾回收器回收
当对象没有指针指向的时候, 对象会被垃圾回收器回收, 会不会立即回收?
方法区Method Area ---> JDK1.8后改名为元空间Meta Space
栈区 Stack Area
堆区 Heap Area
伊甸园区 Eden
生存者1区
生存者2区
老年区
程序运行过程中很多对象都是朝生夕死
小对象出生在伊甸园区, gc后, 如果能存活下来会被转移到幸存者区, 对象的年龄计数器会+1
当对象经历了16次回收后依然能够存活, 会进入老年代
重对象/大对象一出生就在老年代
Minor GC和Major GC/Full GC的区别
Minor GC 发生在新生代的GC, 速度很快
Major GC/Full GC发生在老年代的GC, 通常Major GC发生的时候都伴随着Minor GC的发生, 速度比较慢
在JVM虚拟机执行GC的时候, 所有的线程都会暂停运行, 有一句叫做"stop the world!"