#Java对象å åçä½¿ç¨æ åµ ##ä¸è¬æ åµ + primitive types  + Object overhead for "housekeeping" information recording an object's class, ID and status flags such as whether the object is currently reachable, currently synchronization-locked etc. Hotspot JVMï¼ + Objectç±»å®ä¾ï¼8åèï¼ + Objectç±»å®ä¾æ°ç»ï¼12åèï¼æ¯Objectç±»å®ä¾å¤äºä¸ªlengthåï¼ + Object size granularity 为äºä¾¿äºå¯»åï¼å¯¹è±¡å åä¼8åè对é½ï¼ ä¾åï¼ + Objectç±»å®ä¾8åèï¼ + åªæä¸ä¸ªbooleanæåç类对象ï¼16åèï¼æ8个booleanæåç类对象ï¼16åèï¼ + æä¸¤ä¸ªlongæåãä¸ä¸ªintæåãä¸ä¸ªbooleanæåç类对象ï¼40åèï¼ ##æ°ç» + object headerï¼12个åèï¼å¤äºä¸ä¸ªlengthå + ä¸ç»´æ°ç»ï¼æ°æ®åºåï¼length * sizeof(element)ï¼æ¤å¤ï¼å¯¹äºobjectæ¯ä¿åçå¼ç¨ï¼ä¸º4åè + äºç»´æ°ç»ï¼æ¯ä¸è¡é½æ¯ä¸ä¸ªæ°ç»ï¼æ æ¯ä¸è¡é½æobjectçå¼é + ä¾åï¼10*10 intäºç»´æ°ç»ï¼ + å¤å±headerï¼12åè + å¤å±æ°æ®ï¼10个å¼ç¨ï¼ï¼10*4=40åèï¼å ä¸paddingï¼å ±56åè + å 屿¯ä¸è¡ï¼header12åè + å 屿¯ä¸è¡ï¼æ°æ®10*4=40åèï¼å ä¸paddingï¼æ¯ä¸è¡å ±56åè + æ»å ±56*11=616åè + æ´å¤ç»´çæ°ç»é»è¾ä¸è´ ##String + ä¸ä¸ªString对象å®é ä¸å å«äºä¸æ¢ä¸ä¸ªå¯¹è±¡ + javaçcharå 两个åè + Minimum String memory usage (bytes) = 8 * (int) ((((num chars) * 2) + 45) / 8) + String对象å å«ï¼charæ°ç»ï¼offsetï¼lengthï¼hashcodeè¿åé¨åå 容 + 空String对象å ç¨å åï¼8(header) + 3*4(ä¸è¿°ä¸ä¸ªintå) + 4(charæ°ç»å¼ç¨) + 12(空charæ°ç»header) + 4(charæ°ç»padding) = 40åè + å å«17个å符çStringï¼24 + (12 + 17*2 + 2) = 72åè + substringä½¿ç¨æ¶çtrick + 妿åstringåsubstringé½ä¼è¢«ä½¿ç¨ï¼åèçäºå å + 妿åstringä¸å被使ç¨ï¼æå¯è½å°±ä¼æµªè´¹å å + ä¾å¦ï¼ åæçcharæ°ç»å¹¶ä¸ä¼è¢«åæ¶ï¼ä½æ¯åªä½¿ç¨äºå ¶ä¸çä¸é¨åï¼ ```java String str = "Some longish string..."; str = str.substring(5, 4); ``` åæçcharæ°æ®å°æ¥ä¼è¢«gcï¼é¿å äºå åæµªè´¹ï¼ ```java String str = "Some longish string..."; str = new String(str.substring(5, 4)); ``` ##string buffers StringBufferãStringBuilderç header: 8åèï¼lengthï¼charæ°ç»å¼ç¨ï¼åºå±charæ°ç»æå å åï¼ å设åå§å®¹é为16çstring bufferï¼16 + 12 + 16*2 + 4 = 64åè æ©å®¹çç¥æ¯æ¯æ¬¡åå¢å®¹é ##åå°Stringå ç¨çå å + é常ä¸éè¦ï¼åªæç¡®å®Stringå ç¨äºå¤ªå¤å ååææå¿ è¦ã + ä¸ä¸æ 形并ä¸éè¦Stringï¼ææ´èçå åçCharSequenceå®ç°ã + storing the string in memory; + printing out the string or writing it to a stream; + retrieving individual characters/substrings from the string; + performing matches against regular expressions. + ä¸ä½¿ç¨Stringçä¼åæ¹æ¡ï¼ + 使ç¨string bufferï¼éè¿`trimToSize()`å¯ä»¥è³å°æ¯Stringå°8åè + åªç¨æ¥ä¿åASCIIå符ï¼ä½¿ç¨byte[]æ´é«æï¼æèªè¡å®ç°CharSequenceæ¥å£ï¼ä½¿ç¨æ´èçå åçåºå±ç»æï¼åªå¨æåéè¦ä½¿ç¨çæ¶å转å为String + å¿ é¡»ä½¿ç¨Stringæ¶çä¼åæ¹æ¡ + å建substringæ¶ï¼å¦æåstringä¸å使ç¨ï¼é£åºè¯¥éè¿newä¸ä¸ªæ°çStringï¼è䏿¯ç´æ¥èµå¼ç»åå¼ç¨ + 彿å¾å¤å 容ç¸åçString对象æ¶ï¼å¯ä»¥éè¿ä¸¤ç§æ¹å¼èçå åï¼ + å°å 容å®ä¹ä¸ºenumï¼ä½¿ç¨æ¶ä½¿ç¨enumå¼ + è§èåï¼ä½¿ç¨`String.intern()`æ¹æ³ï¼ä½¿ç¨HashMapçéåï¼ ```java String employeeStatus = rs.getString(2); employeeStatus = employeeStatus.intern(); ``` + intern()ï¼å°Stringçå 容æ¾å°JVMçstring poolä¸ï¼æ¤è¿ç¨ä¸å¯éï¼å¾å¯è½ä¼å¯¼è´å åæ³æ¼ï¼å æ¤åªæç¡®å®å å®¹åªæå¾å°çå ç§æ¶æå¯è¡ï¼