发布网友 发布时间:2024-09-29 15:35
共3个回答
热心网友 时间:2024-10-03 06:40
《java编程思想》上有句话87页“如果程序执行结束,并且垃圾回收器一直没有释放你创建的任何对象的存储空间,则随着程序的退出,那些资源也会全部交还给操作系统”热心网友 时间:2024-10-03 06:41
System.gc()不是强制解除程序或线程,而是同时JVM强制启动垃圾回收器,而且这只是通知,垃圾回收器还不一定执行,条件很苛刻。。。并且,真正在下一次垃圾收集的过程中,内存回收才开始追问我一直感觉上面两句话有矛盾,程序结束的标志是什么?我用的是myeclipse,点击运行,运行结果出来后程序不就运行结束了吗,既然程序结束了,按照第一句话那么存储资源就交还给了操作系统,资源也就回收了,那第二句话就说不通了,如果资源交给了操作系统回收了,那么执行一次操作系统回收一次,不管怎么重复执行存储空间也不会满,也就不会引起GC的执行了追答你理解错误了,第一句中“则随着程序的退出,那些资源也会全部交还给操作系统”,这个里面说的资源指的是垃圾回收器本身占用的资源,这句话的意思就是说垃圾回收器没有被使用,程序结束时,垃圾回收器占用的资源被交还给操作系统,因为没使用占资源是种浪费,而且这个资源也不仅是内存,还有CPU等其他东西。。。。。
而第二句里面的解读是:垃圾回收器回收的是JVM中堆,和方法区的内存,这部分内存在你线程和程序结束时是不会自动还给系统的,这就是为什么C++编程对内存的操作必须有申请有释放,JVM垃圾回收器存在的意义。。。。。
还有程序结束的标记是该程序的线程全部执行完毕,并不是运行结果出来就代表着程序结束,后台还有些线程需要处理,这个你可以通过finalize()来试验看看。。。。。。
热心网友 时间:2024-10-03 06:41
03阿伟大碗