仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1995|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA教程之Garbage Collection

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:55:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。3)GarbageCollection
Statethebehaviorthatisguaranteedbythegarbagecollectionsystemandwritecodethatexplicitlymakesobjectseligibleforcollection.
1.Garbagecollectionisamechanismforreclaimingmemoryfromobjectsthatarenolongerinuse,andmakingthememoryavailablefornewobjects.
2.Anobjectbeingnolongerinusemeansthatitcan’tbereferencedbyany‘active’partoftheprogram.
3.Garbagecollectionrunsinalowprioritythread.Itmaykickinwhenmemoryistoolow.Noguarantee.
4.It’snotpossibletoforcegarbagecollection.InvokingSystem.gcmaystartgarbagecollectionprocess.
5.Therearenoguaranteesthattheobjectsnolongerinusewillbegarbagecollectedandtheirfinalizersexecutedatall.gcmightnotevenberuniftheprogramexecutiondoesnotwarrantit.Thusanymemoryallocatedduringprogramexecutionmightremainallocatedafterprogramtermination,unlessreclaimedbytheOSorbyothermeans.
6.Therearealsonoguaranteesontheorderinwhichtheobjectswillbegarbagecollectedorontheorderinwhichthefinalizersarecalled.
7.Circularreferencesdonotpreventobjectsfrombeinggarbagecollected.
8.Wecansetthereferencevariablestonull,hintingthegctogarbagecollecttheobjectsreferredbythevariables.Evenifwedothat,theobjectmaynotbegc-edifit’sattachedtoalistener.(TypicalincaseofAWTcomponents)Remembertoremovethelistenerfirst.
9.Allobjectshaveafinalizemethod.ItisinheritedfromtheObjectclass.
10.finalizemethodisusedtoreleasesystemresourcesotherthanmemory.(suchasfilehandlesandnetworkconnections)Theorderinwhichfinalizemethodsarecalledmaynotreflecttheorderinwhichobjectsarecreated.Don’trelyonit.Thisisthesignatureofthefinalizemethod.
protectedvoidfinalize()throwsThrowable{}
Inthedescendentsthismethodcanbeprotectedorpublic.Descendentscanrestricttheexceptionlistthatcanbethrownbythismethod.
11.finalizeiscalledonlyonceforanobject.Ifanyexceptionisthrowninfinalize,theobjectisstilleligibleforgarbagecollection(atthediscretionofgc)
12.gckeepstrackofunreachableobjectsandgarbage-collectsthem,butanunreachableobjectcanbecomereachableagainbylettingknowotherobjectsofitsexistencefromitsfinalizemethod(whencalledbygc).This‘resurrection’canbedoneonlyonce,sincefinalizeiscalledonlyoneforanobject.
13.finalizecanbecalledexplicitly,butitdoesnotgarbagecollecttheobject.
14.finalizecanbeoverloaded,butonlythemethodwithoriginalfinalizesignaturewillbecalledbygc.
15.finalizeisnotimplicitlychained.Afinalizemethodinsub-classshouldcallfinalizeinsuperclassexplicitlyasitslastactionforproperfunctioning.Butcompilerdoesn’tenforcethischeck.
16.System.runFinalizationcanbeusedtorunthefinalizers(whichhavenotbeenexecutedbefore)fortheobjectseligibleforgarbagecollection.
17.Localvariablesinmethodsgooutofscopewhenthemethodexits.Atthispointthemethodsareeligibleforgarbagecollection.Eachtimethemethodcomesintoscopethelocalvariablesarere-created.
18.Javausesa"marksweepgarbagecollectionalgorithm,whichtraversesalltheobjectreferences,markinganyobjectsthatarereferredtoandthengarbagecollectinganyobjectsthatareunmarked.
19.Javaallowsyoutoaddafinalize()methodtoanyclass.Thefinalize()methodwillbecalledbeforethegarbagecollectorsweepsawaytheobject.Inpractice,donotrelyonthefinalizemethodforrecyclinganyresourcesthatareinshortsupply-yousimplycannotknowwhenthismethodwillbecalled.

Intheexampointofview:
Youmustbeabletoidentifywhenanobjectisavailableforgc-youhaveeithersetittonulloryou
have"redirected"thevariablethatwasoriginallyreferringtoit,sothatitnowreferstoadifferent
object.
ifyouhaveareferencetoanobjectsay,AandthenyoupassAasanargumenttosomeconstructor-
newobj(A);-thenevenifyounullyourreference-A=null;-youcantsaythatAisavailablefor
gc.Sojustfollowthereferencesandwhentheydroptozeroyouknowitseligible/availableforgc,
notthatitwillhappen.

eg,
1.obj=newJo();
2.obj.doSomething();
3.obj=newJo();//Sameasobj=null;
4.obj.doSomething();

Objecta=newObject();
Objecta=null;//Nowtheobjectcreatedin1stlineisavailableforgc
Objecta=newObject();
a=newObject();//same.
//Noworiginalobjectcreatedinline1isavailableforgcandanew
objectisnowouttherereferencedby"a".

Aclassa=newAclass();//Object1
Aclassb=newAclass();//Object2
Aclassc=newAclass();//Object3
a=b;//nowwehavenovalidobjectreferencetoobject"a"anditwillbe
//garbagecollectedsometimeafterthisstatement.Butwhen?......
a=c;
c=null;//nogarbagecollectionwillbeeligiblesince
//"a"stillreferstoObject3
a=null;//nowobject"c"iseligibleforgcsinceitalwayshadavalidreference.
//Should"b"gooutofscope;thenwewouldpossiblyhaveeligibilityforgc.
//theremightstillbeotherreferencestoobject"b"preventingthecollection.

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 12:12:26 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
透明 该用户已被删除
板凳
发表于 2015-1-21 11:17:07 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
飘灵儿 该用户已被删除
地板
发表于 2015-1-25 08:48:59 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
若天明 该用户已被删除
5#
发表于 2015-2-2 17:29:41 来自手机 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
谁可相欹 该用户已被删除
6#
发表于 2015-2-4 04:05:38 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
柔情似水 该用户已被删除
7#
发表于 2015-2-6 15:41:47 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
海妖 该用户已被删除
8#
发表于 2015-2-16 22:23:51 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
兰色精灵 该用户已被删除
9#
发表于 2015-3-5 11:03:03 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-7 15:02:53 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
活着的死人 该用户已被删除
11#
发表于 2015-3-8 10:45:33 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
admin 该用户已被删除
12#
发表于 2015-3-15 21:27:01 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
简单生活 该用户已被删除
13#
发表于 2015-3-17 00:07:52 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
莫相离 该用户已被删除
14#
发表于 2015-3-19 04:45:19 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
灵魂腐蚀 该用户已被删除
15#
发表于 2015-3-27 06:09:59 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
再现理想 该用户已被删除
16#
发表于 2015-3-27 06:10:01 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
深爱那片海 该用户已被删除
17#
发表于 2015-3-31 18:51:22 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
18#
发表于 2015-4-2 14:01:23 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
若相依 该用户已被删除
19#
发表于 2015-4-11 20:50:16 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
蒙在股里 该用户已被删除
20#
发表于 2015-4-21 16:30:41 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 16:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表