Java JNIÉî¶È·ÖÎöÓëʵ¼ù
Java JNIÊÇJava Native InterfaceµÄËõд£¬ÖÐÎÄ¿ÉÒëΪJava±¾µØµ÷Óá£Java Native Interface (JNI)±ê×¼³ÉΪjavaƽ̨µÄÒ»²¿·Ö£¬ËüÔÊÐíJava´úÂëºÍÆäËûÓïÑÔдµÄ´úÂë½øÐн»»¥¡£±¾ÎÄÏòÄúÏêϸ½éÉÜJava JNI¡£
Java »·¾³ºÍÓïÑÔ¶ÔÓÚÓ¦ÓóÌÐò¿ª·¢À´ËµÊǷdz£°²È«ºÍ¸ßЧµÄ¡£µ«ÊÇ£¬Ò»Ð©Ó¦ÓóÌÐòÈ´ÐèÒªÖ´Ðд¿ Java ³ÌÐòÎÞ·¨Íê³ÉµÄһЩÈÎÎñ£¬±ÈÈ磺
Óë¾ÉÓдúÂ뼯³É£¬±ÜÃâÖØбàд¡£
ʵÏÖ¿ÉÓÃÀà¿âÖÐËùȱÉٵŦÄÜ¡£¾ÙÀýÀ´Ëµ£¬ÔÚ Java ÓïÑÔÖÐʵÏÖ ping ʱ£¬Äú¿ÉÄÜÐèÒª Internet Control Message Protocol (ICMP) ¹¦ÄÜ£¬µ«»ù±¾Àà¿â²¢Î´ÌṩËü¡£
×îºÃÓëʹÓà C/C++ ±àдµÄ´úÂ뼯³É£¬ÒÔ³ä·Ö·¢¾òÐÔÄÜ»òÆäËûÓë»·¾³Ïà¹ØµÄϵͳÌØÐÔ¡£
½â¾öÐèÒª·Ç Java ´úÂëµÄÌØÊâÇé¿ö¡£¾ÙÀýÀ´Ëµ£¬ºËÐÄÀà¿âµÄʵÏÖ¿ÉÄÜÐèÒª¿ç°üµ÷ÓûòÕßÐèÒªÈƹýÆäËû Java °²È«ÐÔ¼ì²é¡£
JNI ÔÊÐíÄúÍê³ÉÕâЩÈÎÎñ¡£ËüÃ÷È··Ö¿ªÁË Java ´úÂëÓë±¾»ú´úÂë(C/C++)µÄÖ´ÐУ¬¶¨ÒåÁËÒ»¸öÇåÎúµÄ API ÔÚÕâÁ½ÕßÖ®¼ä½øÐÐͨÐÅ¡£´ÓºÜ´ó³Ì¶ÈÉÏ˵£¬Ëü±ÜÃâÁ˱¾»ú´úÂë¶Ô JVM µÄÖ±½ÓÄÚ´æÒýÓ㬴ӶøÈ·±£±¾»ú´úÂëÖ»Ðè±àдһ´Î£¬²¢ÇÒ¿ÉÒԿ粻ͬµÄ JVM ʵÏÖ»ò°æ±¾ÔËÐС£
½èÖú JNI£¬±¾»ú´úÂë¿ÉÒÔËæÒâÓë Java ¶ÔÏó½»»¥£¬»ñÈ¡ºÍÉè¼Æ×Ö¶ÎÖµ£¬ÒÔ¼°µ÷Ó÷½·¨£¬¶ø²»»áÏñ Java ´úÂëÖеÄÏàͬ¹¦ÄÜÄÇÑùÊܵ½Öî¶àÏÞÖÆ¡£ÕâÖÖ×ÔÓÉÊÇÒ»°ÑË«Èн££ºËüÎþÉü Java ´úÂëµÄ°²È«ÐÔ£¬»»È¡ÁËÍê³ÉÉÏÊöËùÁÐÈÎÎñµÄÄÜÁ¦¡£ÔÚÄúµÄÓ¦ÓóÌÐòÖÐʹÓà JNI ÌṩÁËÇ¿´óµÄ¡¢¶Ô»úÆ÷×ÊÔ´(ÄÚ´æ¡¢I/O µÈ)µÄµÍ¼¶·ÃÎÊ£¬Òò´ËÄú²»»áÏñÆÕͨ Java ¿ª·¢ÈËÔ±ÄÇÑùÊܵ½°²È«ÍøµÄ±£»¤¡£JNI µÄÁé»îÐÔºÍÇ¿´óÐÔ´øÀ´ÁËһЩ±à³Ìʵ¼ùÉϵķçÏÕ£¬±ÈÈçµ¼ÖÂÐÔÄܽϲ³öÏÖ bug ÉõÖÁ³ÌÐò±ÀÀ£¡£Äú±ØÐë¸ñÍâÁôÒâÓ¦ÓóÌÐòÖеĴúÂ룬²¢Ê¹ÓÃÁ¼ºÃµÄʵ¼ùÀ´±£ÕÏÓ¦ÓóÌÐòµÄ×ÜÌåÍêÕûÐÔ¡£
±¾ÎĽéÉÜ JNI Óû§×î³£Óöµ½µÄ 10 ´ó±àÂëºÍÉè¼Æ´íÎó¡£ÆäÄ¿±êÊÇ°ïÖúÄúÈÏʶµ½²¢±ÜÃâËüÃÇ£¬ÒÔ±ãÄú¿ÉÒÔ±àд°²È«¡¢¸ßЧ¡¢ÐÔÄܳöÖÚµÄ JNI ´úÂë¡£±¾ÎÄ»¹½«½éÉÜһЩÓÃÓÚÔÚдúÂë»òÒÑÓдúÂëÖвéÕÒÕâЩÎÊÌâµÄ¹¤¾ßºÍ¼¼ÇÉ£¬²¢Õ¹Ê¾ÈçºÎÓÐЧµØÓ¦ÓÃËüÃÇ¡£
Java JNI ±à³ÌȱÏÝ¿ÉÒÔ·ÖΪÁ½Àࣺ
ÐÔÄÜ£º´úÂëÄÜÖ´ÐÐËùÉè¼ÆµÄ¹¦ÄÜ£¬µ«ÔËÐлºÂý»òÕßÒÔijÖÖÐÎʽÍÏÂýÕû¸ö³ÌÐò¡£
ÕýÈ·ÐÔ£º´úÂëÓÐʱÄÜÕý³£ÔËÐУ¬µ«²»ÄÜ¿É¿¿µØÌṩËùÐèµÄ¹¦ÄÜ;×µÄÇé¿öÊÇÔì³É³ÌÐò±ÀÀ£»ò¹ÒÆð¡£
ÐÔÄÜȱÏÝ
³ÌÐòÔ±ÔÚʹÓà JNI ʱµÄ 5 ´óÐÔÄÜȱÏÝÈçÏ£º
¡ô²»»º´æ·½·¨ ID¡¢×ֶΠID ºÍÀà
¡ô´¥·¢Êý×鸱±¾
¡ô»Ø·Ã(Reaching back)¶ø²»ÊÇ´«µÝ²ÎÊý
¡ô´íÎóÈ϶¨±¾»ú´úÂëÓë Java ´úÂëÖ®¼äµÄ½çÏÞ
Ïà¹ØÎĵµ£º
ÔÚJavaÖÐÓÐ23ÖÐÉè¼Æģʽ£¬ÏÂÃæÖ»¶Ô²¿·Ö³£ÓõÄÉè¼Æģʽ½éÉÜһϣº
1.µ¥Àýģʽ£¨ÓеÄÊéÉÏ˵½Ðµ¥Ì¬Ä£Ê½Æäʵ¶¼Ò»Ñù£©
¸ÃģʽÖ÷ҪĿµÄÊÇʹÄÚ´æÖб£³Ö1¸ö¶ÔÏ󡣿´ÏÂÃæµÄÀý×Ó£º
package org.sp.singleton;
//·½·¨Ò»
public class Singleton {
//½«×ÔÉíµÄʵÀý¶ÔÏóÉèÖÃΪһ¸öÊôÐÔ,²¢¼ÓÉÏStaticºÍfinalÐÞÊηû
private static f ......
¶àÏ̵߳Äͬ²½ÒÀ¿¿µÄÊǶÔÏóËø»úÖÆ£¬synchronized¹Ø¼ü×ֵı³ºó¾ÍÊÇÀûÓÃÁË·âËøÀ´ÊµÏÖ¶Ô¹²Ïí×ÊÔ´µÄ»¥³â·ÃÎÊ¡£
ÏÂÃæÒÔÒ»¸ö¼òµ¥µÄʵÀýÀ´½øÐжԱȷÖÎö¡£ÊµÀýÒªÍê³ÉµÄ¹¤×÷·Ç³£¼òµ¥£¬¾ÍÊÇ´´½¨10¸öỊ̈߳¬Ã¿¸öÏ̶߳¼´òÓ¡´Ó0µ½99Õâ100¸öÊý×Ö£¬ÎÒÃÇÏ£ÍûÏß³ÌÖ®¼ä²»»á³öÏÖ½»²æÂÒÐò´òÓ¡£¬¶øÊÇ˳ÐòµØ´òÓ¡¡£
ÏÈÀ´¿´µÚÒ»¶Î´úÂ룬ÕâÀïÎÒÃÇÔÚru ......
RuntimeExceptionlÀàÐ͵ÄÒì³£Ó¦Óñê×¼µÄ³ÌÐòÉè¼Æ¼¼ÇÉÀ´Ô¤·À£¬¶ø²»ÊÇʹÓÃtry-catch»úÖƲ¶»ñ¡£Òþº¬Òì³£°üº¬ErrorsºÍRuntimeException£¬¶ÔÓÚºóÕßÓÃifÓï¾ä·ÀÖ¹²úÉú¡£Èç·ÃÎÊ¿ÉÄÜδÕýÈ·³õʼ»¯ÒýÓñäÁ¿Ç°£¬Ïȼì²éÊÇ·ñÖ¸Ïò¿ÕÖµ£»·ÃÎÊÊý×éʱ£¬Ïȼì²éϱêÊÇ·ñÔ½½ç¡£
×Ô¶¨ÒåÒì³££º´´½¨Ò»¸ö¼Ì³ÐExceptionµÄÀà»òÆäËûÒÑ´æÔÚµÄ×ÓÀ࣬´´½¨Ò ......
Ê×ÏÈ£¬java¶Ô¶ÔÏóºÍ»ù±¾ÀàÐ͵Ĵ¦ÀíÊDz»Ò»ÑùµÄ£¬ºÍCÓïÑÔÒ»Ñù£¬µ±°ÑJavaµÄ»ù±¾Êý¾ÝÀàÐÍ£¨Èçint£¬char£¬doubleµÈ£©×÷ΪÈë¿Ú²ÎÊý´«¸øº¯ÊýÌåµÄʱºò£¬´«ÈëµÄ²ÎÊýÔÚº¯ÊýÌåÄÚ²¿±ä³ÉÁ˾ֲ¿±äÁ¿£¬Õâ¸ö¾Ö²¿±äÁ¿ÊÇÊäÈë²ÎÊýµÄÒ»¸ö¿½±´£¬ËùÓеĺ¯ÊýÌåÄÚ²¿µÄ²Ù×÷¶¼ÊÇÕë¶ÔÕâ¸ö¿½±´µÄ²Ù×÷£¬º¯ÊýÖ´ÐнáÊøºó£¬Õâ¸ö¾Ö²¿±äÁ¿Ò²¾ÍÍê³ÉÁËËüµÄʹÃü£¬ ......
JavaµÄ¿çƽ̨ÊÇͨ¹ýJavaÐéÄâ»ú£¨JVM£©À´ÊµÏֵġ£
JavaÔ´ÎļþµÄ±àÒë¹ý³Ì
JavaÓ¦ÓóÌÐòµÄ¿ª·¢ÖÜÆÚ°üÀ¨±àÒë¡¢ÏÂÔØ¡¢½âÊͺÍÖ´Ðм¸¸ö²¿·Ö¡£Java±àÒë³ÌÐò½«JavaÔ´³ÌÐò·ÒëΪJVM¿ÉÖ´ÐдúÂë—×Ö½ÚÂë¡£ÕâÒ»±àÒë¹ý ......