ÔÚÏÖ´úÅÌËã»úÓ²¼þ·ÉËÙÉú³¤µÄ½ñÌ죬¶àºË´¦Öóͷ£Æ÷ÒѳÉΪÖ÷Á÷ÉèÖ㬼«´óµØÌáÉýÁËÎÒÃÇ´¦Öóͷ£ÖØ´óʹÃüµÄÄÜÁ¦¡£´¿´âÒÀÀµÓ²¼þµÄÌáÉýÍùÍù²»¿ÉÖª×ã¸ßÐÔÄÜÓ¦ÓõÄÐèÇó¡£ÌØÊâÊÇÔÚJavaÕâÒ»ÆÕ±éʹÓõıà³ÌÓïÑÔÖУ¬Òª³ä·ÖʹÓöàºËϵͳµÄDZÄÜÁ¦£¬Ã÷È·²¢ÕÆÎÕ¡°HighPerformanceJavaforMulti-coreSystems¡±ÖеĽ¹µãÍ·ÄÔ±äµÃÓÈΪÖ÷Òª¡£
JavaµÄÓÅÊÆÖ®Ò»ÊÇÆ½Ì¨ÎÞ¹ØÐÔ£¬µ«Õâ²¢²»ÁÏζ×ÅÎÒÃÇ¿ÉÒÔºöÂԵײãÓ²¼þµÄϸ½Ú¡£Ïà·´£¬ÔõÑùÈÃJava´úÂëÔÚ¶àºËÇéÐÎÖÐʩչ×î´óЧÂÊ£¬ÒѾ³ÉΪȨºâÒ»¸ö¿ª·¢ÕßÊÖÒÕˮƽµÄÖ÷Òª±ê¼Ç¡£Õâ¸öÀú³ÌÖУ¬Òªº¦ÔÚÓÚÔõÑùÓÅ»¯¶àÏ̵߳ÄÉè¼Æ¡¢ºÏÀíʹÓò¢·¢¹¤¾ß¡¢ÒÔ¼°ÓÅ»¯JVM£¨JavaVirtualMachine£©µÄÉèÖá£
Ã÷È·¶àºË´¦Öóͷ£Æ÷µÄʵÖÊÖÁ¹ØÖ÷Òª¡£¶àºË´¦Öóͷ£Æ÷ͨ¹ýÔÚ²î±ð½¹µãÉÏͬʱִÐÐʹÃü£¬Ìá¸ßÕûÌåÔËËãÄÜÁ¦¡£Òò´Ë£¬Õö¿ªÊ¹ÃüÆÊÎö¡¢ÊµÏÖ²¢ÐÐÅÌËã¡¢ïÔÌÏß³ÌÛÕ±Õ£¬³ÉΪÐÔÄܵ÷ÓŵÄÖ÷ҪʹÃü¡£JavaÖÐÌṩÁ˸»ºñµÄ²¢·¢¹¤¾ß£¬ÀýÈçExecutor¿ò¼Ü¡¢Fork/Join¿ò¼Ü¡¢ÒÔ¼°CompletableFuture£¬ÉÁ¿ª·¢Õß¿ÉÒÔÇáËɵØÊµÏÖʹÃü²¢ÐУ¬Ìá¸ß³ÌÐòµÄÍÌÍÂÁ¿¡£
ÒªÔÚ¶àºËÇéÐÎÖÐÈ¡µÃÐÔÄܱ¼ÌÚ£¬½ö½öʹÓÃÕâЩ¹¤¾ß»¹²»·ó¡£µ×²ãµÄJVMµ÷ÓÅÒ²Æðµ½ÖÁ¹ØÖ÷ÒªµÄ×÷Óá£JVMµÄÀ¬»ø½ÓÄÉÆ÷¡¢JIT£¨¼´Ê±±àÒëÆ÷£©¡¢ÒÔ¼°ÄÚ´æÖÎÀíÕ½ÂÔ¶¼»áÓ°ÏìÓ¦ÓõÄÕûÌåÌåÏÖ¡£ÀýÈ磬ͨ¹ýµ÷½â¶Ñ¾Þϸ¡¢Ñ¡ÔñºÏÊʵÄÀ¬»ø½ÓÄÉÆ÷£¨ÈçG1¡¢ZGC£©£¬¿ÉÒÔÓÐÓÃïÔÌGCÔÝͣʱ¼ä£¬°ü¹Ü¶àÏß³ÌʹÃüµÄÒ»Á¬ÐÔ¡£
Êý¾Ý¾Ö²¿ÐÔÒ²ÊDz»¿ÉºöÊÓµÄÒòËØ¡£Ï¸Á£¶ÈµÄ¹²ÏíËøºÍ·ÇÒ»ÖÂÐÔÄÚ´æ»á¼û£¨NUMA£©¼Ü¹¹ÏµÄÓÅ»¯£¬ÄÜÔÚ¶àºË´¦Öóͷ£Æ÷ÖÐÏÔÖø½µµÍÑÓ³Ù¡£ºÏÀíÉè¼ÆÊý¾Ý½á¹¹¡¢×èֹƵÈÔµÄͬ²½²Ù×÷£¬ÉõÖÁʹÓÃÔ×Ó±äÁ¿ºÍÎÞËøÐÐÁУ¬¶¼ÄÜÔÚÒ»¶¨Ë®Æ½ÉÏÌáÉý¶àºË´¦Öóͷ£Æ÷µÄʹÓÃÂÊ¡£
ÕÆÎÕ¡°HighPerformanceJavaforMulti-coreSystems¡±µÄ½¹µãÔÚÓÚÃ÷È·Ó²¼þ¼Ü¹¹¡¢ÓÅ»¯²¢·¢Ä£×Ó¡¢ÒÔ¼°Ï¸Äåµ÷ÓÅJVM¡£Ëü²»µ«½öÊÇÊÖÒÕµÄ¶ÑÆö£¬¸üÊǶÔÓ²¼þÉî¿ÌÈÏÖªºÍÈí¼þµ÷ÀíÕ½ÂÔµÄÇÉÃîÁ¬Ïµ¡£ÕæÕýµÄÐÔÄܾ޽³£¬ÄÜÏñÖ¸»Ó¼ÒÄÇÑùµ÷¶¯Ã¿Ò»Æ¬¡°ÀÖÆ÷¡±¡ª¡ªÃ¿Ò»¸öÏ̡߳¢Ã¿Ò»¸ö½¹µã¡ª¡ª×à³ö×î¸ÐÈ˵Ľ»ÏìÀÖ¡£
ÔÚ½ÓÏÂÀ´µÄ²¿·ÖÖУ¬ÎÒÃǽ«Ïêϸ̽ÌÖһЩʵս¼¼ÇÉ£¬ÈÃÄãÔÚ¶àºËϵͳÉÏʵÏÖJavaÓ¦Óõļ«ÖÂÐÔÄÜÓÅ»¯£¬´Ó´úÂë½á¹¹µ½ÏµÍ³ÉèÖã¬È«·½Î»ÌáÉýÄãµÄ¿ª·¢Ë®Æ½¡£
ÉîÈë̽ÌÖJava¶àºËÐÔÄÜÓÅ»¯µÄÊµÕ½ÃØóÅ£¬Õ¹ÏÖÄÇЩ±»ÆÕ±éÑéÖ¤ÄÜ´øÀ´ÏÔÖøÌáÉýµÄÕ½ÂÔ¡£ÏëÏóÄãÕýÕ¾ÔÚÐÔÄÜÓÅ»¯µÄÇ°ÑØ£¬ÕÆÎÕÕâЩ¼¼ÇÉ£¬ÄÜÈÃÄãµÄJavaÓ¦ÓÃÔÚ¶àºËÇéÐÎÖÐΪ»¢¸µÒí£¬Ô´Ô´Ò»Ö±µØ±¬·¢³ö¾ªÈ˵ÄЧÂÊ¡£
µÚÒ»£¬ºÏÀí»®·ÖʹÃü¡¢ÓÅ»¯Ïß³ÌÄ£×Ó¡£ÏÖʵÉÏ£¬Ò»¸öÎÊÌâµÄÁ£¶È¿ØÖƼ«´óÓ°Ïì¶àºË´¦Öóͷ£µÄЧÂÊ¡£Ï꾡µÄʹÃüÈÝÒ×Òý·¢¹ý¶àµÄµ÷ÀíºÍÉÏÏÂÎÄÇл»£¬·´¶øÍÏÂýÕûÌåËÙÂÊ£»¶ø¹ý´ÖµÄʹÃüÓֻᵼÖÂ×ÊÔ´ÆÌÕź͸ºÔز»Æ½ºâ¡£×î¼Ñʵ¼ùÊÇÆ¾Ö¤Ê¹ÃüµÄÖØÆ¯ºóºÍÓ²¼þ×ÊÔ´£¬Æ½ºâµ÷Àí£¬½ÓÄɶ¯Ì¬Ê¹Ãü»®·ÖÕ½ÂÔ¡£
ÀýÈ磬ʹÓÃFork/Join¿ò¼ÜÖеÄÊÂÇéÇÔÈ¡»úÖÆ£¬³ä·ÖʹÓöàºË×ÊÔ´¡£
µÚ¶þ£¬×èÖ¹¾ºÕù״̬£¨Contention£©ºÍËøµÄÀÄÓá£Í¬²½»úÖÆËäȻȷ±£ÁËÏß³ÌÇå¾²£¬µ«²»µ±Ê¹ÓûáÔì³ÉÛÕ±Õ¡¢ÆÚ´ýÉõÖÁËÀËø£¬´Ó¶ø´ó´ó½µµÍÐÔÄÜ¡£Ó¦ÓÅÏÈ˼Á¿ÎÞËøÉè¼Æ£¬ÀýÈçAtomicÀà¡¢LongAdderÒÔ¼°ConcurrentLinkedQueueµÈ£¬ïÔÌÁÙ½çÇøÄڵľºÕù£¬Ìá¸ß²¢·¢ÍÌÍÂÁ¿¡£
µÚÈý£¬³ä·ÖʹÓÃÓ²¼þÌØÕ÷£¬¾ÙÐÐÊý¾ÝÍâµØ»¯£¨DataLocality£©ÓÅ»¯¡£Ó²¼þ¼Ü¹¹ÖеÄNUMA£¨·ÇÒ»ÖÂÐÔÄÚ´æ»á¼û£©ÌØÕ÷£¬Òâζ×Ųî±ðºËÉϵÄÄÚ´æ»á¼û±¾Ç®²î±ð¡£Í¨¹ýºÏÀíµÄÏß³ÌÇ׺ÍÐ԰󶨣¨Affinity£©ÒÔ¼°¿ØÖÆÊý¾Ý½á¹¹µÄ½á¹¹£¬¿ÉÒÔ×î´óÏ޶ȵØïÔÌ·ÇÍâµØÄÚ´æ»á¼û£¬ÌáÉýÖ´ÐÐЧÂÊ¡£
µÚËÄ£¬JVMµÄµ÷ÓÅÒ²±Ø²»¿ÉÉÙ¡£Æ¾Ö¤Ó¦ÓÃÌØÕ÷Ñ¡ÔñºÏÊʵÄÀ¬»ø½ÓÄÉÆ÷£¬µ÷½â¶Ñ¿Õ¼ä¾Þϸ£¬¿ªÆôÊʵ±µÄ¼´Ê±±àÒ루JIT£©ÓÅ»¯Ñ¡ÏÀýÈç-XX:+UseG1GC£¬-XX:+OptimizeStringConcat£¬¶¼ÄÜÔÚ°ü¹ÜÎȹÌÐԵĻñµÃÐÔÄܵÄÌáÉý¡£¿ÉÒÔ½èÖúÐÔÄÜ¼à¿Ø¹¤¾ß£¬ÊµÊ±¼ì²âÆ¿¾±ËùÔÚ£¬¶¯Ì¬µ÷½â²ÎÊý¡£
µÚÎ壬¸ßЧʹÓÃÒì²½Óë·ÇÛÕ±ÕÊÖÒÕ¡£ºÃ±ÈCompletableFutureºÍReactive±à³ÌÄ£×Ó£¬ÄÜÈÃϽµµÍ¬Ðø´¦Öóͷ£Ê¹Ãü£¬²»ÆÚ´ýÛÕ±Õ²Ù×÷Íê³É£¬´Ó¶øÌáÉýÕûÌåÍÌÍÂÄÜÁ¦¡£ÓÈÆäÔÚÍøÂçI/O÷缯ÐÍÓªÒµÖУ¬Òì²½ÊÖÒÕÄܹ»Í»ÆÆ¹Å°å¹£ÈûµÄÆ¿¾±¡£
ÒªÒ»Ö±¾ÙÐÐÐÔÄܲâÊÔ£¬½èÖú¹¤¾ßÈçJavaFlightRecorder¡¢VisualVM¡¢JProfilerµÈ£¬ÆÊÎöÈÈÃÅ´úÂëºÍÆ¿¾±»·½Ú¡£²ÎÊýµ÷ÓÅ¡¢´úÂëÖØ¹¹¡¢Ó²¼þÉý¼¶£¬Á¬ÏµÏÖʵ²âÊÔÊý¾Ý£¬Öð²½ÍêÉÆÏµÍ³µÄÐÔÄÜÌåÏÖ¡£
ÕûÌåÀ´¿´£¬ÊµÏÖJavaÔÚ¶àºËϵͳÖеĸßÐÔÄÜÔËÐУ¬ÊÇÒ»´Î¹ØÓÚÓ²¼þÈÏÖª¡¢Èí¼þÉè¼ÆÓëϵͳµ÷ÓŵÄ×ÛºÏÒÕÊõ¡£Ã¿Ò»¸öϸ½Ú¶¼¿ÉÄܳÉΪÌáÉýµÄÍ»ÆÆ¿Ú¡£½«ÕâЩʵսսÂÔÇÉÃîôۺϣ¬Ð§¹û¿ÉÏë¶øÖª¡ª¡ªJavaÓ¦ÓõÄÐÔÄܽ«Ïñ»ð¼ý°ãÖ±ÏßÉÏÉý¡£
ÈôÊÇÄã×·ÇóµÄÊǼ«ÖµÄЧÂÊ£¬ÅÊÔµÐÔÄܵÄá¯Á룬ÕâЩ¼¼Çɾø¶ÔÖµµÃÄãÈ«ÉíÐÄͶÈëʵ¼ù¡£Ö»ÓÐһֱ̽Ë÷¡¢ÓÅ»¯£¬²Å»ªÔÚÿһ´ÎµãµÎÌáÉýÖлýÀÛ³öÁîÈËÔÞ̾µÄЧ¹û¡£Î´À´µÄ¶àºËJavaÌìÏ£¬ÆÚ´ý×ÅÄã³ÉΪËÈËÕÆ¿ØÈ«¾ÖµÄÐÔÄܾ޽³¡£