ËäÈ»Óà Java™ ÓïÑÔ±àдµÄ³ÌÐòÔÚÀíÂÛÉÏÊDz»»á³öÏÖ“ÄÚ´æÐ¹Â©”µÄ£¬µ«ÊÇÓÐʱ¶ÔÏóÔÚ²»ÔÙ×÷Ϊ³ÌÐòµÄÂ߼״̬µÄÒ»²¿·ÖÖ®ºóÈÔÈ»²»±»À¬»øÊÕ¼¯¡£±¾Ô£¬¸ºÔð±£ÕÏÓ¦ÓóÌÐò½¡¿µµÄ¹¤³Ìʦ Brian Goetz ̽ÌÖÁËÎÞÒâʶµÄ¶ÔÏó±£ÁôµÄ³£¼ûÔÒò£¬²¢Õ¹Ê¾ÁËÈçºÎÓÃÈõÒýÓöÂסй©¡£
ÒªÈÃÀ¬»øÊÕ¼¯£¨GC£©»ØÊÕ³ÌÐò²»ÔÙʹÓõĶÔÏ󣬶ÔÏóµÄÂß¼ ÉúÃüÖÜÆÚ£¨Ó¦ÓóÌÐòʹÓÃËüµÄʱ¼ä£©ºÍ¶Ô¸Ã¶ÔÏóÓµÓеÄÒýÓõÄʵ¼Ê ÉúÃüÖÜÆÚ±ØÐëÊÇÏàͬµÄ¡£ÔÚ´ó¶àÊýʱºò£¬ºÃµÄÈí¼þ¹¤³Ì¼¼Êõ±£Ö¤ÕâÊÇ×Ô¶¯ÊµÏֵ쬲»ÓÃÎÒÃǶԶÔÏóÉúÃüÖÜÆÚÎÊÌ⻨·Ñ¹ý¶àÐÄ˼¡£µ«ÊÇż¶ûÎÒÃǻᴴ½¨Ò»¸öÒýÓã¬ËüÔÚÄÚ´æÖаüº¬¶ÔÏóµÄʱ¼ä±ÈÎÒÃÇÔ¤ÆÚµÄÒª³¤µÃ¶à£¬ÕâÖÖÇé¿ö³ÆÎªÎÞÒâʶµÄ¶ÔÏó±£Áô£¨unintentional object retention£©¡£
È«¾Ö Map Ôì³ÉµÄÄÚ´æÐ¹Â©
ÎÞÒâʶ¶ÔÏó±£Áô×î³£¼ûµÄÔÒòÊÇʹÓà Map ½«ÔªÊý¾ÝÓëÁÙʱ¶ÔÏó£¨transient object£©Ïà¹ØÁª¡£¼Ù¶¨Ò»¸ö¶ÔÏó¾ßÓÐÖеÈÉúÃüÖÜÆÚ£¬±È·ÖÅäËüµÄÄǸö·½·¨µ÷ÓõÄÉúÃüÖÜÆÚ³¤£¬µ«ÊDZÈÓ¦ÓóÌÐòµÄÉúÃüÖÜÆÚ¶Ì£¬Èç¿Í»§»úµÄÌ×½Ó×ÖÁ¬½Ó¡£ÐèÒª½«Ò»Ð©ÔªÊý¾ÝÓëÕâ¸öÌ×½Ó×Ö¹ØÁª£¬ÈçÉú³ÉÁ¬½ÓµÄÓû§µÄ±êʶ¡£ÔÚ´´½¨ Socket ʱÊDz»ÖªµÀÕâЩÐÅÏ¢µÄ£¬²¢ÇÒ²»Äܽ«Êý¾ÝÌí¼Óµ½ Socket ¶ÔÏóÉÏ£¬ÒòΪ²»ÄÜ¿ØÖÆ Socket Àà»ò ......
import java.io.*;
public class CheckVirusFile
{
int virusCount=0,del_count=0,spe_count=0,nameCount=0;
//ÓõݹéµÄ·½·¨¼ì²éFileÀàÐ͵IJÎÊýÊÇÎļþ»¹ÊÇĿ¼
public void judgeDir(File virFile)
{
if(!virFile.isDirectory())
ScanVirus(virFile);
else
{
File fileVirus[]=virFile.listFiles();
for(int i=0;i<fileVirus.length;i++)
judgeDir(fileVirus[i]);
}
}
//¶ÔÎļþ½øÐÐɨÃ裬ÅжÏÊÇ·ñº¬ÓÐ"danger"×Ö¶Î
public void ScanVirus(File virusFile)
{
System.out.println("ÕýÔÚɨÃè"+virusFile+"......");
boolean isVirus=false;
if(virusFile.getName().endsWith(".bat"))//Èç¹ûÎļþÒÔ.batΪºó׺£¬Ö±½Óɾ³ý
{
virusCount++;
......
ÔÚ Java ÀíÂÛºÍʵ¼ù µÄ ǰһÆÚÎÄÕ ÖУ¬Java™ Çå½à¹¤³Ìʦ Brian Goetz ̽¾¿ÁËÈõÒýÓã¨weak references£©£¬ËüÈÃÄú¾¯¸æÀ¬»øÊÕ¼¯Æ÷£¬ÄúÏëҪά»¤Ò»¸ö¶ÔÏóµÄÒýÓ㬶ø²»»á×èÖ¹¸Ã¶ÔÏó±»À¬»øÊÕ¼¯¡£ÔÚ±¾ÆÚÎÄÕÂÖУ¬Ëû½«½âÊÍ Reference ¶ÔÏóµÄÁíÍâÒ»ÖÖÐÎʽ£¬¼´ÈíÒýÓã¨soft references£©£¬ÓÃÓÚ°ïÖúÀ¬»øÊÕ¼¯Æ÷¹ÜÀíÄÚ´æÊ¹ÓúÍÏû³ýDZÔÚµÄÄÚ´æÐ¹Â©¡£
À¬»øÊÕ¼¯¿ÉÒÔʹ Java ³ÌÐò²»»á³öÏÖÄÚ´æÐ¹Â©£¬ÖÁÉÙ¶ÔÓڱȽÏÏÁÕµÄ “ÄÚ´æÐ¹Â©” ¶¨ÒåÀ´ËµÈç´Ë£¬µ«ÊÇÕâ²¢²»Òâζ×ÅÎÒÃÇ¿ÉÒÔÍêÈ«ºöÂÔ Java ³ÌÐòÖеĶÔÏóÉú´æÆÚ£¨lifetime£©ÎÊÌâ¡£µ±ÎÒÃÇûÓжԶÔÏóÉúÃüÖÜÆÚ£¨lifecycle£©ÒýÆð×ã¹»µÄÖØÊÓ»òÕßÆÆ»µÁ˹ÜÀí¶ÔÏóÉúÃüÖÜÆÚµÄ±ê×¼»úÖÆÊ±£¬Java ³ÌÐòÖÐͨ³£¾Í»á³öÏÖÄÚ´æÐ¹Â©¡£ÀýÈ磬ÉÏÒ»´Î ÎÒÃÇ¿´µ½ÁË£¬²»ÄÜ»®·Ö¶ÔÏóµÄÉúÃüÖÜÆÚ»áµ¼Ö£¬ÔÚÊÔͼ½«ÔªÊý¾Ý¹ØÁªµ½Ë²Ê±¶ÔÏóʱ³öÏÖÒâÍâµÄ¶ÔÏó±£³Ö¡£»¹ÓÐһЩÆäËûµÄÇé¿ö¿ÉÒÔÀàËÆµØºöÂÔ»òÆÆ»µ¶ÔÏóÉúÃüÖÜÆÚ¹ÜÀí£¬²¢µ¼ÖÂÄÚ´æÐ¹Â©¡£
¶ÔÏóÓÎÀë
Ò»ÖÖÐÎʽµÄÄÚ´æÐ¹Â©ÓÐʱºò½Ð×ö¶ÔÏóÓÎÀ루object loitering£©£¬ÊÇͨ¹ýÇåµ¥ 1 ÖÐµÄ LeakyChecksum ÀàÀ´ËµÃ÷µÄ£¬Çåµ¥ 1 ÖÐÓÐÒ»¸ö getFileChecksum() ·½·¨ÓÃÓÚ¼ÆËãÎļþÄÚÈݵÄУÑéºÍ¡£getFileChecksum() ·½·¨½«ÎļþÄÚÈÝ ......
ÔÚJavaÖУ¬¶¨Ò庯Êý»òÕß±äÁ¿µÄʱºò£¬¶Ôº¯Êý¡¢±äÁ¿¶¼ÓÐÒ»¸ö·ÃÎÊȨÏÞÎÊÌâ¡£
¶ÔÓÚº¯ÊýÀ´Ëµ£¬±ÈÈ磺
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void apublic() {
//public º¯Êý
}
private void aprivate() {
//private º¯Êý
}
void adefault() {
//default º¯Êý
}
protected void aprotected() {
//protected º¯Êý
}
}
ÔÚµ÷ÓÃÕâЩº¯ÊýµÄʱºò£¬Ö»ÓÐ public º¯Êý£¬¿ÉÒÔ±»Óë class test ²»Í¬°üµÄÀà½øÐе÷Ó᣶ø default ºÍ protectedÔòÖ»ÄÜÔÚͬ°üÄÚµÄÀàÖ®¼äµ÷Óá£privateµÄ·ÃÎÊȨÏÞ¸üС£ºÖ»ÄÜÔÚÀàµÄÄÚ²¿½øÐзÃÎÊ¡£
°´Àí˵£¬default Óë protectedµÄ·ÃÎÊȨÏÞ£¬²»ÄÜÊÇÒ»ÑùµÄ£¬µ«ÎÒÏÖÔÚûÓиÐÊܵ½Á½ÕߵIJ»Í¬£¬ÎÒÓõÄʱºò£¬ÈÏΪÁ½ÕßµÄȨÏÞÊÇÒ»ÑùµÄ¡£
¶ÔÓÚ±äÁ¿À´Ëµ£¬Ó뺯ÊýÖеÄËĸöȨÏÞÀàËÆ¡£
ÓдíÎó»¹Íû¶à¶àÖ¸½Ì¡£ ......
ÔÚDWRÖÐÐèÒªÓõ½session,requestµÈÕâЩ¶«Î÷µÄʱºò£¬¿ÉÒÔÓÃÒÔÏ·½·¨»ñÈ¡:
1. ʹÓÃDWRµÄAPI (ºÜ¶àÈ˶¼²»ÍƼöÕâÖÖ×ö·¨,¾²âÊÔ,ʹÓÃÆðÀ´¿Ï¶¨Ã»ÎÊÌâ)
import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
WebContext ctx = WebContextFactory.get();
ctx.getSession()
ctx.getHttpServletRequest()
...
2. ÔÚJavaµÄ·þÎñ·½·¨Öж¨ÒåÕâЩÀàÐ͵IJÎÊý,ÈÃDWR×Ô¶¯´«ÈëÏàÓ¦µÄ¶ÔÏó£º
HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig.
ʾÀýÈçÏÂ:
Java¶Ë¶¨Òå·½·¨: saveOrder(String id, String name, HttpSession session)
Javascriptµ÷ÓÃ: OrderService.saveOrder(jsID,jsName,callBack)
×¢Òâ,ÕâÀï²»ÐèÒª´«ÈësessionÕâ¸ö²ÎÊý,DWR»á×Ô¶¯´«Èë,ÔÚJava¶Ë¿ÉÒÔÖ±½ÓʹÓÃ. ......
DWRʹÓÃÆª
1¡¢µ÷ÓÃûÓзµ»ØÖµºÍ²ÎÊýµÄJava·½·¨
1.1¡¢dwr.xmlµÄÅäÖÃ
Xml´úÂë
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
</dwr>
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
</dwr>
<allow> ±êÇ©ÖаüÀ¨¿ÉÒÔ±©Â¶¸ø javascript ·ÃÎʵĶ«Î÷¡£
<create> ±êÇ©ÖÐÖ¸¶¨ javascript ÖпÉÒÔ·ÃÎ浀 java À࣬²¢¶¨Òå DWR Ó¦µ±ÈçºÎ»ñµÃÒª½øÐÐÔ¶³ÌµÄÀàµÄʵÀý¡£ creator="new" ÊôÐÔÖ¸¶¨ java ÀàʵÀýµÄÉ ......