1.什么是内存垃圾?
JVM堆内存中,已经确认不再被使用的内存对象。
2.什么是垃圾回收 ?
java语言规范没有明确的说明JVM 使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做两件基本事情:(1)发现无用的信息对象;(2)回收将无用对象占用的内存空间。使该空间可被程序再次使用。
System.gc()
手动GC,JDK提供了一个gc函数,调用这个函数,即完成对JVM虚拟机内存完成一次
自动GC,当JVM虚拟机启动后,后台会自动运行一个gc程序,负责内存的gc操作
这个后台的gc程序会定时做gc操作,或者是JVM内存不够用的时候,会立刻触发gc
3.同一个对象可以被多个指针同时指向
一个指针可以指向不同的对象,但是同一时刻只能指向一个对象
测试当对象有指针指向的时候,对象不会被垃圾回收器回收
测试当对象有没指针指向的时候,对象会被垃圾回收器回收,会不会立即回收?
4.关于方法区、栈区、堆区的一些理解
方法区和元空间是一个意思
程序运行的过程中很多对象都是朝生夕死
重对象/大对象 一出生就在老年代
小对象出生在伊甸园区,垃圾回收后如果能存活下拉会转到幸存者区。对象的年龄计数器会加1,当对象经历十六次回收后,依然能够存活,会进入老年代
5.Minor GC和Major GC/Full GC的区别
轻量级GC 只GC新生代 效率高
全局GC 对新生代和老年代都做GC 效率低 在新生代无法进行GC后才进行
对象只会在堆区中生成
指针可以在方法区(静态变量)、栈区(栈帧,局部变量)参数也可以是指针,返回值也可以是指针,指针也可以在堆区
在JVM虚拟机执行GC的时候所有的线程都会暂停运行,有一句话叫做”stop the world!“



