|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。
我们晓得,很多程序计划言语都同意在程序运转期静态地分派内存空间。
分派内存的体例多种多样,取决于该种言语的语法布局。但不管是哪种言语的内存分派体例,最初都要前往所分派的内存块的肇端地点,即前往一个指针到内存块的首地点。
当已分派的内存空间不再必要时,换句话说当指向该内存块的句柄超越了利用局限的时分,该程序或其运转情况就应当接纳该内存空间,以节俭可贵的内存资本。
在C,C++或其他程序计划言语中,不管是对象仍是静态设置的资本或内存,都必需由程序员自行声明发生和接纳,不然个中的资本将损耗,形成资本的华侈乃至逝世机。但手工接纳内存常常是一项庞大而困难的事情。由于要事后断定占用的内存空间是不是应当被接纳长短常坚苦的!假如一段程序不克不及接纳内存空间,并且在程序运转时体系中又没有了能够分派的内存空间时,这段程序就只能溃散。一般,我们把分派进来后,却没法接纳的内存空间称为"内存渗漏体(MemoryLeaks)"。
以上这类程序计划的潜伏伤害性在Java如许以松散、平安著称的言语中是不同意的。可是Java言语既不克不及限定程序员编写程序的自在性,又不克不及把声明对象的部分往除(不然就不是面向对象的程序言语了),那末最好的办理举措就是从Java程序言语自己的特征动手。因而,Java手艺供应了一个体系级的线程(Thread),即渣滓搜集器线程(GarbageCollectionThread),来跟踪每块分派进来的内存空间,当Java假造机(JavaVirtualMachine)处于余暇轮回时,渣滓搜集器线程会主动反省每快分派进来的内存空间,然后主动接纳每快能够接纳的无用的内存块。
渣滓搜集器线程是一种低优先级的线程,在一个Java程序的性命周期中,它只要在内存余暇的时分才无机会运转。它无效地避免了内存渗漏体的呈现,并极年夜大概地节俭了可贵的内存资本。可是,经由过程Java假造机来实行渣滓搜集器的计划能够是多种多样的。
上面先容渣滓搜集器的特性和它的实行机制:
渣滓搜集器体系有本人的一套计划来判别哪一个内存块是应当被接纳的,哪一个是不切合请求暂不接纳的。渣滓搜集器在一个Java程序中的实行是主动的,不克不及强迫实行,即便程序员能明白地判别出有一块内存已无用了,是应当接纳的,程序员也不克不及强迫渣滓搜集器接纳该内存块。程序员独一能做的就是经由过程挪用System.gc办法来"倡议"实行渣滓搜集器,但其是不是能够实行,甚么时分实行却都是不成知的。这也是渣滓搜集器的最次要的弱点。固然相对它给程序员带来的伟大便利性而言,这个弱点是白璧微瑕的。
渣滓搜集器的次要特性有:
1.渣滓搜集器的事情方针是接纳已无用的对象的内存空间,从而制止内存渗漏体的发生,节俭内存资本,制止程序代码的溃散。
2.渣滓搜集器判别一个对象的内存空间是不是无用的尺度是:假如该对象不克不及再被程序中任何一个"举动的部分"所援用,此时我们就说,该对象的内存空间已无用。所谓"举动的部分",是指程序中某部分介入程序的挪用,正在实行过程当中,还没有实行终了。
3.渣滓搜集器线程固然是作为低优先级的线程运转,但在体系可用内存量太低的时分,它大概会突发地实行来抢救内存资本。固然其实行与否也是不成预知的。
4.渣滓搜集器不成以被强迫实行,但程序员能够经由过程挪用System.gc办法来倡议实行渣滓搜集器。
5.不克不及包管一个无用的对象必定会被渣滓搜集器搜集,也不克不及包管渣滓搜集器在一段Java言语代码中必定会实行。因而在程序实行过程当中被分派进来的内存空间大概会一向保存到该程序实行终了,除非该空间被从头分派或被其他办法接纳。因而可知,完整完全地根尽内存渗漏体的发生也是不成能的。可是请不要健忘,Java的渣滓搜集器究竟使程序员从手工接纳内存空间的沉重事情中摆脱了出来。假想一个程序员要用C或C++来编写一段10万行语句的代码,那末他必定会充实体味到Java的渣滓搜集器的长处!
6.一样没有举措预知在一组均切合渣滓搜集器搜集尺度的对象中,哪个会被起首搜集。
7.轮回援用对象不会影响其被渣滓搜集器搜集。
8.能够经由过程将对象的援用变量(referencevariables,即句柄handles)初始化为null值,来表示渣滓搜集器来搜集该对象。但此时,假如该对象毗连有事务监听器(典范的AWT组件),那它仍是不成以被搜集。以是在设一个援用变量为null值之前,应注重该援用变量指向的对象是不是被监听,如有,要起首撤除监听器,然后才能够赋空值。
9.每个对象都有一个finalize()办法,这个办法是从Object类承继来的。
10.finalize()办法用往返收内存之外的体系资本,就像是文件处置器和收集毗连器。该办法的挪用按次和用来挪用该办法的对象的创立按次是有关的。换句话说,誊写程序时该办法的按次和办法的实践挪用按次是不干系的。请注重这只是finalize()办法的特性。
11.每一个对象只能挪用finalize()办法一次。假如在finalize()办法实行时发生非常(exception),则该对象仍能够被渣滓搜集器搜集。
12.渣滓搜集器跟踪每个对象,搜集那些不成抵达的对象(即该对象没有被程序的任何"活的部分"所挪用),接纳其占据的内存空间。但在举行渣滓搜集的时分,渣滓搜集器会挪用finalize()办法,经由过程让其他对象晓得它的存在,而使不成抵达的对象再次"苏醒"为可抵达的对象。既然每一个对象只能挪用一次finalize()办法,以是每一个对象也只大概"苏醒"一次。
<p>
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。 |
|