- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java内存回收策略分析
Java内存回收策略1019岳晓东QQ: 506388664TEL于C/C++的内存释放传统的C++/C等编程语言,需要程序员自己回收已经分配的内存。缺点:?程序员忘记及时回收内存,导致内存泄漏,降低系统性能。内存泄漏 : 也称作“存储渗漏”,用动态内存分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。?程序员错误地回收程序核心类库的内存,从而导致系统崩溃Java内存回收回收什么?当没有对象引用指向原先分配给某个对象的内存时,该内存遍成为垃圾。JVM的超级线程会自动释放该内存区。public void doSomething(){ Random random = new Random(); ……}1.垃圾回收器只回收不可再用的对象lpublic class Example{ public void doWithArray(int array){ //处理关于array的事情 } public static void main(String[] args){ int[] x = new int[]{1,2,3}; doWithArray(x); //此处进行许多与数组无关的操作 doSomething(); …… }}x 指向的空间就可能被提前释放,而不会导致空间乱用的现象x=null;但是null不是在什么情况下都能其作业起作用的请看代码2.垃圾回收只回收内存资源垃圾回收指挥回收对象所占用的内存空间,也就是使用new在堆上创建的对象try{ stream.close();}catch(Exception e){ System.out.println(“出现错误!”);}关于finalize在Object类中声明了这个方法:protected void finalize() throws Throwable 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除1.finalize调用的不确定性finalize执行的特点2.finalize调用的无顺序性3.finalize没有连锁性4.finalize方法的单次执行1.finalize方法执行的不确定性class Garbage{ protected void finalize(){ System.out.println(“finalize被调用!”); }} public class FinalizeInvocation { public static void main(String[] args) { for(int i=0;i10;i++){ new Garbage(); System.out.println(内存垃圾创建+i); } }}2.finalize调用的不确定性public static void gc()ps:我们调用System类下的方法来启动垃圾回收器,加快垃圾回收的进行(其实这个方式这是给垃圾回收器一个建议,而不是命令,所以就算调用了这个方法,也不能保证一定会执行垃圾回收)我们看到回收顺序是没什么规则的,而且每次回收的结果都有可能不同,这说明finalize的调用也是没有什么顺序的请看代码请看代码3.finalize没有连锁性再调用构造器的时候,会首先调用父类的构造器,然而在finalize方法中不会调用父类的finalize方法,所以,如果要在finalize中进行清理工作,那就必须手动调用父类的方法protected void finalize(){ clear(); super.finalize();}4.Finalize方法的单次执行如果垃圾回收器准备回收对象的内存空间,但在finalize中又将对象的应用赋值给了另外一个引用,这样这个被回收的对象就意外地“复活”了。请看代码Ps:垃圾回收机制堆内存碎片的清理Java内存回收的优点?垃圾回收机制可以很好的提升编程效率,在没有垃圾回收机制的时候,可能要花很多时间来解决一个难懂的存储器问题。在用java语言的时候,依靠垃圾回收机制可以大大缩短时间。?垃圾回收机制保存程序的完整性,垃圾回收机制是java安全性的策略的一个重要部分。谢谢观赏Make Presentation much more fun传统的C++/C等编程语言,需要程序员自己回收已经分配的内存。显示进行垃圾回收是一件比较困难的事情,因为程序员并不是总是只懂啊内存该何时被释放。当这个方法执行结束后,局部变量random会自动销毁,就再也都得不到Random对象的引用random,此时random之前指向的对象就称为垃圾内存,在必要的时候垃圾回收器就会对其进行回
文档评论(0)