µ±Ç°Î»ÖãºÖ÷Ò³ > ²é¿´ÄÚÈÝ

JDK9¶ÔString×Ö·û´®µÄÐÂÒ»ÂÖÓÅ»¯£¬²»¿É²»Öª

·¢²¼Ê±¼ä£º2021-05-05 00:00| ÓРλÅóÓѲ鿴

¼ò½é£º±¾ÎÄתÔØ×Ô΢ÐŹ«Öںš¸³ÌÐòÐÂÊӽ硹£¬×÷Õ߶þʦÐÖ¡£×ªÔر¾ÎÄÇëÁªÏµ³ÌÐòÐÂÊӽ繫Öںš£ StringÀà¿ÉÒÔ˵ÊÇJava±à³ÌÖÐʹÓÃ×î¶àµÄÀàÁË£¬Èç¹ûÄܶÔString×Ö·û´®µÄÐÔÄܽøÐÐÓÅ»¯£¬ÄÇô³ÌÐòµÄÐÔÄܱØÈ»ÄÜ´ó·ùÌáÉý¡£ Õâ²»JDK9¾Í¶ÔString×Ö·û´®½øÐÐÁ˸ĽøÉý¼¶£¬ÔÚijЩ³¡¡­¡­

 

±¾ÎÄתÔØ×Ô΢ÐŹ«Öںš¸³ÌÐòÐÂÊӽ硹£¬×÷Õ߶þʦÐÖ¡£×ªÔر¾ÎÄÇëÁªÏµ³ÌÐòÐÂÊӽ繫Öںš£

StringÀà¿ÉÒÔ˵ÊÇJava±à³ÌÖÐʹÓÃ×î¶àµÄÀàÁË£¬Èç¹ûÄܶÔString×Ö·û´®µÄÐÔÄܽøÐÐÓÅ»¯£¬ÄÇô³ÌÐòµÄÐÔÄܱØÈ»ÄÜ´ó·ùÌáÉý¡£

Õâ²»JDK9¾Í¶ÔString×Ö·û´®½øÐÐÁ˸ĽøÉý¼¶£¬ÔÚijЩ³¡¾°Ï¿ÉÒÔÈÃString×Ö·û´®ÄÚ´æ¼õÉÙÒ»°ë£¬½ø¶ø¼õÉÙJVMµÄGC´ÎÊý¡£

StringµÄµ×²ã´æ´¢

ÔÚÃæÊÔµÄʱºòÎÒÃÇͨ³£»á˵String×Ö·û´®Óв»¿É±äµÄÌØÐÔ£¬Ã¿´Î¶¼Òª´´½¨ÐµÄ×Ö·û´®¡£ÄÇô£¬ÎªÊ²Ã´String×Ö·û´®ÊDz»¿É±äµÄÄØ?

ÏÈÀ´¿´Ò»ÏÂString×Ö·û´®µÄµ×²ã´æ´¢½á¹¹£º

  1. public final class String 
  2.     implements java.io.Serializable, Comparable<String>, CharSequence { 
  3.      
  4.     private final char value[]; 
  5.  
  6.     public String() { 
  7.         this.value = "".value; 
  8.     } 
  9.  
  10.     public String(String original) { 
  11.         this.value = original.value; 
  12.         this.hash = original.hash; 
  13.     } 
  14.     // ... 
  15. }     

¿´µ½Ê²Ã´ÁË?µ±ÎÒÃÇnewÒ»¸öString¶ÔÏóʱ£¬¶ÔÓ¦µÄ×Ö·û´®ÆäʵÊÇÒÔcharÊý×éµÄÐÎʽ´æ´¢ÔÚString¶ÔÏóÄÚ²¿¡£¶øÕâ¸öcharÊý×éÊÇfinalµÄ£¬Ò²¾ÍÊÇ˵²»¿É±äµÄ¡£

ÕâÒ²¾ÍÊÇΪʲôÎÒÃÇ˵String×Ö·û´®ÓµÓв»¿É±äµÄÌØÐÔ£¬µ±×Ö·û´®¸Ä±äÁË£¬charÊý×é²»¿É±ä£¬¾ÍÖ»ÄÜ´´½¨Ò»¸öеĶÔÏó£¬ÐµÄcharÊý×éÁË¡£

µ×²ã´æ´¢µÄÓÅ»¯

ÉÏÃæ˵µÄÇé¿öÊÇJDK8¼°ÒÔÇ°°æ±¾£¬µ½ÁËJDK9£¬StringÖÐ×Ö·û´®µÄ´æ´¢²»ÔÙÓÃcharÊý×éÁË£¬¸ÄÓÃbyteÊý×é¡£

  1. public final class String 
  2.     implements java.io.Serializable, Comparable<String>, CharSequence { 
  3.  
  4.     @Stable 
  5.     private final byte[] value; 
  6.  
  7.     private final byte coder; 
  8.      
  9.     @Native static final byte LATIN1 = 0; 
  10.     @Native static final byte UTF16  = 1; 
  11.      
  12.     static final boolean COMPACT_STRINGS; 
  13.    
  14.     public String() { 
  15.         this.value = "".value; 
  16.         this.coder = "".coder; 
  17.     } 
  18.  
  19.     @HotSpotIntrinsicCandidate 
  20.     public String(String original) { 
  21.         this.value = original.value; 
  22.         this.coder = original.coder; 
  23.         this.hash = original.hash; 
  24.     } 
  25.      
  26.     // ... 

²»½ö½«charÊý×é¸ÄΪbyteÊý×飬¶øÇÒÐÂÔöÁËÒ»¸öcoderµÄ³ÉÔ±±äÁ¿¡£

ÔÚ³ÌÐòÖУ¬¾ø´ó¶àÊý×Ö·û´®Ö»°üº¬Ó¢ÎÄ×ÖĸÊý×ÖµÈ×Ö·û£¬Ê¹ÓÃLatin-1±àÂ룬һ¸ö×Ö·ûÕ¼ÓÃÒ»¸öbyte¡£Èç¹ûʹÓÃchar£¬Ò»¸öcharÒªÕ¼ÓÃÁ½¸öbyte£¬»áÕ¼ÓÃË«±¶µÄÄÚ´æ¿Õ¼ä¡£

µ«ÊÇ£¬Èç¹û×Ö·û´®ÖÐʹÓÃÁËÖÐÎĵȳ¬³öLatin-1±íʾ·¶Î§µÄ×Ö·û£¬Ê¹ÓÃLatin-1¾Íû°ì·¨±íʾÁË¡£ÕâʱJDK»áʹÓÃUTF-16±àÂ룬ÄÇôռÓõĿռäºÍ¾É°æ(ʹÓÃchar[])ÊÇÒ»ÑùµÄ¡£

coder±äÁ¿´ú±í±àÂëµÄ¸ñʽ£¬Ä¿Ç°StringÖ§³ÖÁ½ÖÖ±àÂë¸ñʽLatin-1ºÍUTF-16¡£Latin-1ÐèÒªÓÃÒ»¸ö×Ö½ÚÀ´´æ´¢£¬¶øUTF-16ÐèҪʹÓÃ2¸ö×Ö½Ú»òÕß4¸ö×Ö½ÚÀ´´æ´¢¡£

¾Ý˵ÕâÒ»¸Ä½ø·½°¸ÊÇJDKµÄ¿ª·¢ÈËÔ±ÓôóÊý¾ÝºÍÈ˹¤ÄÜÖÇÄÜ£¬µ÷ÑÐÁ˳ÉǧÉÏÍòµÄÓ¦ÓóÌÐòµÄheapdumpÐÅÏ¢ºó£¬µÃ³ö£º´ó²¿·ÖµÄString¶¼ÊÇÒÔLatin-1×Ö·û±àÂëÀ´±íʾµÄ£¬Ö»ÐèÒªÒ»¸ö×Ö½Ú´æ´¢¾Í¹»ÁË£¬Á½¸ö×Ö½ÚÍêÈ«ÊÇÀË·Ñ¡£

COMPACT_STRINGSÊôÐÔÔòÊÇÓÃÀ´¿ØÖÆÊÇ·ñ¿ªÆôStringµÄcompact¹¦ÄÜ¡£Ä¬ÈÏÇé¿öÏÂÊÇ¿ªÆôµÄ¡£¿ÉÒÔʹÓÃ-XX:-CompactStrings²ÎÊýÀ´¶Ô´Ë¹¦ÄܽøÐйرա£

¸Ä½øµÄºÃ´¦

¸Ä½øµÄºÃ´¦ÊǷdz£Ã÷ÏԵģ¬Ê×ÏÈÈç¹ûÏîÄ¿ÖÐʹÓÃLatin-1×Ö·û¼¯¾Ó¶à£¬ÄÚ´æµÄÕ¼Óôó·ù¶È¼õÉÙ£¬Í¬ÑùµÄÓ²¼þÅäÖÿÉÒÔÖ§³Å¸ü¶àµÄÒµÎñ¡£

µ±ÄÚ´æ¼õÉÙÖ®ºó£¬½øÒ»²½µ¼Ö¼õÉÙGC´ÎÊý£¬½ø¶ø¼õÉÙStop-The-WorldµÄƵ´Î£¬Í¬Ñù»áÌáÉýϵͳµÄÐÔÄÜ¡£

С½á

Ëæ×ÅJDKµÄµü´úString×Ö·û´®µÄÄÚ´æ½á¹¹¼°·½·¨µÈÒ²ÔÚ²»¶ÏµØ½øÐÐÑݱ䡣ÕâÊÇÒòΪString×Ö·û´®ÍùÍùÊÇJVMÖÐÕ¼ÓÃÄÚ´æ×î¶àµÄÀ࣬ͨ¹ý¶ÔËüµÄ¸ÄÔìÉý¼¶£¬¶ÔÐÔÄܵÄÌáÉý»á¸ü¼ÓÃ÷ÏÔ¡£


±¾ÎÄתÔØ×ÔÍøÂ磬ԭÎÄÁ´½Ó£ºhttps://mp.weixin.qq.com/s/p1Q5AZWETUtajqtY2GUMtA
±¾Õ¾²¿·ÖÄÚÈÝתÔØÓÚÍøÂ磬°æȨ¹éÔ­×÷ÕßËùÓУ¬×ªÔØ֮ĿµÄÔÚÓÚ´«²¥¸ü¶àÓÅÐã¼¼ÊõÄÚÈÝ£¬ÈçÓÐÇÖȨÇëÁªÏµQQ/΢ÐÅ£º153890879ɾ³ý£¬Ð»Ð»£¡

ÍƼöͼÎÄ

  • ÖÜÅÅÐÐ
  • ÔÂÅÅÐÐ
  • ×ÜÅÅÐÐ

Ëæ»úÍƼö