Java ÀíÂÛºÍʵ¼ù: ÓÃÈíÒýÓÃ×èÖ¹ÄÚ´æÐ¹Â© 2
ÔÚ Java ÀíÂÛºÍʵ¼ù µÄ ǰһÆÚÎÄÕ ÖУ¬Java™ Çå½à¹¤³Ìʦ Brian Goetz ̽¾¿ÁËÈõÒýÓã¨weak references£©£¬ËüÈÃÄú¾¯¸æÀ¬»øÊÕ¼¯Æ÷£¬ÄúÏëҪά»¤Ò»¸ö¶ÔÏóµÄÒýÓ㬶ø²»»á×èÖ¹¸Ã¶ÔÏó±»À¬»øÊÕ¼¯¡£ÔÚ±¾ÆÚÎÄÕÂÖУ¬Ëû½«½âÊÍ Reference ¶ÔÏóµÄÁíÍâÒ»ÖÖÐÎʽ£¬¼´ÈíÒýÓã¨soft references£©£¬ÓÃÓÚ°ïÖúÀ¬»øÊÕ¼¯Æ÷¹ÜÀíÄÚ´æÊ¹ÓúÍÏû³ýDZÔÚµÄÄÚ´æÐ¹Â©¡£
À¬»øÊÕ¼¯¿ÉÒÔʹ Java ³ÌÐò²»»á³öÏÖÄÚ´æÐ¹Â©£¬ÖÁÉÙ¶ÔÓڱȽÏÏÁÕµÄ “ÄÚ´æÐ¹Â©” ¶¨ÒåÀ´ËµÈç´Ë£¬µ«ÊÇÕâ²¢²»Òâζ×ÅÎÒÃÇ¿ÉÒÔÍêÈ«ºöÂÔ Java ³ÌÐòÖеĶÔÏóÉú´æÆÚ£¨lifetime£©ÎÊÌâ¡£µ±ÎÒÃÇûÓжԶÔÏóÉúÃüÖÜÆÚ£¨lifecycle£©ÒýÆð×ã¹»µÄÖØÊÓ»òÕßÆÆ»µÁ˹ÜÀí¶ÔÏóÉúÃüÖÜÆÚµÄ±ê×¼»úÖÆÊ±£¬Java ³ÌÐòÖÐͨ³£¾Í»á³öÏÖÄÚ´æÐ¹Â©¡£ÀýÈ磬ÉÏÒ»´Î ÎÒÃÇ¿´µ½ÁË£¬²»ÄÜ»®·Ö¶ÔÏóµÄÉúÃüÖÜÆÚ»áµ¼Ö£¬ÔÚÊÔͼ½«ÔªÊý¾Ý¹ØÁªµ½Ë²Ê±¶ÔÏóʱ³öÏÖÒâÍâµÄ¶ÔÏó±£³Ö¡£»¹ÓÐһЩÆäËûµÄÇé¿ö¿ÉÒÔÀàËÆµØºöÂÔ»òÆÆ»µ¶ÔÏóÉúÃüÖÜÆÚ¹ÜÀí£¬²¢µ¼ÖÂÄÚ´æÐ¹Â©¡£
¶ÔÏóÓÎÀë
Ò»ÖÖÐÎʽµÄÄÚ´æÐ¹Â©ÓÐʱºò½Ð×ö¶ÔÏóÓÎÀ루object loitering£©£¬ÊÇͨ¹ýÇåµ¥ 1 ÖÐµÄ LeakyChecksum ÀàÀ´ËµÃ÷µÄ£¬Çåµ¥ 1 ÖÐÓÐÒ»¸ö getFileChecksum() ·½·¨ÓÃÓÚ¼ÆËãÎļþÄÚÈݵÄУÑéºÍ¡£getFileChecksum() ·½·¨½«ÎļþÄÚÈݶÁÈ¡µ½»º³åÇøÖÐÒÔ¼ÆËãУÑéºÍ¡£Ò»ÖÖ¸ü¼ÓÖ±¹ÛµÄʵÏÖ¼òµ¥µØ½«»º³åÇø×÷Ϊ getFileChecksum() Öеı¾µØ±äÁ¿·ÖÅ䣬µ«ÊǸð汾±ÈÄÇÑùµÄ°æ±¾¸ü¼Ó “´ÏÃ÷”£¬²»Êǽ«»º³åÇø»º´æÔÚʵÀý×Ö¶ÎÖÐÒÔ¼õÉÙÄÚ´æ churn¡£¸Ã “ÓÅ»¯”ͨ³£²»´øÀ´Ô¤ÆÚµÄºÃ´¦£»¶ÔÏó·ÖÅä±ÈºÜ¶àÈËÆÚÍûµÄ¸ü±ãÒË¡££¨»¹Òª×¢Ò⣬½«»º³åÇø´Ó±¾µØ±äÁ¿ÌáÉýµ½ÊµÀý±äÁ¿£¬Ê¹µÃÀàÈô²»´øÓи½¼ÓµÄͬ²½£¬¾Í²»ÔÙÊÇḬ̈߳²È«µÄÁË¡£Ö±¹ÛµÄʵÏÖ²»ÐèÒª½« getFileChecksum() ÉùÃ÷Ϊ synchronized£¬²¢ÇÒ»áÔÚͬʱµ÷ÓÃʱÌṩ¸üºÃµÄ¿ÉÉìËõÐÔ¡££©
Çåµ¥ 1. չʾ “¶ÔÏóÓÎÀë” µÄÀà
// BAD CODE - DO NOT EMULATE
public class LeakyChecksum {
private byte[] byteArray;
public synchronized int getFileChecksum(String fileName) {
int len = getFileSize(fileName);
if (byteArray == null || byteArray.length < len)
byteArray = new byte[len];
readFileContents(fileName, byteArray);
// calculate checksum and return it
}
}
Õâ¸öÀà´æÔںܶàµÄÎÊÌ⣬µ«ÊÇÎÒÃÇ×ÅÖØÀ´¿´ÄÚ´æÐ¹Â©¡£»º´æ»º³åÇøµÄ¾ö¶¨ºÜ¿ÉÄÜÊ
Ïà¹ØÎĵµ£º
ÀàÊǹ㷺µÄ¸ÅÄ±íʾһ¸öÓй²Í¬ÐÔÖʵÄȺÌå¡£È磺ÈËÀà¡£
´úÂ룺
// ÉùÃ÷Ò»¸öÀà“Human”
class Human{
priv ......
ÓÉÓÚ¹«Ë¾ÒµÎñÔö³¤£¬ÏÖ¼±ÐèÕÐÆ¸·ûºÏÈçÏÂÌõ¼þJAVA¸ß¼¶Èí¼þ¹¤³Ìʦ Èô¸ÉÃû
1¡¢¾ßÓÐÁ¼ºÃµÄjava¼¼Êõ֪ʶºÍ¾Ñ飻
2¡¢¾ß±¸Á¼ºÃµÄ½â¾öÎÊÌâµÄÄÜÁ¦ÒÔ¼°³öÉ«µÄÍŶӺÏ×÷ÄÜÁ¦£»
3¡¢ÊìϤJ2EE¼Ü¹¹ºÍ¿ª·¢Ä£Ê½£¬ÊìϤMVCÉè¼ÆÄ£Ê½£»
4¡¢ÊìϤhibernate¡¢struts2¡¢spring£»
5¡¢Äܰ´Õչ淶µÄÈí¼þ¿ª·¢Á÷³Ì£¬Íê³ÉÈí¼þµÄÐèÇó¡¢Éè¼Æ¡¢±àÂëº ......
ÔÚJava
ÓïÑÔÖУ¬ abstract class ºÍinterface
ÊÇÖ§³Ö³éÏóÀà
¶¨
ÒåµÄÁ½ÖÖ»úÖÆ¡£ÕýÊÇÓÉÓÚÕâÁ½ÖÖ»úÖÆµÄ´æÔÚ£¬²Å¸³ÓèÁËJavaÇ¿´óµÄ ÃæÏò¶ÔÏóÄÜÁ¦¡£abstract
classºÍinterfaceÖ®¼äÔÚ¶ÔÓÚ³éÏóÀඨÒåµÄÖ§³Ö·½Ãæ¾ßÓкܴóµÄÏàËÆÐÔ£¬ÉõÖÁ¿ÉÒÔÏà»¥Ìæ»»£¬Òò´ËºÜ¶à¿ª·¢ÕßÔÚ½ø
ÐгéÏóÀඨÒåʱ¶ÔÓÚabstract
classºÍinterfaceµÄÑ¡Ô ......
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.isDir ......