java 9Õýʽ°æÔ¤¼ÆÔÚ2017Äê2¼¾¶È·¢²¼£¬Ä¿Ç°´ó²¿·ÖJEPÒѾ»ù±¾³ÉÐÍ¡£ÆäÖУ¬×î¹Ø¼üÌØÐÔ»òÐíÊÇJEP 261, ¸ÃJEPʵÏÖÁËjavaƽ̨µÄÄ£¿éϵͳ, ¾ßÌå˵Ã÷¿ÉÒԲμûJSR376¡£ Ä£¿éϵͳÒÀÀµÓÚJEP260£¨·â×°Á˴󲿷ÖÄÚ²¿API£©£¬µ¼ÖµĽá¹ûÊÇJEP193¶¨ÒåµÄ¶à¸ö¾ä±ú»á±©Â¶sun.misc.UnsafeÀàµÄ¹¦ÄÜ¡£´ËǰInfo±¨µÀ¹ýÖÂÁ¦ÓÚ½â¾ösun.misc.Unsafe¾ä±úÎÊÌâµÄÍŶӣ¬¿ÉÄܵĽâ¾ö·½°¸Ï¸½ÚÒà¿É²Î¼ûÁíһƪ±¨µÀ¡£
Bug 8149159×î½ü±»Ìá½»µ½JDK Bug¹ÜÀíϵͳ, ½¨ÒéÓÅ»¯ºÍÇåÀíUnsafeÀà, °üÀ¨½«²ÎÊý¼ì²é´Ó±¾µØ´úÂëÒÆÈëJava£¨¼ò»¯JIT£©¡¢ sun.misc.UnsafeÀàºÍjdk.internal.misc.UnsafeÀàµÄͳһ¡¢ ÒÔ¼°±¾µØ´úÂëµÄÕûÌåÇåÀí¡£
2ÔÂ18ÈÕ£¬Oracle¹¤³ÌʦMikael VidstedtÏòOpenJDK¿ª·¢ÕßÉçÇøÌá½»ÁËÁ½¸ö²¹¶¡£¨·Ö±ðÕë¶ÔOpenJDKºÍOpenJDK HotSpot VM£©
¹ØÓÚÕâÁ½¸ö²¹¶¡£¬Vidstedt×ܽáµÀ£º
±ÜÃâ´úÂëÖØ¸´£¬sun.misc.Unsafe½«È«²¿ÊµÏÖίÍиøjdk.internal.misc.Unsafe£¬ÕâÒâζ×ÅjavaÐéÄâ»ú(ÌØ±ðÊÇunsafe.cpp£©²»ÔÙÐèÒª¹ØÐÄs.m.UnsafeµÄʵÏÖ¡£
s.m.UnsafeµÄίÍз½·¨Í¨³£»á±»ÄÚÁª£¬µ«ÊÇΪÁ˱ÜÃâÐÔÄÜϽµµÄ·çÏÕ£¬ÈÔÈ»Ìí¼ÓÁË@ForceInline×¢½â
¸üÐÂÎĵµ£¬Ö¸Ã÷Óû§Ó¦¸ÃÈ·±£UnsafeÀàµÄ²ÎÊýÕýÈ·
²ÎÊý¼ì²é´ÓUnsage.cppÒÆÈëjava£¬¼ò»¯±¾µØ´úÂëÒÔ¼°ÔÊÐíJIT½øÒ»²½ÓÅ»¯
·ÅËÉÁËÌØ¶¨²ÎÊýµÄ¼ì²é£¬±È·½Ëµ×î½üÒýÈëµÄU.copySwapMemoryûÓмì²é¿ÕÖ¸Õë¡£¾ßÌåÔÒò¿ÉÒԲο¼j.i.m.U.checkPointerµÄÎĵµ¡£³ýÁËU.copySwapMemory£¬ÏÖÔÚUnsafeÀà·½·¨Ò²¶¼Ã»ÓжԲÎÊýÖ´ÐÐNULL¼ì²é
ÔÚU.copySwapMemoryÀàµÄ»ù´¡ÉÏ£¬¶Ôj.i.m.U.copyMemoryÔö¼ÓÁËÒ»¸ö²âÊÔ°¸Àý¡£ÇëËæÊ±ÌáÐÑÎҺϲ¢¹ýÀ´£¨±¾¸ÃÈç´Ë£©
ÔÚVidstedt¿´À´£¬UsageÀàµÄÇåÀíËãÊÇ¡°Ï൱¼¤½ø¡±ÁË£¬ÖµµÃ×¢ÒâµÄµØ·½ÓУº
Unsafe_·½·¨ÒÔ¼°unsafe.cppÖÐµÄÆäËû±¾µØ·½·¨±»ÉêÃ÷Ϊ¾²Ì¬·½·¨
ÐÂÔöunsafe.hpp´úÂëÎļþ£¬ÎļþÖÐÒÆÈëVMÆäËû×é¼þµÄһЩ·½·¨¡£ÒƳý²¿·Ö¡°extern¡±º¯ÊýÉùÃ÷£¨²»Òª¹ý¶ÈʹÓÃextern£©
¶ÔÓÚ²»ÔõôÓõ½µÄUNSAFE_LEAF£¬ÒƳý¾¯¸æÐÔÖʵÄ×¢ÊÍ£¨Ã»ÓбØÒª£¬Ö»ÊǸöVM_LEAF£©
һЩ¼òµ¥µÄleaf·½·¨Ê¹ÓÃUNSAFE_LEAF
UNSAFE_ENTRY/UNSAFE_END´úÂë¿éÐÂÔö´óÀ¨ºÅ£¬°ïÖú×Ô¶¯Ëõ½ø
ÒÆ³ýδʹÓõÄUnsafe_<...>##140ÐÎʽµÄº¯ÊýºÍºê
¸üкê²ÎÊý£¬Óëunsafe.cppµÄºê¶¨Òå±£³ÖÒ»ÖÂ
¸ü»»´ø¶ÏÑԵIJÎÊý¼ì²é£¬ÕýÈçÇ°ÃæÌá¼°£¬ÕâЩ¼ì²éÒÆÈëÁËj.i.m.Unsafe£¬ÒƳýËùÓÐs.m.UnsafeÏà¹ØµÄ´úÂë
Èí¼þÏêÇ飺http://www.infoq.com/articles/A-Post-Apocalyptic-sun.misc.Unsafe-World
ÏÂÔØµØÖ·£ºhttp://www.oracle.com/technetwork/java/javase/downloads/index.html
À´×Ô:¿ªÔ´ÖйúÉçÇø

