System.gc()是谁调用的?垃圾回收的范围是仅限当前java程序吗?
调用System.gc(),垃圾回收器是不是执行了整个Java程序的垃圾回收还是只对当前类对象(调用System.gc()的类)进行回收?
------解决方案--------------------System.gc();
是程序员手动调用的,这只是给jvm提个醒而已,告诉他该回收垃圾了,但是jvm什么时候真的去回收垃圾,我们就没有办法控制了。
------解决方案--------------------
正解,在JVM里面GC是一条优先级非常低的thread,调用时机一般是在heap要快满了或者当前java进程闲的蛋疼的时候,但可以调整GC的频率
------解决方案--------------------楼上正解,有一些性能分析器,可以监测jvm的变化,可以看到当程序内存扩展到一定程度,GC启动回收同时会扩展一些预留内存
------解决方案--------------------发送回收请求,自然是整个程序,它是一个类的方法,无法知道当前对象.
------解决方案--------------------gc 只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存),而不能清除栈上分配的内存(当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序,而该c程序使用malloc分配内存时).因此,如果某些对象被分配了栈上的内存区域,那gc就管不着了,对这样的对象进行内存回收就要靠finalize().------解决方案--------------------提示JVM,准备回收不需要的内存,至于何时回收,只有JVM调度清楚。不是我们想回收即可就回收的。
------解决方案--------------------