问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 中垃圾收集机制的原理是???

发布网友 发布时间:2022-04-23 05:53

我来回答

3个回答

热心网友 时间:2022-04-23 02:44

JVM在程序运行期会有一个专门的垃圾回收线程,这个线程会判断程序中的对象是否没有任何引用或超出作用域,如果有这种情况,就会释放这个对象,垃圾回收的线程只有在内存有空闲的时候才会执行,因为优先级很低什么的

热心网友 时间:2022-04-23 04:02

垃圾满了 ,就起来 扫一下,随机的

热心网友 时间:2022-04-23 05:37

Java技术提供了一个系统级的线程(Thread),即垃圾收集器线程(Garbage Collection Thread),来跟踪每一块分配出去的内存空间,当Java 虚拟机(Java Virtual Machine)处于空闲循环时,垃圾收集器线程会自动检查每一快分配出去的内存空间,然后自动回收每一快可以回收的无用的内存块。
  
  垃圾收集器线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。它有效地防止了内存渗漏体的出现,并极大可能地节省了宝贵的内存资源。但是,通过Java虚拟机来执行垃圾收集器的方案可以是多种多样的。
  
  下面介绍垃圾收集器的特点和它的执行机制:
  
  垃圾收集器系统有自己的一套方案来判断哪个内存块是应该被回收的,哪个是不符合要求暂不回收的。垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System. gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。这也是垃圾收集器的最主要的缺点。当然相对于它给程序员带来的巨大方便性而言,这个缺点是瑕不掩瑜的。
  
  垃圾收集器的主要特点
  1.垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。
  2.垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个"活动的部分"所引用,此时我们就说,该对象的内存空间已经无用。所谓"活动的部分",是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。
  3.垃圾收集器线程虽然是作为低优先级的线程运行,但在系统可用内存量过低的时候,它可能会突发地执行来挽救内存资源。当然其执行与否也是不可预知的。
  4.垃圾收集器不可以被强制执行,但程序员可以通过调用System. gc方法来建议执行垃圾收集器。
  5.不能保证一个无用的对象一定会被垃圾收集器收集,也不能保证垃圾收集器在一段Java语言代码中一定会执行。因此在程序执行过程中被分配出去的内存空间可能会一直保留到该程序执行完毕,除非该空间被重新分配或被其他方法回收。由此可见,完全彻底地根绝内存渗漏体的产生也是不可能的。但是请不要忘记,Java的垃圾收集器毕竟使程序员从手工回收内存空间的繁重工作中解脱了出来。设想一个程序员要用C或C++来编写一段10万行语句的代码,那么他一定会充分体会到Java的垃圾收集器的优点!
  6.同样没有办法预知在一组均符合垃圾收集器收集标准的对象中,哪一个会被首先收集。
  7.循环引用对象不会影响其被垃圾收集器收集。
  8.可以通过将对象的引用变量(reference variables,即句柄handles)初始化为null值,来暗示垃圾收集器来收集该对象。但此时,如果该对象连接有事件*(典型的 AWT组件),那它还是不可以被收集。所以在设一个引用变量为null值之前,应注意该引用变量指向的对象是否被监听,若有,要首先除去*,然后才可以赋空值。
  9.每一个对象都有一个finalize( )方法,这个方法是从Object类继承来的。
  10.finalize( )方法用来回收内存以外的系统资源,就像是文件处理器和网络连接器。该方法的调用顺序和用来调用该方法的对象的创建顺序是无关的。换句话说,书写程序时该方法的顺序和方法的实际调用顺序是不相干的。请注意这只是finalize( )方法的特点。
  11.每个对象只能调用finalize( )方法一次。如果在finalize( )方法执行时产生异常(exception),则该对象仍可以被垃圾收集器收集。
  12.垃圾收集器跟踪每一个对象,收集那些不可到达的对象(即该对象没有被程序的任何"活的部分"所调用),回收其占有的内存空间。但在进行垃圾收集的时候,垃圾收集器会调用finalize( )方法,通过让其他对象知道它的存在,而使不可到达的对象再次"复苏"为可到达的对象。既然每个对象只能调用一次finalize( )方法,所以每个对象也只可能"复苏"一次。
  13.finalize( )方法可以明确地被调用,但它却不能进行垃圾收集。
  14.finalize( )方法可以被重载(overload),但只有具备初始的finalize( )方法特点的方法才可以被垃圾收集器调用。
  15.子类的finalize( )方法可以明确地调用父类的finalize( )方法,作为该子类对象的最后一次适当的操作。但Java编译器却不认为这是一次覆盖操作(overriding),所以也不会对其调用进行检查。
  16.当finalize( )方法尚未被调用时,System. runFinalization( )方法可以用来调用finalize( )方法,并实现相同的效果,对无用对象进行垃圾收集。
  17.当一个方法执行完毕,其中的局部变量就会超出使用范围,此时可以被当作垃圾收集,但以后每当该方法再次被调用时,其中的局部变量便会被重新创建。
  18.Java语言使用了一种"标记交换区的垃圾收集算法"。该算法会遍历程序中每一个对象的句柄,为被引用的对象做标记,然后回收尚未做标记的对象。所谓遍历可以简单地理解为"检查每一个"。
  19.Java语言允许程序员为任何方法添加finalize( )方法,该方法会在垃圾收集器交换回收对象之前被调用。但不要过分依赖该方法对系统资源进行回收和再利用,因为该方法调用后的执行结果是不可预知的。
  通过以上对垃圾收集器特点的了解,你应该可以明确垃圾收集器的作用,和垃圾收集器判断一块内存空间是否无用的标准。简单地说,当你为一个对象赋值为null并且重新定向了该对象的引用者,此时该对象就符合垃圾收集器的收集标准。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑常用的系统是常见的电脑操作系统有哪些 电脑有哪些系统软件电脑都有哪些系统 csgo箱子开哪个性价比高-七种高性价比箱子详情介绍 word的空白页怎么删除不了word中空白页删不掉解决方法 word空白页怎么删除不了 删除不掉解决方法 word空白页怎么删除不了word中为什么空白页删不掉 word中删除空白页怎么删word空白页删除不掉咋办 表白两次她都说我们继续做朋友,我还有机会吗? 糖尿病人运动最佳方式 糖尿病的人要怎样运动 晚上睡觉喉咙痛是怎么回事 logo不同 字母不同 外观会侵权吗 电话QQ都拉黑请问手机通讯录里QQ能收到信息吗 1、使用Internet的FTP功能,可以___。 什么是垃圾回收?垃圾回收机制 正是JAVA与其他语言不同的如C/C++ 一到晚上嗓子疼,怎么回事 商标不一样,logo一样算侵权吗 使用因特网的FTP功能,可以实现文件的上传和下载? 对方是萍果6电话把我拉黑,QQ通讯录能收到短信吗 为什么老是晚上喉咙痛,白天不痛? 使用因特网的FTP功能,可以实现? QQ拉黑电话拉黑 qq通讯录发的信息对方能收到吗? 模仿网站就LOGO不同,其他素材都一样算侵权吗? 为什么每天晚上睡觉到半夜时,喉咙痛 java中垃圾回收机制的原理 手机号拉黑,用QQ手机通讯录发消息能接到吗 手机号被拉黑了,不是QQ好友可以用QQ通讯录发送消息吗?对方能收到吗?_百度问一问 什么是Java的垃圾回收机制?内部实现原理是什么? 不同行业可以申请同一个商标吗? 为什么每天晚上睡觉到半夜时,喉咙痛? 和别人商标之差几个字母算侵权吗?同行业 使用Internet的FTP功能,可以 ........(有选项) 晚上睡觉喉咙痛,怎么回事 用别人已注册的商标做公司LOGO算侵权吗? 利用internet的什么功能将自己的计算机连接到外地的计算机上存了操纵它并享受? java中的垃圾回收机制是怎样的? 手机被拉黑,qq拒收消息,在qq手机通讯录里发信息,对方会收到信息吗? 怎样算构成logo侵权案 Internet网络中FTP用于实现什么功能 我为什么夜里嗓子疼? flex垃圾回收机制是什么原理 天津身份证到期换证地点 对方手机和微信拉黑了,通讯录上QQ显示,离线留言,发信息对方能否收到 LOGO相似多少属于侵权 选择正确答案 Java垃圾回收机制是什么? 天津市南开区办理身份证的地方在哪,能不能跨区办,他们工作到几点 产品外形模仿人家的商标LOGO算侵权么? 对方把你电话号码和短信拉黑,用QQ通讯录能发信息过去吗? 12306网上购票可以使用哪些支付方式?