java具有垃圾自动回收,java可以手动触发垃圾回收

  java具有垃圾自动回收,java可以手动触发垃圾回收

  如何解决写爬虫IP受阻的问题?立即使用。

  详解Java自动垃圾回收教程

  如果在Java编程中使用不当,即使是最大的内存量也会耗尽。本文将向你介绍其中的一个:如何节省Java内存空间,让Java程序自动回收垃圾。

  要点一、认识Java的自动垃圾回收

  垃圾收集是Java语言的一大特色,它以牺牲性能为代价来方便编程。而垃圾在这里只是无用的物件。但是C需要程序员自己写析构函数来释放内存,比较麻烦,而且可能会因为遗忘而导致内存泄漏。

  Java语言的内存分配管理是由JVM的内部机制决定的。程序员可能不关心他们的处理。

  要点二、垃圾回收的原理和意义

  Java虚拟机里有个东西叫垃圾收集器。其实这个东西可能不存在,也可能不集成到JVM里,但这都没关系。我们仍然可以称之为垃圾收集器。

  垃圾收集器的作用是发现并回收(清理)无用的对象。以便JVM可以更有效地使用内存。

  垃圾收集器的运行时间是不确定的,由JVM决定,在运行过程中是间歇执行的。虽然可以通过System.gc()强制进行垃圾收集,但是不能保证发出这个命令后JVM会立即响应,但是经验表明,在发出命令后的短时间内就会执行您的请求。JVM通常会在感觉内存不足时执行垃圾收集。

  过于频繁的垃圾收集会导致性能下降,过于稀疏的垃圾收集会导致内存不足。这个JVM会把它控制到最好,不用担心程序员。但是有些程序会在短时间内吃掉大量内存,这些恐怖的对象很快就会被用完。此时,可能需要强制垃圾返回命令,这对于拥有更多可用的物理内存是必要的。

  从上面我们知道,无用的物体就是垃圾。准确地说,当没有线程访问一个对象时,它就有资格进行垃圾收集。

  对于字符串,有一个字符串池,这超出了本文的范围。字符串池中的垃圾回收和算法与这里讨论的垃圾回收完全不同。但是不得不说,字符串的随意拼接往往会导致性能的大幅下降,尤其是在庞大的循环语句中,会让程序慢慢自杀。这也是很多Java程序员常犯的错误。

  由于字符串是一个池,是用来缓冲的,为了有更高的命中率,垃圾收集的频率可能会比JVM对象垃圾收集器低很多。

  垃圾收集器唯一能做的就是尽可能保证可用内存的使用效率,让可用内存得到高效的管理。程序员可以影响垃圾收集的执行,但他们无法控制它。

  要点三、通过编程影响垃圾回收

  虽然程序员无法控制JVM的垃圾收集机制。但可以通过编程来影响,影响的方法是让对象满足垃圾收集条件。

  分别有几种:

  1、将无用对象赋值为null.

  2、重新为引用变量赋值。比如:

  人p=新人( AAA );

  p=新人( BBB );这样,新的Person(aaa )对象就是垃圾,——有资格进行垃圾回收。

  3、让相互联系的对象称为“岛”对象

  人p1=新人( AAA );

  Person p2=新人( BBB );

  人员p3=新人( CCC );

  p1=p2

  p2=p3

  p3=p1

  p1=空;

  p2=空;

  p3=空;p1,p2,p3设置null之前,都是三角恋。分别设为null,三角恋依然存在,但是三个变量不再使用。三个人物形成孤岛,最后死在堆上,——被垃圾收集。

  4、强制的垃圾回收System.gc()

  其实这里的强制是程序员的意愿和建议,什么时候执行由JVM的垃圾收集器说了算。

  调用垃圾回收并不一定保证可以从内存中删除未使用的对象。

  唯一的保证是,当内存中的情况很少时,垃圾收集器会在程序抛出OutofMemaryException之前运行一次。

  感谢您的阅读,希望您能从中获益良多。

  本文转自:http://community.itbbs.cn/thread/17817/

  推荐教程:《java视频教程》以上是Java自动垃圾收集教程的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: