JavaºÍÆäËûÓïÑÔ²»Í¬µÄÊÇ£¬JavaÊÇÔËÐÐÓÚJavaÐéÄâ»ú(JVM)¡£Õâ¾ÍÒâζ×űàÒëºóµÄ´úÂëÊÇÒÔÒ»ÖÖºÍÆ½Ì¨Î޹صĸñʽ±£´æµÄ£¬¶ø²»ÊÇijÖÖÌØ¶¨µÄ»úÆ÷ÉÏÔËÐеĸñʽ¡£ÕâÖÖ¸ñʽºÍ´«Í³µÄ¿ÉÖ´ÐдúÂë¸ñʽÓкܶàÖØÒªµÄÇø±ð¡£¾ßÌåÀ´Ëµ£¬²»Í¬ÓÚC»òÕߣÃ++³ÌÐò£¬Java³ÌÐò²»ÊÇÒ»¸ö¶ÀÁ¢µÄ¿ÉÖ´ÐÐÎļþ£¬¶øÊÇÓɺܶà·Ö¿ªµÄÀàÎļþ×é³É£¬Ã¿¸öÀàÎļþ¶ÔÓ¦Ò»¸öJavaÀà¡£ ÁíÍ⣬ÕâЩÀàÎļþ²¢²»ÊÇÂíÉϼÓÔØµ½Äڴ棬¶øÊǵ±³ÌÐòÐèÒªµÄʱºò²Å¼ÓÔØ¡£ Àà¼ÓÔØÆ÷¾ÍÊÇJavaÐéÄâ»úÖÐÓÃÀ´°ÑÀà¼ÓÔØµ½ÄÚ´æµÄ¹¤¾ß¡£¶øÇÒ£¬JavaÀà¼ÓÔØÆ÷Ò²ÊÇÓÃJavaʵÏֵġ£ÕâÑùÄã¾Í²»ÐèÒª¶ÔJavaÐéÄâ»úÓÐÉîÈëµÄÀí½â¾Í¿ÉÒÔºÜÈÝÒ×´´½¨×Ô¼ºµÄÀà¼ÓÔØÆ÷ÁË¡£
javaÀà¼ÓÔØÆ÷ :
javaÖÐĬÈÏÓÐÈýÖÖÀà¼ÓÔØÆ÷£ºÒýµ¼Àà¼ÓÔØÆ÷£¬À©Õ¹Àà¼ÓÔØÆ÷£¬ÏµÍ³Àà¼ÓÔØÆ÷(Ò²½ÐÓ¦ÓÃÀà¼ÓÔØÆ÷)
Àà¼ÓÔØÆ÷ÊÇJava×îÇ¿´óµÄÌØÕ÷Ö®Ò»¡£µ«ÊÇ¿ª·¢Õß³£³£Íü¼ÇÀà¼ÓÔØ×é¼þ¡£Àà¼ÓÔØÆ÷ÊÇÔÚÔËÐÐʱ¸ºÔðѰÕҺͼÓÔØÀàÎļþµÄÀà¡£JavaÔÊÐíʹÓò»Í¬µÄÀà¼ÓÔØÆ÷£¬ÉõÖÁ×Ô¶¨ÒåµÄÀà¼ÓÔØÆ÷¡£
Java ³ÌÐò°üº¬ºÜ¶àÀàÎļþ£¬Ã¿Ò»¸ö¶¼Óëµ¥¸öJavaÀàÏà¶ÔÓ¦£¬ÕâЩÀàÎļþ²»Ïñ¾²Ì¬C³ÌÐò£¬Ò»´ÎÐÔ¼ÓÔØÈëÄڴ棬ËüÃÇËæÊ±ÐèÒªËæÊ±¼ÓÔØ¡£Õâ¾ÍÊÇÀà¼ÓÔØÆ÷ÓëÖÚ²»Í¬µÄµØ ·½¡£Ëü´ÓÔ´Îļþ£¨Í¨³£ÊÇ.class »ò .jarÎļþ£©»ñµÃ²»ÒÀÀµÆ½Ì¨µÄ ......
ÔÎÄ £º http://blog.csdn.net/sunboard/archive/2009/01/18/3831823.aspx
Ò»
¸öÈí¼þÉè¼ÆµÄºÃ»µ£¬ÎÒÏëºÜ´ó³Ì¶ÈÉÏÈ¡¾öÓÚËüµÄÕûÌå¼Ü¹¹£¬¶øÕâ¸öÕûÌå¼Ü¹¹Æäʵ¾ÍÊÇÄã¶ÔÕû¸öºê¹ÛÉÌÒµÒµÎñµÄ³éÏó¿ò¼Ü£¬µ±´ú±íÒµÎñÂß¼µÄ¸ß²ã³éÏó²ã½á¹¹
ºÏÀíʱ£¬Äãµ×²ãµÄ¾ßÌåʵÏÖÐèÒª¿¼Âǵľͽö½öÊÇһЩËã·¨ºÍһЩ¾ßÌåµÄÒµÎñʵÏÖÁË¡£µ±ÄãÐèÒªÔÙ¿ª·¢ÁíÒ»¸öÏà½üµÄÏîĿʱ£¬ÄãÒÔǰµÄ³éÏó²ã˵²»¶¨»¹¿ÉÒÔÔÙ´ÎÀûÓÃ
ÄØ£¬Ãæ¶Ô¶ÔÏóµÄÉè¼Æ£¬¸´ÓõÄÖØµãÆäʵӦ¸ÃÊdzéÏó²ãµÄ¸´Ó㬶ø²»ÊǾßÌåijһ¸ö´úÂë¿éµÄ¸´Óã¬ÊDz»ÊÇÒ»ÏÂ×Ӹоõ×Ô¼º¶Ô¸´ÓÃÀí½âµÄ¸ß¶ÈÓÖÉÏÉýÁËÒ»²ã£¿^_^
˵µ½Á˳éÏó£¬ÎҾͲ»Äܲ»Ìáµ½ÔøÈÃÎÒÍ·Í´µÄJava½Ó¿ÚºÍJava³éÏóÀàÁË£¬ÕâÒ²ÊDZ¾ÎÄÎÒÏë˵µÄÖØµã¡£
¼ÈÈ»ÃæÏò¶ÔÏóÉè¼ÆµÄÖØµãÔÚÓÚ³éÏó£¬ÄÇJava½Ó¿ÚºÍJava³éÏóÀà¾ÍÓÐËü´æÔڵıØÈ»ÐÔÁË¡£
Java½Ó¿ÚºÍJava³éÏóÀà´ú±íµÄ¾ÍÊdzéÏóÀàÐÍ£¬¾ÍÊÇÎÒÃÇÐèÒªÌá³öµÄ³éÏó²ãµÄ¾ßÌå±íÏÖ¡£OOPÃæÏò¶ÔÏóµÄ±à³Ì£¬Èç¹ûÒªÌá¸ß³ÌÐòµÄ¸´ÓÃÂÊ£¬Ôö¼Ó³ÌÐò
µÄ¿Éά»¤ÐÔ£¬¿ÉÀ©Õ¹ÐÔ£¬¾Í±ØÐëÊÇÃæÏò½Ó¿ÚµÄ±à³Ì£¬ÃæÏò³éÏóµÄ±à³Ì£¬ÕýÈ·µØÊ¹Óýӿڡ¢³éÏóÀàÕâЩ̫ÓÐÓõijéÏóÀàÐÍ×öΪÄã½á¹¹²ã´ÎÉϵĶ¥²ã¡£
Java½Ó¿ÚºÍJava³éÏóÀàÓÐÌ«¶àÏàËÆµÄµØ·½£¬ÓÖÓÐÌ«¶àÌØ±ðµÄµØ·½£¬¾¿¾¹ÔÚʲôµØ·½£¬²ÅÊ ......
1£©À¬»ø»ØÊÕµÄÁ½¸ö¹Ø¼üÒªËØ£º
·¢ÏÖÎÞÓöÔÏó¡£
»ØÊÕÎÞÓöÔÏóµÄÄÚ´æ¿Õ¼ä¡£
2£©6ÖÖÀ¬»ø»ØÊÕËã·¨£º
ÒýÓüÆÊý·¨£¬tracing Ëã·¨£¬compactingËã·¨£¬copying Ëã·¨£¬generationËã·¨£¬adaptiveËã·¨¡£
3£©detail£º
ÒýÓüÆÊý·¨(Reference Counting Collector)
ÒýÓüÆÊý·¨ÊÇΨһûÓÐʹÓøù¼¯µÄÀ¬»ø»ØÊյ퍣¬¸ÃË㷨ʹÓÃÒýÓüÆÊýÆ÷À´Çø·Ö´æ»î¶ÔÏóºÍ²»Ê¹ÓõĶÔÏó¡£Ò»°ãÀ´Ëµ£¬¶ÑÖеÄÿ¸ö¶ÔÏó¶ÔÓ¦Ò»¸öÒýÓüÆÊýÆ÷¡£µ±Ã¿Ò»´Î´´½¨Ò»¸ö¶ÔÏ󲢸³¸øÒ»¸ö±äÁ¿Ê±£¬ÒýÓüÆÊýÆ÷ÖÃΪ1¡£µ±¶ÔÏ󱻸³¸øÈÎÒâ±äÁ¿Ê±£¬ÒýÓüÆÊýÆ÷ÿ´Î¼Ó1µ±¶ÔÏó³öÁË×÷ÓÃÓòºó(¸Ã¶ÔÏó¶ªÆú²»ÔÙʹÓÃ)£¬ÒýÓüÆÊýÆ÷¼õ1£¬Ò»µ©ÒýÓüÆÊýÆ÷Ϊ0£¬¶ÔÏó¾ÍÂú×ãÁËÀ¬»øÊÕ¼¯µÄÌõ¼þ¡£
»ùÓÚÒýÓüÆÊýÆ÷µÄÀ¬»øÊÕ¼¯Æ÷ÔËÐнϿ죬²»»á³¤Ê±¼äÖжϳÌÐòÖ´ÐУ¬ÊÊÒ˵رØÐëʵʱÔËÐеijÌÐò¡£µ«ÒýÓüÆÊýÆ÷Ôö¼ÓÁ˳ÌÐòÖ´ÐеĿªÏú£¬ÒòΪÿ´Î¶ÔÏ󸳸øÐµıäÁ¿£¬¼ÆÊýÆ÷¼Ó1£¬¶øÃ¿´ÎÏÖÓжÔÏó³öÁË×÷ÓÃÓòÉú£¬¼ÆÊýÆ÷¼õ1¡£
tracingËã·¨(Tracing Collector)
tracingËã·¨ÊÇΪÁ˽â¾öÒýÓüÆÊý·¨µÄÎÊÌâ¶øÌá³ö£¬ËüʹÓÃÁ˸ù¼¯µÄ¸ÅÄî¡£»ùÓÚtracingËã·¨µÄÀ¬»øÊÕ¼¯Æ÷´Ó¸ù¼¯¿ªÊ¼É¨Ã裬ʶ±ð³öÄÄЩ¶ÔÏó¿É´ï£¬ÄÄЩ¶ÔÏ󲻿ɴ²¢ÓÃijÖÖ·½Ê½±ê¼Ç¿É´ï ......
1£©¸ÅÄ
ÊÇÔÚÔËÐÐ״̬ÖУ¬¶ÔÓÚÈÎÒâÒ»¸öÀ࣬¶¼Äܹ»ÖªµÀÕâ¸öÀàµÄËùÓÐÊôÐԺͷ½·¨£»¶ÔÓÚÈÎÒâÒ»¸ö¶ÔÏ󣬶¼Äܹ»µ÷ÓÃËüµÄÈÎÒâÒ»¸ö·½·¨£»ÕâÖÖ¶¯Ì¬»ñÈ¡µÄÐÅÏ¢ÒÔ¼°¶¯Ì¬µ÷ÓöÔÏóµÄ·½·¨µÄ¹¦ÄܳÆÎªjavaÓïÑԵķ´Éä»úÖÆ¡£
2£©¹¦ÄÜ£º
ÔÚÔËÐÐʱÅжÏÈÎÒâÒ»¸ö¶ÔÏóËùÊôµÄÀࣻ
ÔÚÔËÐÐʱ¹¹ÔìÈÎÒâÒ»¸öÀàµÄ¶ÔÏó£»
ÔÚÔËÐÐʱÅжÏÈÎÒâÒ»¸öÀàËù¾ßÓеijÉÔ±±äÁ¿ºÍ·½·¨£»
ÔÚÔËÐÐʱµ÷ÓÃÈÎÒâÒ»¸ö¶ÔÏóµÄ·½·¨£»
Éú³É¶¯Ì¬´úÀí¡£
3£©»ñµÃij¸ö¶ÔÏóµÄ¾ßÌåÊôÐÔ£º
Class ownerClass = owner.getClass()£ºµÃµ½¶ÔÏóownerµÄClass¡£
Field field = ownerClass.getField(fieldName)£ºÍ¨¹ýClassµÃµ½ÀàÉùÃ÷µÄÊôÐÔ¡£
Object property = field.get(owner)£ºÍ¨¹ý¶ÔÏóµÃµ½¸ÃÊôÐÔµÄʵÀý£¬Èç¹ûÕâ¸öÊôÐÔÊǷǹ«Óеģ¬ÕâÀï»á±¨IllegalAccessException¡£Èç¹ûÐèÒª·ÃÎʵ½¶ÔÏóµÄprivateÊôÐÔ£¬ÐèÒªÊ×Ïȵ÷ÓãºAccesibleObject.setAccessible(FieldÃû×Ö£¬true);
Èç¹û˵ÊÇ»ñÈ¡ClassµÄ¾²Ì¬ÊôÐÔ£ºÔòµÚÈý¾ä»»³ÉObject property=field.get(ClassÃû×Ö)£¬¶ø²»ÊÇÓÃʵÀýµÄÃû×Ö¡£
4£©Ö´ÐÐij¸ö¶ÔÏóµÄ·½·¨£º ......
Á½ÖÖÐÎʽ£º
1, ¶öººÊ½µ¥ÀýÀà
public class Singleton {
¡¡¡¡private Singleton(){}
¡¡¡¡//ÔÚ×Ô¼ºÄÚ²¿¶¨Òå×Ô¼ºÒ»¸öʵÀý£¬ÊDz»ÊÇºÜÆæ¹Ö£¿
¡¡¡¡//×¢ÒâÕâÊÇprivate Ö»¹©ÄÚ²¿µ÷ÓÃ
¡¡¡¡private static Singleton instance = new Singleton();
¡¡¡¡//ÕâÀïÌṩÁËÒ»¸ö¹©Íⲿ·ÃÎʱ¾classµÄ¾²Ì¬·½·¨£¬¿ÉÒÔÖ±½Ó·ÃÎÊ¡¡¡¡
¡¡¡¡public static Singleton getInstance() {
¡¡¡¡¡¡¡¡return instance; ¡¡¡¡
¡¡¡¡ }
}
2. ÀÁººÊ½µ¥ÀýÀà
public class Singleton {
¡¡¡¡private static Singleton instance = null;
¡¡¡¡public static synchronized Singleton getInstance() {
¡¡¡¡//Õâ¸ö·½·¨±ÈÉÏÃæÓÐËù¸Ä½ø£¬²»ÓÃÿ´Î¶¼½øÐÐÉú³É¶ÔÏó£¬Ö»ÊǵÚÒ»´Î¡¡¡¡¡¡
¡¡
¡¡¡¡//ʹÓÃʱÉú³ÉʵÀý£¬Ìá¸ßÁËЧÂÊ£¡
¡¡¡¡if (instance==null)
¡¡¡¡¡¡¡¡instance£½new Singleton();
¡¡¡¡return instance; ¡¡¡¡}
}
µÚ¶þÖÐÐÎʽÊÇlazy initialization£¬Ò²¾ÍÊÇ˵µÚÒ»´Îµ÷ÓÃʱ³õʼSingleton£¬ÒÔºó¾Í²»ÓÃÔÙÉú³ÉÁË¡£
×¢Òâµ½lazy initializationÐÎʽÖеÄsynchronized£¬Õâ¸ösynchronizedºÜÖØÒª£¬Èç¹ûûÓÐsynchronized£¬ÄÇôʹÓÃgetInstance()ÊÇÓпÉÄܵõ½¶à¸öSingletonʵÀý¡£
Ò»°ãÀ´ËµµÚÒ»ÖֱȽϰ²È«¡ ......
ʵ¼ÊÉÏ£¬ÎÒ¹ØÓÚjavaµÄ»ù´¡ÖªÊ¶µÄ90%ÒÔÉ϶¼À´×ÔThinking in Java¡£¶ÔÓÚÆäÖеÄsynchronized¹Ø¼ü×Ö£¬µ±Ê±¾ÍÊÇä¯ÀÀһϣ¬´ó¸ÅÖªµÀÒâ˼£¬Ò²Ã»ÓÐϸ¿´¡£ºóÀ´Ò»Ö±Ã»ÓÐÓùýÕâ¸ö¹Ø¼ü×Ö¡£×òÌì¿´Thinking in Patterns with JavaÖеÄObserverģʽ£¬¿´ÁËÆäÖеÄObservableÀàµÄÔ´Â룬·¢ÏÖÀïÃæ¼¸ºõËùÓеķ½·¨¶¼ÓÃÁËsynchronized¹Ø¼ü×Ö£¨²»ÊÇÈ«²¿£©£¬ÆäÖиö±ðÓÃÁËsynchronized(this){}µÄÇø¿é¡£ÓÚÊÇ£¬ÎÒ·¢¾õÓбØÒªºÃºÃÀí½âÒ»ÏÂÕâ¸ö¹Ø¼ü×ÖÁË¡£
ÎÒÔٴο´Á˺î½ÝÒëµÄThinking in JavaµÚ¶þ°æÖÐÎİ棬µÃµ½ÓйØsynchronizedµÄÈçÏÂÐÅÏ¢£º
1¡¢synchronized¹Ø¼ü×ÖµÄ×÷ÓÃÓòÓжþÖÖ£º
1£©ÊÇij¸ö¶ÔÏóʵÀýÄÚ£¬synchronized aMethod(){}¿ÉÒÔ·ÀÖ¹¶à¸öÏß³Ìͬʱ·ÃÎÊÕâ¸ö¶ÔÏóµÄsynchronized·½·¨£¨Èç¹ûÒ»¸ö¶ÔÏóÓжà¸ösynchronized·½·¨£¬Ö»ÒªÒ»¸öÏ̷߳ÃÎÊÁËÆäÖеÄÒ»¸ösynchronized·½·¨£¬ÆäËüÏ̲߳»ÄÜͬʱ·ÃÎÊÕâ¸ö¶ÔÏóÖÐÈκÎÒ»¸ösynchronized·½·¨£©¡£Õâʱ£¬²»Í¬µÄ¶ÔÏóʵÀýµÄsynchronized·½·¨ÊDz»Ïà¸ÉÈŵġ£Ò²¾ÍÊÇ˵£¬ÆäËüÏß³ÌÕÕÑù¿ÉÒÔͬʱ·ÃÎÊÏàͬÀàµÄÁíÒ»¸ö¶ÔÏóʵÀýÖеÄsynchronized·½·¨£»
2£©ÊÇij¸öÀàµÄ·¶Î§£¬synchronized static aStaticMethod{}·ÀÖ¹¶à¸öÏß³Ìͬʱ·ÃÎÊÕâ¸öÀàÖеÄsynchronized static ·½·¨¡£Ëü¿ ......