4、JVM的垃圾回收机制是用来干嘛的?为什么要垃圾回收?
你的代码在运行的时候,起码会有一个main线程会去执行所有的代码,当然也可能是你启动的别的线程。然后线程执行的时候必须通过自己的程序计数器来记录执行到哪一个代码指令了。另外线程在执行的时候,会为每一个方法创建一个栈帧放入自己的Java虚拟机栈里,里面有方法的局部变量。最后就是代码执行的时候,创建的各种对象都是放在Java堆内存里的。
main线程执行main方法里的代码,main线程自己是有一个Java虚拟机栈,会把main方法的栈帧压入Java虚拟机栈,调用别的方法,就会创建别的方法的栈帧,压入main线程的Java虚拟机栈里去。
一个方法执行完毕了,会怎么样?一旦方法执行完毕了,此时就会把这个方法对应的栈帧从main线程的Java虚拟机栈里出栈。一旦方法里的栈帧出栈,这个栈帧里的局部变量,也就没有了。
我们在Java堆内存里创建的对象,都是占用内存资源的,而且内存资源有限。所以对于占着资源的,怎么处理?-->JVM的垃圾回收机制。JVM本身是有垃圾回收机制的,他是一个后台自动运行的线程。你只要启动一个JVM进程,他就会自带这个垃圾回收的后台线程。这个线程会在后台不断检查JVM堆内存里的各个实例对象,如果某个实例对象没有任何一个方法的局部变量指向他,也没有任何一个类的静态变量,包括常量指向他,那么这个垃圾回收线程,就会把这个实例对象回收掉,从内存里清除掉,让他不再占用任何资源。这样的话,这些不再被人指向的对象实例,就会把垃圾回收机回收掉。