{"id":10008401,"date":"2024-02-24T23:52:55","date_gmt":"2024-02-24T15:52:55","guid":{"rendered":"https:\/\/blog.itmax.cn\/?p=10008401"},"modified":"2024-02-24T23:52:55","modified_gmt":"2024-02-24T15:52:55","slug":"%e6%b7%b1%e5%85%a5%e6%b5%85%e5%87%bajvm%ef%bc%88%e5%85%ab%ef%bc%89%e4%b9%8b%e7%b1%bb%e5%8a%a0%e8%bd%bd%e5%99%a8","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10008401","title":{"rendered":"\u6df1\u5165\u6d45\u51faJVM\uff08\u516b\uff09\u4e4b\u7c7b\u52a0\u8f7d\u5668"},"content":{"rendered":"<p>\u524d\u6587\u5df2\u7ecf\u63cf\u8ff0Java\u6e90\u6587\u4ef6\u7ecf\u8fc7\u524d\u7aef\u7f16\u8bd1\u5668\u540e\u53d8\u6210\u5b57\u8282\u7801\u6587\u4ef6\uff0c\u5b57\u8282\u7801\u6587\u4ef6\u901a\u8fc7\u7c7b\u52a0\u8f7d\u5668\u7684\u7c7b\u52a0\u8f7d\u673a\u5236\u5728Java\u865a\u62df\u673a\u4e2d\u751f\u6210Class\u5bf9\u8c61<\/p>\n<p>\u524d\u6587<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=nPFxaWtZ73AhYTMfpBQORA%3D%3D.2y6kRMffgoTCytx2oHb1IgmrnXjJzxNf6v7vXKf5E7u1K7ze8MAZ2wUDdNVZsKB6\" rel=\"noopener noreferrer\">\u6df1\u5165\u6d45\u51faJVM\uff08\u516d\uff09\u4e4b\u524d\u7aef\u7f16\u8bd1\u8fc7\u7a0b\u4e0e\u8bed\u6cd5\u7cd6\u539f\u7406<\/a>\u91cd\u70b9\u63cf\u8ff0\u8fc7\u7f16\u8bd1\u7684\u8fc7\u7a0b<\/p>\n<p>\u524d\u6587<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=vxPLZ4%2FA8%2B0lWcxvtQC4qA%3D%3D.MxY3EnfrAfg4lwW6EOy6dSb%2FValFZQm2BiSz2LJT8dcXSt6sCjXs4sZByPibVEnk\" rel=\"noopener noreferrer\">\u6df1\u5165\u6d45\u51faJVM\uff08\u4e09\uff09\u4e4bHotSpot\u865a\u62df\u673a\u7c7b\u52a0\u8f7d\u673a\u5236<\/a>\u91cd\u70b9\u63cf\u8ff0\u8fc7\u7c7b\u52a0\u8f7d\u673a\u5236\u7684\u8fc7\u7a0b<\/p>\n<p>\u672c\u7bc7\u6587\u7ae0\u5c06\u91cd\u70b9\u804a\u804a\u7c7b\u52a0\u8f7d\u5668\uff0c<strong>\u56f4\u7ed5\u7c7b\u52a0\u8f7d\u5668\u6df1\u5165\u6d45\u51fa\u7684\u89e3\u6790\u7c7b\u52a0\u8f7d\u5668\u7684\u5206\u7c7b\u3001\u79cd\u7c7b\u3001\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u4ee5\u53ca\u4ece\u6e90\u7801\u65b9\u9762\u63a8\u5bfc\u51fa\u6211\u4eec\u7684\u7ed3\u8bba<\/strong><\/p>\n<h4>\u7c7b\u52a0\u8f7d\u5668\u7b80\u4ecb<\/h4>\n<blockquote><p>\u4ec0\u4e48\u662f\u7c7b\u52a0\u8f7d\u5668?<\/p><\/blockquote>\n<p>\u7c7b\u52a0\u8f7d\u5668\u901a\u8fc7\u7c7b\u7684\u5168\u9650\u5b9a\u7c7b\u540d\u8fdb\u884c\u7c7b\u52a0\u8f7d\u673a\u5236\u4ece\u800c\u751f\u6210Class\u5bf9\u8c61<\/p>\n<p>Class\u5bf9\u8c61\u4e2d\u5305\u542b\u8be5\u7c7b\u76f8\u5173\u7c7b\u4fe1\u606f\uff0c\u901a\u8fc7Class\u5bf9\u8c61\u80fd\u591f\u4f7f\u7528\u53cd\u5c04\u5728\u8fd0\u884c\u65f6\u9636\u6bb5\u52a8\u6001\u505a\u4e00\u4e9b\u4e8b\u60c5<\/p>\n<blockquote><p>\u663e\u793a\u52a0\u8f7d\u4e0e\u9690\u5f0f\u52a0\u8f7d<\/p><\/blockquote>\n<p>\u7c7b\u52a0\u8f7d\u5668\u6709\u4e24\u79cd\u65b9\u5f0f\u8fdb\u884c\u52a0\u8f7d\uff0c\u4e00\u79cd\u662f<strong>\u5728\u4ee3\u7801\u5c42\u9762\u663e\u793a\u7684\u8c03\u7528<\/strong>\uff0c\u53e6\u4e00\u79cd\u662f<strong>\u5f53\u7a0b\u5e8f\u9047\u5230\u521b\u5efa\u5bf9\u8c61\u7b49\u547d\u4ee4\u65f6\u81ea\u884c\u5224\u65ad\u8be5\u7c7b\u662f\u5426\u8fdb\u884c\u8fc7\u52a0\u8f7d\uff0c\u672a\u52a0\u8f7d\u5c31\u5148\u8fdb\u884c\u7c7b\u52a0\u8f7d<\/strong><\/p>\n<p>\u663e\u793a\u52a0\u8f7d\uff1a\u663e\u793a\u8c03\u7528ClassLoader\u52a0\u8f7dclass\u5bf9\u8c61<\/p>\n<p>\u9690\u5f0f\u52a0\u8f7d\uff1a\u4e0d\u663e\u793a\u8c03\u7528ClassLoader\u52a0\u8f7dclass\u5bf9\u8c61(\u56e0\u4e3a\u865a\u62df\u673a\u4f1a\u5728\u7b2c\u4e00\u6b21\u4f7f\u7528\u5230\u67d0\u4e2a\u7c7b\u65f6\u81ea\u52a8\u52a0\u8f7d\u8fd9\u4e2a\u7c7b)<\/p>\n<pre><code class=\"java\">\u00a0\/\/\u663e\u793a\u7c7b\u52a0\u8f7d  \u7b2c7\u7ae0\u865a\u62df\u673a\u7c7b\u52a0\u8f7d\u673a\u5236.User\u4e3a\u5168\u9650\u5b9a\u7c7b\u540d(\u5305\u540d+\u7c7b\u540d)\n\u00a0Class.forName(&quot;\u7b2c7\u7ae0\u865a\u62df\u673a\u7c7b\u52a0\u8f7d\u673a\u5236.User&quot;);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0\/\/\u9690\u5f0f\u7c7b\u52a0\u8f7d\n\u00a0new User(); \u00a0 \u00a0<\/code><\/pre>\n<blockquote><p>\u552f\u4e00\u6027\u4e0e\u547d\u540d\u7a7a\u95f4<\/p><\/blockquote>\n<p>\u5224\u65ad\u4e24\u4e2a\u7c7b\u662f\u5426\u5b8c\u5168\u76f8\u540c\u53ef\u80fd\u5e76\u4e0d\u662f\u6211\u4eec\u81ea\u8ba4\u4e3a\u7406\u89e3\u7684\u90a3\u6837\uff0c\u7c7b\u5728JVM\u4e2d\u7684\u552f\u4e00\u6027\u9700\u8981\u6839\u636e\u7c7b\u672c\u8eab\u548c\u52a0\u8f7d\u5b83\u7684\u7c7b\u52a0\u8f7d\u5668<\/p>\n<ul>\n<li>\n<p>\u552f\u4e00\u6027<\/p>\n<ul>\n<li><strong>\u6240\u6709\u7c7b\u90fd\u7531\u5b83\u672c\u8eab\u548c\u52a0\u8f7d\u5b83\u7684\u90a3\u4e2a\u7c7b\u5728JVM\u4e2d\u786e\u5b9a\u552f\u4e00\u6027<\/strong><\/li>\n<li>\u4e5f\u5c31\u662f\u8bf4\u5224\u65ad\u4fe9\u4e2a\u7c7b\u662f\u5426\u4e3a\u540c\u4e00\u4e2a\u7c7b\u65f6\uff0c\u5982\u679c\u5b83\u4eec\u7684\u7c7b\u52a0\u8f7d\u5668\u90fd\u4e0d\u540c\u90a3\u80af\u5b9a\u4e0d\u662f\u540c\u4e00\u4e2a\u7c7b<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u547d\u540d\u7a7a\u95f4<\/p>\n<ul>\n<li><strong>\u6bcf\u4e2a\u7c7b\u52a0\u8f7d\u6709\u81ea\u5df1\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u547d\u540d\u7a7a\u95f4\u7531\u6240\u6709\u7236\u7c7b\u52a0\u8f7d\u5668\u548c\u8be5\u52a0\u8f7d\u5668\u6240\u52a0\u8f7d\u7684\u7c7b\u7ec4\u6210<\/strong><\/li>\n<li>\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u4e0d\u5b58\u5728\u7c7b\u5b8c\u6574\u540d\u76f8\u540c\u7684\u4fe9\u4e2a\u7c7b<\/li>\n<li>\u4e0d\u540c\u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u5141\u8bb8\u5b58\u5728\u7c7b\u5b8c\u6574\u540d\u76f8\u540c\u7684\u4fe9\u4e2a\u7c7b\uff08\u591a\u4e2a\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u52a0\u8f7d\u540c\u4e00\u4e2a\u7c7b\u65f6\uff0c\u4f1a\u5728\u5404\u4e2a\u7c7b\u52a0\u8f7d\u5668\u4e2d\u751f\u6210\u5bf9\u5e94\u7684\u547d\u540d\uff0c\u4e14\u5b83\u4eec\u90fd\u4e0d\u662f\u540c\u4e00\u4e2a\u7c7b\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote><p>\u57fa\u672c\u7279\u5f81<\/p><\/blockquote>\n<p>\u7c7b\u52a0\u8f7d\u5668\u4e2d\u6709\u4e00\u4e9b\u57fa\u672c\u7279\u6027\uff0c\u6bd4\u5982\u5b50\u7c7b\u52a0\u8f7d\u5668\u53ef\u4ee5\u8bbf\u95ee\u7236\u7c7b\u52a0\u8f7d\u5668\u6240\u52a0\u8f7d\u7684\u7c7b\u3001\u7236\u7c7b\u52a0\u8f7d\u8fc7\u7684\u7c7b\u5b50\u7c7b\u4e0d\u518d\u52a0\u8f7d\u3001\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u7b49<\/p>\n<ul>\n<li>\n<p>\u53ef\u89c1\u6027<\/p>\n<ul>\n<li>\u5b50\u7c7b\u52a0\u8f7d\u5668\u53ef\u4ee5\u8bbf\u95ee\u7236\u7c7b\u52a0\u8f7d\u5668\u6240\u52a0\u8f7d\u7684\u7c7b*<\/li>\n<li>(\u547d\u540d\u7a7a\u95f4\u5305\u542b\u7236\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u7684\u7c7b)<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u5355\u4e00\u6027<\/p>\n<ul>\n<li>\u56e0\u4e3a\u53ef\u89c1\u6027\uff0c\u6240\u4ee5\u7236\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u8fc7\u7684\u7c7b\uff0c\u5b50\u7c7b\u52a0\u8f7d\u5668\u4e0d\u4f1a\u518d\u52a0\u8f7d<\/li>\n<li>\u540c\u4e00\u7ea7\u7684\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u53ef\u80fd\u90fd\u4f1a\u52a0\u8f7d\u540c\u4e00\u4e2a\u7c7b\uff0c\u56e0\u4e3a\u5b83\u4eec\u4e92\u4e0d\u53ef\u89c1<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b<\/p>\n<ul>\n<li>\u7531\u54ea\u4e2a\u7c7b\u52a0\u8f7d\u5668\u6765\u8fdb\u884c\u7c7b\u52a0\u8f7d\u7684\u4e00\u5957\u7b56\u7565\uff0c\u540e\u7eed\u4f1a\u8be6\u7ec6\u8bf4\u660e<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u7c7b\u52a0\u8f7d\u5668\u5206\u7c7b<\/h4>\n<p>\u7c7b\u52a0\u8f7d\u5668\u53ef\u4ee5\u5206\u6210\u4e24\u79cd\uff0c\u4e00\u79cd\u662f\u5f15\u5bfc\u7c7b\u7531\u975eJava\u8bed\u8a00\u5b9e\u73b0\u7684\uff0c\u53e6\u4e00\u79cd\u662f\u7531Java\u8bed\u8a00\u5b9e\u73b0\u7684\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668<\/p>\n<ul>\n<li>\u5f15\u5bfc\u7c7b\u52a0\u8f7d\u5668 (c\/c++\u5199\u7684Bootstrap ClassLoader)<\/li>\n<li>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\uff1a\u7531<code>ClassLoader<\/code>\u7c7b\u6d3e\u751f\u7684\u7c7b\u52a0\u8f7d\u5668\u7c7b(\u5305\u62ec\u6269\u5c55\u7c7b\uff0c\u7cfb\u7edf\u7c7b\uff0c\u7a0b\u5e8f\u5458\u81ea\u5b9a\u4e49\u52a0\u8f7d\u5668\u7b49)<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"596\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZD\" alt=\"image-20210425232253366.png\" title=\"image-20210425232253366.png\"><br \/>\u7cfb\u7edf\uff08\u5e94\u7528\u7a0b\u5e8f\uff09\u7c7b\u52a0\u8f7d\u5668\u548c\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u662fLauncher\u7684\u5185\u90e8\u7c7b\uff0c\u5b83\u4eec\u95f4\u63a5\u5b9e\u73b0\u4e86<code>ClassLoader<\/code><\/p>\n<blockquote><p>\u6ce8\u610f<\/p><\/blockquote>\n<p><img decoding=\"async\" width=\"723\" height=\"510\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZE\" alt=\"image-20210516203457475.png\" title=\"image-20210516203457475.png\" loading=\"lazy\"><br \/>\u5e73\u5e38\u8bf4\u7684\u7cfb\u7edf\uff08\u5e94\u7528\u7a0b\u5e8f\uff09\u7c7b\u52a0\u8f7d\u5668\u7684\u7236\u7c7b\u52a0\u8f7d\u5668\u662f\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\uff0c\u800c\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u7684\u7236\u7c7b\u52a0\u8f7d\u5668\u662f\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\uff0c\u90fd\u662f&#8221;\u903b\u8f91&#8221;\u4e0a\u7684\u7236\u7c7b\u52a0\u8f7d\u5668<\/p>\n<p>\u5b9e\u9645\u4e0a\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u548c\u7cfb\u7edf\uff08\u5e94\u7528\u7a0b\u5e8f\uff09\u7c7b\u52a0\u8f7d\u5668\u95f4\u63a5\u7ee7\u627f\u7684<code>ClassLoader<\/code>\u4e2d\u6709\u4e00\u4e2a\u5b57\u6bb5<code>parent<\/code>\u7528\u6765\u8868\u793a\u81ea\u5df1\u7684\u903b\u8f91\u7236\u7c7b\u52a0\u8f7d\u5668<\/p>\n<h4>\u7c7b\u52a0\u8f7d\u5668\u79cd\u7c7b<\/h4>\n<ul>\n<li>\n<p>\u542f\u52a8\uff08\u5f15\u5bfc\uff09\u7c7b\u52a0\u8f7d\u5668<\/p>\n<ul>\n<li>Bootstrap Classloader c++\u7f16\u5199\uff0c\u65e0\u6cd5\u76f4\u63a5\u83b7\u53d6<\/li>\n<li><strong>\u52a0\u8f7d\u6838\u5fc3\u5e93<code>&lt;JAVA_HOME&gt;\/lib\/\u90e8\u5206jar\u5305<\/code><\/strong><\/li>\n<li>\u4e0d\u7ee7\u627f<code>java.lang.ClassLoader<\/code>\uff0c\u6ca1\u6709\u7236\u7c7b\u52a0\u8f7d\u5668<\/li>\n<li>\u52a0\u8f7d\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u548c\u5e94\u7528\u7a0b\u5e8f\u7c7b\u52a0\u8f7d\u5668\uff0c\u5e76\u6307\u5b9a\u4e3a\u5b83\u4eec\u7684\u7236\u7c7b\u52a0\u8f7d\u5668<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668<\/p>\n<ul>\n<li>Extension Classloader<\/li>\n<li><strong>\u52a0\u8f7d\u6269\u5c55\u5e93<code>&lt;JAVA_HOME&gt;\/lib\/ext*.jar<\/code><\/strong><\/li>\n<li>\u95f4\u63a5\u7ee7\u627f<code>java.lang.ClassLoader<\/code>\uff0c\u7236\u7c7b\u52a0\u8f7d\u5668\u4e3a\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u5e94\u7528\u7a0b\u5e8f(\u7cfb\u7edf)\u7c7b\u52a0\u8f7d\u5668<\/p>\n<ul>\n<li>App(System) Classloader \u6700\u5e38\u7528\u7684\u52a0\u8f7d\u5668<\/li>\n<li><strong>\u8d1f\u8d23\u52a0\u8f7d\u73af\u5883\u53d8\u91cfclasspath\u6216java.class.path\u6307\u5b9a\u8def\u5f84\u4e0b\u7684\u7c7b\u5e93 \uff0c\u4e00\u822c\u52a0\u8f7d\u6211\u4eec\u7a0b\u5e8f\u4e2d\u81ea\u5b9a\u4e49\u7684\u7c7b<\/strong><\/li>\n<li>\u95f4\u63a5\u7ee7\u627f<code>java.lang.ClassLoader<\/code>\uff0c\u7236\u7c7b\u52a0\u8f7d\u5668\u4e3a\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668<\/li>\n<li>\u4f7f\u7528<code>ClassLoader.getSystemClassLoader()<\/code>\u83b7\u5f97<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668(\u5b9e\u73b0ClassLoader\u7c7b\uff0c\u91cd\u5199findClass\u65b9\u6cd5)<\/strong><\/li>\n<\/ul>\n<p>\u901a\u8fc7\u4ee3\u7801\u6765\u6f14\u793a:<\/p>\n<pre><code class=\"java\">\u00a0public class TestClassLoader {\n\u00a0 \u00a0 \u00a0public static void main(String[] args) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0URL[] urLs = Launcher.getBootstrapClassPath().getURLs();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u80fd\u52a0\u8f7d\u7684api\u8def\u5f84:\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/resources.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/rt.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/sunrsasign.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/jsse.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/jce.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/charsets.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/lib\/jfr.jar\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0file:\/D:\/Environment\/jdk1.8.0_191\/jre\/classes\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0*\/\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(&quot;\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u80fd\u52a0\u8f7d\u7684api\u8def\u5f84:&quot;);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0for (URL urL : urLs) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(urL);\n\u00a0 \u00a0 \u00a0 \u00a0  } \n\u00a0\u200b\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u80fd\u52a0\u8f7d\u7684api\u8def\u5f84:\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0D:\/Environment\/jdk1.8.0_191\/jre\/lib\/ext;C:\/WINDOWS\/Sun\/Java\/lib\/ext\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0*\/\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(&quot;\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u80fd\u52a0\u8f7d\u7684api\u8def\u5f84:&quot;);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0String property = System.getProperty(&quot;java.ext.dirs&quot;);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(property);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u52a0\u8f7d\u6211\u4eec\u81ea\u5b9a\u4e49\u7c7b\u7684\u7c7b\u52a0\u8f7d\u5668\u662fAppClassLoader,\u5b83\u662fLauncher\u7684\u5185\u90e8\u7c7b\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0ClassLoader appClassLoader = TestClassLoader.class.getClassLoader();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/sun.misc.Launcher$AppClassLoader@18b4aac2 \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(appClassLoader);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/AppClassLoader\u7684\u4e0a\u4e00\u5c42\u52a0\u8f7d\u5668\u662fExtClassLoader,\u5b83\u4e5f\u662fLauncher\u7684\u5185\u90e8\u7c7b\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0ClassLoader extClassloader = appClassLoader.getParent();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/sun.misc.Launcher$ExtClassLoader@511d50c0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(extClassloader);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u5b9e\u9645\u4e0a\u662f\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668,\u56e0\u4e3a\u5b83\u662fc\/c++\u5199\u7684,\u6240\u4ee5\u663e\u793anull\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0ClassLoader bootClassloader = extClassloader.getParent();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/null \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(bootClassloader);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/1\u53f7\u6d4b\u8bd5\uff1a\u57fa\u672c\u7c7b\u578b\u6570\u7ec4 \u7684\u7c7b\u52a0\u8f7d\u5668\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0int[] ints = new int[10];\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/null \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(ints.getClass().getClassLoader());\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/2\u53f7\u6d4b\u8bd5\uff1a\u7cfb\u7edf\u63d0\u4f9b\u7684\u5f15\u7528\u7c7b\u578b\u6570\u7ec4 \u7684\u7c7b\u52a0\u8f7d\u5668\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0String[] strings = new String[10];\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/null \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(strings.getClass().getClassLoader());\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/3\u53f7\u6d4b\u8bd5\uff1a\u81ea\u5b9a\u4e49\u5f15\u7528\u7c7b\u578b\u6570\u7ec4 \u7684\u7c7b\u52a0\u8f7d\u5668\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0TestClassLoader[] testClassLoaderArray = new TestClassLoader[10];\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/sun.misc.Launcher$AppClassLoader@18b4aac2 \u00a0 \u00a0 \u00a0 \n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(testClassLoaderArray.getClass().getClassLoader());\n\u00a0\u200b\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/4\u53f7\u6d4b\u8bd5\uff1a\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7684\u7c7b\u52a0\u8f7d\u5668\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/sun.misc.Launcher$AppClassLoader@18b4aac2\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(Thread.currentThread().getContextClassLoader());\n\u00a0 \u00a0  }\n\u00a0}<\/code><\/pre>\n<p>\u4ece\u4e0a\u9762\u53ef\u4ee5\u5f97\u51fa\u7ed3\u8bba<\/p>\n<ol>\n<li><strong>\u6570\u7ec4\u7c7b\u578b\u7684\u7c7b\u52a0\u8f7d\u5668\u662f\u6570\u7ec4\u5143\u7d20\u7684\u7c7b\u52a0\u8f7d\u5668<\/strong>\uff08\u901a\u8fc72\u53f7\u6d4b\u8bd5\u4e0e3\u53f7\u6d4b\u8bd5\u7684\u5bf9\u6bd4\uff09<\/li>\n<li><strong>\u57fa\u672c\u7c7b\u578b\u4e0d\u9700\u8981\u7c7b\u52a0\u8f7d<\/strong> \uff08\u901a\u8fc71\u53f7\u6d4b\u8bd5\u4e0e3\u53f7\u6d4b\u8bd5\u7684\u5bf9\u6bd4\uff09<\/li>\n<li><strong>\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668\u662f\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/strong> \uff08\u901a\u8fc74\u53f7\u6d4b\u8bd5\uff09<\/li>\n<\/ol>\n<h4>\u5173\u4e8e\u7c7b\u52a0\u8f7d\u6e90\u7801\u89e3\u6790<\/h4>\n<h5>\u7528\u6e90\u7801\u6765\u89e3\u91ca\u4e0a\u6587\u7ed3\u8bba<\/h5>\n<ul>\n<li><code>ClassLoader<\/code>\u4e2d\u7684\u5b98\u65b9\u6ce8\u91ca<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"723\" height=\"149\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZF\" alt=\"image-20210516222159652.png\" title=\"image-20210516222159652.png\" loading=\"lazy\"><\/p>\n<p><strong>\u865a\u62df\u673a\u81ea\u52a8\u751f\u6210\u7684\u4e00\u4e2a\u7c7b\uff0c\u7ba1\u7406\u6570\u7ec4\uff0c\u4f1a\u5bf9\u8fd9\u4e2a\u7c7b\u8fdb\u884c\u7c7b\u52a0\u8f7d<\/strong><\/p>\n<p><strong>\u5bf9\u6570\u7ec4\u7c7b\u7c7b\u52a0\u8f7d\u5668\u662f\u6570\u7ec4\u5143\u7d20\u7684\u7c7b\u52a0\u8f7d\u5668<\/strong><\/p>\n<p><strong>\u5982\u679c\u6570\u7ec4\u5143\u7d20\u662f\u57fa\u672c\u7c7b\u578b\u5219\u4e0d\u4f1a\u6709\u7c7b\u52a0\u8f7d\u5668<\/strong><\/p>\n<ul>\n<li>\u6e90\u7801\u89e3\u91ca\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u7684\u7236\u7c7b\u662fnull<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"723\" height=\"395\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZG\" alt=\"image-20210516221509952.png\" title=\"image-20210516221509952.png\" loading=\"lazy\"><\/p>\n<ul>\n<li>\u6e90\u7801\u89e3\u91ca\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u7684\u7236\u7c7b\u662f\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"723\" height=\"416\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZH\" alt=\"image-20210516214113943.png\" title=\"image-20210516214113943.png\" loading=\"lazy\"><\/p>\n<ul>\n<li>\u6e90\u7801\u89e3\u91ca\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668\u662f\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"723\" height=\"337\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZI\" alt=\"image-20210516221726540.png\" title=\"image-20210516221726540.png\" loading=\"lazy\"><\/p>\n<h5>ClassLoader\u4e3b\u8981\u65b9\u6cd5<\/h5>\n<blockquote><p>loadClass()<\/p><\/blockquote>\n<p><code>ClassLoader<\/code>\u7684 <code>loadClass<\/code>\u65b9\u6cd5\uff08\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u7684\u6e90\u7801\uff09<\/p>\n<pre><code class=\"java\">\u00a0public Class&lt;?&gt; loadClass(String name) throws ClassNotFoundException {\n\u00a0 \u00a0 \u00a0return loadClass(name, false);\n\u00a0}<\/code><\/pre>\n<pre><code class=\"java\">\u00a0                                            \/\/\u53c2\u6570resolve:\u662f\u5426\u8981\u89e3\u6790\u7c7b\n\u00a0protected Class&lt;?&gt; loadClass(String name, boolean resolve)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0throws ClassNotFoundException\n\u00a0 \u00a0  {\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/\u52a0\u9501\u540c\u6b65 \u4fdd\u8bc1\u53ea\u52a0\u8f7d\u4e00\u6b21\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0synchronized (getClassLoadingLock(name)) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ \u9996\u5148\u68c0\u67e5\u8fd9\u4e2aclass\u662f\u5426\u5df2\u7ecf\u52a0\u8f7d\u8fc7\u4e86\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Class&lt;?&gt; c = findLoadedClass(name);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (c == null) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0long t0 = System.nanoTime();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0try {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ c==null\u8868\u793a\u6ca1\u6709\u52a0\u8f7d\uff0c\u5982\u679c\u6709\u7236\u7c7b\u7684\u52a0\u8f7d\u5668\u5219\u8ba9\u7236\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (parent != null) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0c = parent.loadClass(name, false);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  } else {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u5982\u679c\u7236\u7c7b\u7684\u52a0\u8f7d\u5668\u4e3a\u7a7a \u5219\u8bf4\u660e\u9012\u5f52\u5230bootStrapClassloader\u4e86\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u5219\u59d4\u6258\u7ed9BootStrap\u52a0\u8f7d\u5668\u52a0\u8f7d\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/bootStrapClassloader\u6bd4\u8f83\u7279\u6b8a\u65e0\u6cd5\u901a\u8fc7get\u83b7\u53d6\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0c = findBootstrapClassOrNull(name);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  } catch (ClassNotFoundException e) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u7236\u7c7b\u65e0\u6cd5\u52a0\u8f7d\u629b\u51fa\u5f02\u5e38\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u5982\u679c\u7236\u7c7b\u52a0\u8f7d\u5668\u4ecd\u7136\u6ca1\u6709\u52a0\u8f7d\u8fc7\uff0c\u5219\u5c1d\u8bd5\u81ea\u5df1\u53bb\u52a0\u8f7dclass\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (c == null) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0long t1 = System.nanoTime();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0c = findClass(name);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sun.misc.PerfCounter.getFindClasses().increment();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/\u662f\u5426\u8981\u89e3\u6790\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (resolve) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0resolveClass(c);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return c;\n\u00a0 \u00a0 \u00a0 \u00a0  }\n\u00a0}<\/code><\/pre>\n<p><strong>\u5148\u9012\u5f52\u4ea4\u7ed9\u7236\u7c7b\u52a0\u8f7d\u5668\u53bb\u52a0\u8f7d\uff0c\u7236\u7c7b\u52a0\u8f7d\u5668\u672a\u52a0\u8f7d\u518d\u7531\u81ea\u5df1\u52a0\u8f7d<\/strong><\/p>\n<blockquote><p>findClass()<\/p><\/blockquote>\n<p><code>ClassLoader<\/code>\u7684<code>findClass()<\/code><\/p>\n<pre><code class=\"java\">\u00a0    protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0throw new ClassNotFoundException(name);\n\u00a0 \u00a0  }<\/code><\/pre>\n<p>\u7531\u5b50\u7c7b<code>URLClassLoader<\/code>\u91cd\u5199findClass\u53bb\u5bfb\u627e\u7c7b\u7684\u89c4\u5219<\/p>\n<p><img decoding=\"async\" width=\"723\" height=\"345\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZJ\" alt=\"image-20210516225918213.png\" title=\"image-20210516225918213.png\" loading=\"lazy\"><\/p>\n<p>\u6700\u540e\u90fd\u4f1a\u6765\u5230<code>defineClass()<\/code>\u65b9\u6cd5<\/p>\n<blockquote><p>defineClass()<\/p><\/blockquote>\n<pre><code class=\"java\">\u00a0protected final Class&lt;?&gt; defineClass(String name, byte[] b, int off, int len)<\/code><\/pre>\n<p>\u6839\u636e\u4eceoff\u5f00\u59cb\u957f\u5ea6\u4e3alen\u5b9a\u5b57\u8282\u6570\u7ec4b\u8f6c\u6362\u4e3aClass\u5b9e\u4f8b<\/p>\n<p><strong>\u5728\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u65f6\uff0c\u8986\u76d6<code>findClass()<\/code>\u7f16\u5199\u52a0\u8f7d\u89c4\u5219\uff0c\u53d6\u5f97\u8981\u52a0\u8f7d\u7684\u7c7b\u7684\u5b57\u8282\u7801\u540e\u8f6c\u6362\u4e3a\u6d41\u8c03\u7528<code>defineClass()<\/code>\u751f\u6210Class\u5bf9\u8c61<\/strong><\/p>\n<blockquote><p>resolveClass()<\/p><\/blockquote>\n<pre><code class=\"java\">\u00a0    protected final void resolveClass(Class&lt;?&gt; c) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0resolveClass0(c);\n\u00a0 \u00a0  }<\/code><\/pre>\n<p>\u4f7f\u7528\u8be5\u65b9\u6cd5\u53ef\u4ee5\u5728\u751f\u6210Class\u5bf9\u8c61\u540e\uff0c\u89e3\u6790\u7c7b(\u7b26\u53f7\u5f15\u7528 -&gt; \u76f4\u63a5\u5f15\u7528)<\/p>\n<blockquote><p>findLoadedClass()<\/p><\/blockquote>\n<pre><code class=\"java\">\u00a0    protected final Class&lt;?&gt; findLoadedClass(String name) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (!checkName(name))\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return null;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0return findLoadedClass0(name);\n\u00a0 \u00a0  }<\/code><\/pre>\n<p>\u5982\u679c\u52a0\u8f7d\u8fc7\u67d0\u4e2a\u7c7b\u5219\u8fd4\u56deClass\u5bf9\u8c61\u5426\u5219\u8fd4\u56denull<\/p>\n<h5>Class.forName()\u4e0eClassLoader.loadClass()\u533a\u522b<\/h5>\n<ul>\n<li>\n<p>Class.forName()<\/p>\n<ul>\n<li>\u4f20\u5165\u4e00\u4e2a\u7c7b\u7684\u5168\u9650\u5b9a\u540d\u8fd4\u56de\u4e00\u4e2aClass\u5bf9\u8c61<\/li>\n<li><strong>\u5c06Class\u6587\u4ef6\u52a0\u8f7d\u5230\u5185\u5b58\u65f6\u4f1a\u521d\u59cb\u5316\uff0c\u4e3b\u52a8\u5f15\u7528<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>\n<p>ClassLoader.loadClass()<\/p>\n<ul>\n<li>\u9700\u8981class loader\u5bf9\u8c61\u8c03\u7528<\/li>\n<li>\u901a\u8fc7\u4e0a\u9762\u7684\u6e90\u7801\u5206\u6790\u53ef\u4ee5\u77e5\u9053\uff0c\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u8c03\u7528loadClass\uff0c<strong>\u53ea\u662f\u5c06Class\u6587\u4ef6\u52a0\u8f7d\u5230\u5185\u5b58\uff0c\u4e0d\u4f1a\u521d\u59cb\u5316\u548c\u89e3\u6790\uff0c\u76f4\u5230\u8fd9\u4e2a\u7c7b\u7b2c\u4e00\u6b21\u4f7f\u7528\u624d\u8fdb\u884c\u521d\u59cb\u5316<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b<\/h4>\n<p>\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u6e90\u7801\u5b9e\u73b0\u5bf9\u5e94<code>ClassLoader<\/code>\u7684<code>loadClass()<\/code><\/p>\n<ul>\n<li>\n<p>\u5206\u6790\uff1a<\/p>\n<ol>\n<li>\u5148\u68c0\u67e5\u8fd9\u4e2a\u7c7b\u662f\u5426\u52a0\u8f7d\u8fc7<\/li>\n<li>\n<p>\u6ca1\u6709\u52a0\u8f7d\u8fc7\uff0c\u67e5\u770b\u7236\u7c7b\u52a0\u8f7d\u5668\u662f\u5426\u4e3a\u7a7a\uff0c<\/p>\n<p>\u5982\u679c\u4e0d\u4e3a\u7a7a\uff0c\u5c31\u4ea4\u7ed9\u7236\u7c7b\u52a0\u8f7d\u5668\u53bb\u52a0\u8f7d\uff08\u9012\u5f52\uff09\uff0c<\/p>\n<p>\u5982\u679c\u4e3a\u7a7a\uff0c\u8bf4\u660e\u5df2\u7ecf\u5230\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u4e86\uff08\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u4e0d\u80fdget\u56e0\u4e3a\u662fc++\u5199\u7684\uff09<\/p>\n<\/li>\n<li>\u5982\u679c\u7236\u7c7b\u52a0\u8f7d\u5668\u6ca1\u6709\u52a0\u8f7d\u8fc7\uff0c\u5219\u9012\u5f52\u56de\u6765\u81ea\u5df1\u52a0\u8f7d<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u4e3e\u4f8b<\/p>\n<ol>\n<li>\u5047\u5982\u6211\u73b0\u5728\u81ea\u5df1\u5b9a\u4e49\u4e00\u4e2aMyString\u7c7b\uff0c\u5b83\u4f1a\u81ea\u5df1\u627e\uff08\u5148\u5728\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u4e2d\u627e\uff0c\u7136\u540e\u5728\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u4e2d\u627e\uff0c\u6700\u540e\u53bb\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u4e2d\u627e\uff0c\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u65e0\u6cd5\u52a0\u8f7d\u7136\u540e\u9000\u56de\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\uff0c\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u65e0\u6cd5\u52a0\u8f7d\u7136\u540e\u9000\u56de\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\uff0c\u7136\u540e\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u5c31\u5b8c\u6210\u52a0\u8f7d\uff09<\/li>\n<li>\n<p>\u6211\u4eec\u90fd\u77e5\u9053Java\u6709java.lang.String\u8fd9\u4e2a\u7c7b<\/p>\n<p>\u90a3\u6211\u518d\u521b\u5efa\u4e00\u4e2ajava.lang.String\u8fd0\u884c\u65f6\uff0c\u62a5\u9519<br \/><img decoding=\"async\" width=\"723\" height=\"353\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZK\" alt=\"image-20200328155339760.png\" title=\"image-20200328155339760.png\" loading=\"lazy\"><\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<pre><code>    \n\n\n    \u53ef\u662f\u6211\u660e\u660e\u5199\u4e86main\u65b9\u6cd5\n\n    \u8fd9\u662f\u56e0\u4e3a**\u7c7b\u88c5\u8f7d\u5668\u7684\u6c99\u7bb1\u5b89\u5168\u673a\u5236**\n\n    \u5f88\u660e\u663e\u8fd9\u91cc\u7684\u62a5\u9519\u662f\u56e0\u4e3a\u5b83\u627e\u5230\u7684\u662f\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u4e2d\u7684java.lang.String\u800c\u4e0d\u662f\u5728\u5e94\u7528\u7a0b\u5e8f\u7c7b\u52a0\u8f7d\u5668\u4e2d\u7684java.lang.String(\u6211\u4eec\u5199\u7684)\n\n    \u800c\u4e14\u6838\u5fc3\u7c7b\u5e93\u7684\u5305\u540d\u4e5f\u662f\u88ab\u7981\u6b62\u4f7f\u7528\u7684\n    ![image-20210425231816778.png](\/img\/bVdbwZL)\n    \n\n\n\n\n**\u7c7b\u88c5\u8f7d\u5668\u7684\u52a0\u8f7d\u673a\u5236\uff1a\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668-&gt;\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668-&gt;\u5e94\u7528\u7a0b\u5e8f\u7c7b\u52a0\u8f7d\u5668**\n\n3.  \u5982\u679c\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u91cd\u5199`loadClass`\u4e0d\u4f7f\u7528\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u662f\u5426\u5c31\u80fd\u591f\u7528\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u6838\u5fc3\u7c7b\u5e93\u4e86\u5462?\n\n    **JDK\u4e3a\u6838\u5fc3\u7c7b\u5e93\u63d0\u4f9b\u4e00\u5c42\u4fdd\u62a4\u673a\u5236,\u4e0d\u7ba1\u7528\u4ec0\u4e48\u7c7b\u52a0\u8f7d\u5668\u6700\u7ec8\u90fd\u4f1a\u8c03\u7528`defineClass()`,\u8be5\u65b9\u6cd5\u4f1a\u6267\u884c`preDefineClass()`\uff0c\u5b83\u63d0\u4f9b\u5bf9JDK\u6838\u5fc3\u7c7b\u5e93\u7684\u4fdd\u62a4**\n    ![image-20210517103634644.png](\/img\/bVdbwZM)\n\n    \n    \n\n<\/code><\/pre>\n<p>&lt;!&#8212;-&gt;<\/p>\n<ul>\n<li>\n<p>\u4f18\u70b9<\/p>\n<ol>\n<li><strong>\u9632\u6b62\u91cd\u590d\u52a0\u8f7d\u540c\u4e00\u4e2aclass\u6587\u4ef6<\/strong><\/li>\n<li><strong>\u4fdd\u8bc1\u6838\u5fc3\u7c7b\u4e0d\u80fd\u88ab\u7be1\u6539<\/strong><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u7f3a\u70b9<\/p>\n<ul>\n<li>\n<p><strong>\u7236\u7c7b\u52a0\u8f7d\u5668\u65e0\u6cd5\u8bbf\u95ee\u5b50\u7c7b\u52a0\u8f7d\u5668<\/strong><\/p>\n<ul>\n<li>\u6bd4\u5982\u7cfb\u7edf\u7c7b\u4e2d\u63d0\u4f9b\u4e00\u4e2a\u63a5\u53e3\uff0c\u5b9e\u73b0\u8fd9\u4e2a\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\u9700\u8981\u5728\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\uff0c\u800c\u8be5\u63a5\u53e3\u63d0\u4f9b\u9759\u6001\u5de5\u5382\u65b9\u6cd5\u7528\u4e8e\u8fd4\u56de\u63a5\u53e3\u7684\u5b9e\u73b0\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4f46\u7531\u4e8e\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\u65e0\u6cd5\u8bbf\u95ee\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\uff0c\u8fd9\u65f6\u9759\u6001\u5de5\u5382\u65b9\u6cd5\u5c31\u65e0\u6cd5\u521b\u5efa\u7531\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u7684\u5b9e\u4f8b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Java\u865a\u62df\u673a\u89c4\u8303\u53ea\u662f\u5efa\u8bae\u4f7f\u7528\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\uff0c\u4e0d\u662f\u4e00\u5b9a\u8981\u4f7f\u7528<\/p>\n<ul>\n<li>Tomcat\u4e2d\u662f\u7531\u81ea\u5df1\u5148\u53bb\u52a0\u8f7d\uff0c\u52a0\u8f7d\u5931\u8d25\u518d\u7531\u7236\u7c7b\u52a0\u8f7d\u5668\u53bb\u52a0\u8f7d<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668<\/h4>\n<ol>\n<li>\u7ee7\u627f<code>ClassLoader<\/code>\u7c7b<\/li>\n<li>\n<p>\u53ef\u4ee5\u8986\u5199<code>loadClass<\/code>\u65b9\u6cd5\uff0c\u4e5f\u53ef\u4ee5\u8986\u5199<code>findClass<\/code>\u65b9\u6cd5<\/p>\n<ul>\n<li>\u5efa\u8bae\u8986\u5199<code>findClass<\/code>\u65b9\u6cd5\uff0c\u56e0\u4e3aloadClass\u662f\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u5b9e\u73b0\u7684\u65b9\u6cd5\uff0c\u5176\u4e2d\u7236\u7c7b\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u4e0d\u5230\u65f6\u4f1a\u8c03\u7528<code>findClass<\/code>\u5c1d\u8bd5\u81ea\u5df1\u52a0\u8f7d<\/li>\n<\/ul>\n<\/li>\n<li>\u7f16\u5199\u597d\u540e\u8c03\u7528<code>loadClass<\/code>\u65b9\u6cd5\u6765\u5b9e\u73b0\u7c7b\u52a0\u8f7d<\/li>\n<\/ol>\n<blockquote><p>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u4ee3\u7801<\/p><\/blockquote>\n<pre><code class=\"java\">public class MyClassLoader extends ClassLoader {\n\n    \/**\n     * \u5b57\u8282\u7801\u6587\u4ef6\u8def\u5f84\n     *\/\n    private final String codeClassPath;\n\n    public MyClassLoader(String codeClassPath) {\n        this.codeClassPath = codeClassPath;\n    }\n\n    @Override\n    protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException {\n        \/\/\u5b57\u8282\u7801\u6587\u4ef6\u5b8c\u5168\u8def\u5f84\n        String path = codeClassPath + name + &quot;.class&quot;;\n        System.out.println(path);\n\n        Class&lt;?&gt; aClass = null;\n        try (\n                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));\n                ByteArrayOutputStream baos = new ByteArrayOutputStream()\n        ) {\n            int len = -1;\n            byte[] bytes = new byte[1024];\n            while ((len = bis.read(bytes)) != -1) {\n                baos.write(bytes,0,len);\n            }\n            byte[] classCode = baos.toByteArray();\n            \/\/\u7528\u5b57\u8282\u7801\u6d41 \u521b\u5efa Class\u5bf9\u8c61\n            aClass = defineClass(null, classCode, 0, classCode.length);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return aClass;\n    }\n}<\/code><\/pre>\n<blockquote><p>\u5ba2\u6237\u7aef\u8c03\u7528\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u7c7b<\/p><\/blockquote>\n<pre><code class=\"java\">public class Client {\n    public static void main(String[] args) {\n        MyClassLoader myClassLoader = new MyClassLoader(&quot;C:\/&quot;);\n        try {\n            Class&lt;?&gt; classLoader = myClassLoader.loadClass(&quot;HotTest&quot;);\n            System.out.println(&quot;\u7c7b\u52a0\u8f7d\u5668\u4e3a:&quot; + classLoader.getClassLoader().getClass().getName());\n            System.out.println(&quot;\u7236\u7c7b\u52a0\u8f7d\u5668\u4e3a&quot; + classLoader.getClassLoader().getParent().getClass().getName());\n        } catch (ClassNotFoundException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/pre>\n<p>\u8bb0\u5f97\u5bf9\u8981\u52a0\u8f7d\u7684\u7c7b\u5148\u8fdb\u884c\u7f16\u8bd1<\/p>\n<p><img decoding=\"async\" width=\"723\" height=\"294\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZN\" alt=\"image-20210517123408569.png\" title=\"image-20210517123408569.png\" loading=\"lazy\"><\/p>\n<ul>\n<li>\n<p>\u6ce8\u610f:<\/p>\n<ul>\n<li>\u8981\u52a0\u8f7d\u7684\u7c7b\u4e0d\u8981\u653e\u5728\u7236\u7c7b\u52a0\u8f7d\u5668\u53ef\u4ee5\u52a0\u8f7d\u7684\u76ee\u5f55\u4e0b<\/li>\n<li>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u7236\u7c7b\u52a0\u8f7d\u5668\u4e3a\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/li>\n<li>JVM\u6240\u6709\u7c7b\u7c7b\u52a0\u8f7d\u90fd\u4f7f\u7528loadClass<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote><p>\u89e3\u91ca\u5982\u679c\u7c7b\u52a0\u8f7d\u5668\u4e0d\u540c\u90a3\u4e48\u5b83\u4eec\u80af\u5b9a\u4e0d\u662f\u540c\u4e00\u4e2a\u7c7b<\/p><\/blockquote>\n<pre><code class=\"java\">    MyClassLoader myClassLoader1 = new MyClassLoader(&quot;D:\/\u4ee3\u7801\/JavaVirtualMachineHotSpot\/src\/main\/java\/&quot;);\n        MyClassLoader myClassLoader2 = new MyClassLoader(&quot;D:\/\u4ee3\u7801\/JavaVirtualMachineHotSpot\/src\/main\/java\/&quot;);\n        try {\n            Class&lt;?&gt; aClass1 = myClassLoader1.findClass(&quot;HotTest&quot;);\n            Class&lt;?&gt; aClass2 = myClassLoader2.findClass(&quot;HotTest&quot;);\n            System.out.println(aClass1 == aClass2);\/\/false\n        } catch (ClassNotFoundException e) {\n            e.printStackTrace();\n        }<\/code><\/pre>\n<ul>\n<li>\n<p>\u4f18\u70b9<\/p>\n<ul>\n<li>\u9694\u79bb\u52a0\u8f7d\u7c7b (\u5404\u4e2a\u4e2d\u95f4\u4ef6jar\u5305\u4e2d\u7c7b\u540d\u53ef\u80fd\u76f8\u540c,\u4f46\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u4e0d\u540c)<\/li>\n<li>\u4fee\u6539\u7c7b\u52a0\u8f7d\u65b9\u5f0f<\/li>\n<li>\u6269\u5c55\u52a0\u8f7d\u6e90 (\u53ef\u4ee5\u4ece\u7f51\u7edc,\u6570\u636e\u5e93\u4e2d\u8fdb\u884c\u52a0\u8f7d)<\/li>\n<li>\u9632\u6b62\u6e90\u7801\u6cc4\u6f0f (Java\u53cd\u7f16\u8bd1\u5bb9\u6613,\u53ef\u4ee5\u7f16\u8bd1\u65f6\u8fdb\u884c\u52a0\u5bc6,\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u89e3\u7801\u5b57\u8282\u7801)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>\u70ed\u66ff\u6362<\/h4>\n<p><strong>\u70ed\u66ff\u6362: \u670d\u52a1\u4e0d\u4e2d\u65ad\uff0c\u4fee\u6539\u4f1a\u7acb\u5373\u8868\u73b0\u5728\u8fd0\u884c\u7684\u7cfb\u7edf\u4e0a<\/strong><\/p>\n<p>\u5bf9Java\u6765\u8bf4\uff0c\u5982\u679c\u4e00\u4e2a\u7c7b\u88ab\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\u8fc7\u4e86\uff0c\u5c31\u65e0\u6cd5\u88ab\u518d\u52a0\u8f7d\u4e86<\/p>\n<p>\u4f46\u662f\u5982\u679c\u6bcf\u6b21\u52a0\u8f7d\u8fd9\u4e2a\u7c7b\u7684\u7c7b\u52a0\u8f7d\u4e0d\u540c\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5b9e\u73b0\u70ed\u66ff\u6362<\/p>\n<p>\u8fd8\u662f\u4f7f\u7528\u4e0a\u9762\u5199\u597d\u7684\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668<\/p>\n<pre><code class=\"java\">        \/\/\u6d4b\u8bd5\u70ed\u66ff\u6362\n        try {\n            while (true){\n                MyClassLoader myClassLoader = new MyClassLoader(&quot;D:\/\u4ee3\u7801\/JavaVirtualMachineHotSpot\/src\/main\/java\/&quot;);\n                \n                Class&lt;?&gt; aClass = myClassLoader.findClass(&quot;HotTest&quot;);\n                Method hot = aClass.getMethod(&quot;hot&quot;);\n                Object instance = aClass.newInstance();\n                Object invoke = hot.invoke(instance);\n                TimeUnit.SECONDS.sleep(3);\n            }\n        } catch (Exception e){\n            e.printStackTrace();\n        }<\/code><\/pre>\n<p>\u901a\u8fc7\u53cd\u5c04\u8c03\u7528HotTest\u7c7b\u7684hot\u65b9\u6cd5<\/p>\n<p>\u4e2d\u9014\u4fee\u6539hot\u65b9\u6cd5\u5e76\u91cd\u65b0\u7f16\u8bd1<\/p>\n<p><img decoding=\"async\" width=\"723\" height=\"527\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdbwZO\" alt=\"image-20210517124720782.png\" title=\"image-20210517124720782.png\" loading=\"lazy\"><\/p>\n<h3>\u603b\u7ed3<\/h3>\n<p>\u672c\u7bc7\u6587\u7ae0\u56f4\u7ed5\u7c7b\u52a0\u8f7d\u5668\u6df1\u5165\u6d45\u51fa\u7684\u89e3\u6790\u7c7b\u52a0\u8f7d\u5668\u7684\u5206\u7c7b\u4e0e\u79cd\u7c7b\u3001\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u3001\u901a\u8fc7\u6e90\u7801\u89e3\u6790\u8bc1\u5b9e\u6211\u4eec\u7684\u89c2\u70b9\u3001\u6700\u540e\u8fd8\u81ea\u5b9a\u4e49\u7684\u7c7b\u52a0\u8f7d\u5668\u548c\u8bf4\u660e\u70ed\u66ff\u6362<\/p>\n<p><strong>\u7c7b\u52a0\u8f7d\u5668\u5c06\u5b57\u8282\u7801\u6587\u4ef6\u8fdb\u884c\u7c7b\u52a0\u8f7d\u673a\u5236\u751f\u6210Class\u5bf9\u8c61\u4ece\u800c\u52a0\u8f7d\u5230Java\u865a\u62df\u673a\u4e2d<\/strong><\/p>\n<p><strong>\u7c7b\u52a0\u8f7d\u53ea\u4f1a\u8fdb\u884c\u4e00\u6b21\uff0c\u80fd\u591f\u663e\u793a\u8c03\u7528\u6267\u884c\u6216\u8005\u5728\u9047\u5230\u521b\u5efa\u5bf9\u8c61\u7684\u5b57\u8282\u7801\u547d\u4ee4\u65f6\u9690\u5f0f\u5224\u65ad\u662f\u5426\u8fdb\u884c\u8fc7\u7c7b\u52a0\u8f7d<\/strong><\/p>\n<p><strong>\u7c7b\u52a0\u8f7d\u5668\u5206\u4e3a\u975eJava\u8bed\u8a00\u5b9e\u73b0\u7684\u5f15\u5bfc\u7c7b\u52a0\u8f7d\u5668\u548cJava\u8bed\u8a00\u5b9e\u73b0\u7684\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\uff0c\u5176\u4e2dJDK\u4e2d\u5b9e\u73b0\u4e86\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u4e2d\u7684\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u548c\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/strong><\/p>\n<p><strong>\u5f15\u5bfc\u7c7b\u52a0\u8f7d\u5668\u7528\u6765\u52a0\u8f7dJava\u7684\u6838\u5fc3\u7c7b\u5e93\uff0c\u5b83\u7684\u5b50\u7c7b\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\u7528\u6765\u52a0\u8f7d\u6269\u5c55\u7c7b\uff0c\u6269\u5c55\u7c7b\u7684\u5b50\u7c7b\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\u5e38\u7528\u4e8e\u52a0\u8f7d\u7a0b\u5e8f\u4e2d\u81ea\u5b9a\u4e49\u7684\u7c7b\uff08\u8fd9\u91cc\u7684\u7236\u5b50\u7c7b\u662f\u903b\u8f91\u7684\uff0c\u5e76\u4e0d\u662f\u4ee3\u7801\u5c42\u9762\u7684\u7ee7\u627f\uff09<\/strong><\/p>\n<p><strong>\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u8ba9\u7236\u7c7b\u52a0\u8f7d\u5668\u4f18\u5148\u8fdb\u884c\u52a0\u8f7d\uff0c\u65e0\u6cd5\u52a0\u8f7d\u518d\u4ea4\u7ed9\u5b50\u7c7b\u52a0\u8f7d\u5668\u8fdb\u884c\u52a0\u8f7d\uff1b\u901a\u8fc7\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u548c\u6c99\u7bb1\u5b89\u5168\u673a\u5236\u6765\u4fdd\u62a4\u6838\u5fc3\u7c7b\u5e93\u4e0d\u88ab\u5176\u4ed6\u6076\u610f\u4ee3\u7801\u66ff\u4ee3<\/strong><\/p>\n<p><strong>\u57fa\u672c\u7c7b\u578b\u4e0d\u9700\u8981\u7c7b\u52a0\u8f7d\u3001\u6570\u7ec4\u7c7b\u578b\u7684\u7c7b\u52a0\u8f7d\u5668\u662f\u6570\u7ec4\u5143\u7d20\u7684\u7c7b\u52a0\u8f7d\u5668\u3001\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668\u662f\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668<\/strong><\/p>\n<p><strong>\u7531\u4e8e\u7c7b\u548c\u7c7b\u52a0\u8f7d\u5668\u624d\u80fd\u786e\u5b9aJVM\u4e2d\u7684\u552f\u4e00\u6027\uff0c\u6bcf\u6b21\u52a0\u8f7d\u7c7b\u7684\u7c7b\u52a0\u8f7d\u4e0d\u540c\u65f6\u5c31\u80fd\u591f\u591a\u6b21\u8fdb\u884c\u7c7b\u52a0\u8f7d\u4ece\u800c\u5b9e\u73b0\u5728\u8fd0\u884c\u65f6\u4fee\u6539\u7684\u70ed\u66ff\u6362<\/strong><\/p>\n<h3>\u6700\u540e\uff08\u4e00\u952e\u4e09\u8fde\u6c42\u6c42\u62c9~\uff09<\/h3>\n<p>\u672c\u7bc7\u6587\u7ae0\u7b14\u8bb0\u4ee5\u53ca\u6848\u4f8b\u88ab\u6536\u5165 <a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=xYfFlwBincFexJTl5TK0YA%3D%3D.u9rNSP7k0%2B0lvC8HOqJirc%2BJBK%2FOIzIGU0W4WShIVVPBJgDrukktuQRIUTxvTd2F5%2FM68aLC4dneUr9eCs0oW2L3ClNikuLFFBEfODtEOxpmiaPramKj0%2FWJSPw4h5Cm\" rel=\"noopener noreferrer\">gitee-StudyJava<\/a>\u3001 <a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=YhJ4OYB7rg07U3HKbV4%2Fng%3D%3D.Z0%2BPU093V3nwxx20icL65lpSyDIt%2FDs2QJU%2Bko03mSnuF%2FM5WkoMScbNhXzG%2BD4pnA8XxGIBB3NrV2gbZ03WtoijNyKlMuloClw0ucCO0fg%3D\" rel=\"noopener noreferrer\">github-StudyJava<\/a> \u611f\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5stat\u4e0b\u6301\u7eed\u5173\u6ce8\u5594\/~<\/p>\n<p>\u6709\u4ec0\u4e48\u95ee\u9898\u53ef\u4ee5\u5728\u8bc4\u8bba\u533a\u4ea4\u6d41\uff0c\u5982\u679c\u89c9\u5f97\u83dc\u83dc\u5199\u7684\u4e0d\u9519\uff0c\u53ef\u4ee5\u70b9\u8d5e\u3001\u5173\u6ce8\u3001\u6536\u85cf\u652f\u6301\u4e00\u4e0b\/~<\/p>\n<p>\u5173\u6ce8\u83dc\u83dc\uff0c\u5206\u4eab\u66f4\u591a\u5e72\u8d27\uff0c\u516c\u4f17\u53f7\uff1a\u83dc\u83dc\u7684\u540e\u7aef\u79c1\u623f\u83dc<\/p>\n<blockquote><p>\u672c\u6587\u7531\u535a\u5ba2\u4e00\u6587\u591a\u53d1\u5e73\u53f0 <a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=BnTHd7wgsnGsfofCoHYBPQ%3D%3D.9n052qwlreSZgUzDl45ReUDcbPJl%2BpJnjSaVtTVuQgz5uLtRRp3c1HEalkeNf1iO\" rel=\"noopener noreferrer\">OpenWrite<\/a> \u53d1\u5e03\uff01<\/p><\/blockquote>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000044655107\">https:\/\/segmentfault.com\/a\/1190000044655107<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u6587\u5df2\u7ecf\u63cf\u8ff0Java\u6e90\u6587\u4ef6\u7ecf\u8fc7\u524d\u7aef\u7f16\u8bd1\u5668\u540e\u53d8\u6210\u5b57\u8282\u7801\u6587\u4ef6\uff0c\u5b57\u8282\u7801\u6587\u4ef6\u901a\u8fc7\u7c7b\u52a0\u8f7d\u5668\u7684\u7c7b\u52a0\u8f7d\u673a\u5236\u5728Java\u865a\u62df\u673a\u4e2d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10008401","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10008401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10008401"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10008401\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10008401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10008401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10008401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}