{"id":17642,"date":"2025-06-12T12:12:44","date_gmt":"2025-06-12T04:12:44","guid":{"rendered":"https:\/\/92it.top\/?p=17642"},"modified":"2025-06-12T12:12:44","modified_gmt":"2025-06-12T04:12:44","slug":"jvm-java-virtual-machine-%e7%9a%84%e5%ae%9e%e7%8e%b0%e8%af%ad%e8%a8%80","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=17642","title":{"rendered":"JVM (Java Virtual Machine) \u7684\u5b9e\u73b0\u8bed\u8a00"},"content":{"rendered":"\n<p>JVM \u662f Java \u5e73\u53f0\u7684\u6838\u5fc3\uff0c\u8d1f\u8d23\u6267\u884c Java \u5b57\u8282\u7801\u3002\u5173\u4e8e\u5b83\u7684\u5b9e\u73b0\u8bed\u8a00\uff0c\u6709\u4ee5\u4e0b\u51e0\u4e2a\u5173\u952e\u70b9\uff1a<\/p>\n\n\n\n<p><strong>JVM \u7684\u4e3b\u8981\u5b9e\u73b0\u8bed\u8a00<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>JVM \u7684\u4e3b\u8981\u5b9e\u73b0\u8bed\u8a00<\/strong><\/p>\n\n\n\n<ul>\n<li>C \u548c C++<br>\u4e3b\u6d41\u7684 JVM \u5b9e\u73b0\uff08\u5982 Oracle \u7684 HotSpot\u3001OpenJDK \u7684 JVM\uff09\u4e3b\u8981\u4f7f\u7528\u00a0<strong>C \u548c C++<\/strong>\u00a0\u7f16\u5199\u3002\n<ul>\n<li><strong>C<\/strong>\uff1a\u7528\u4e8e\u5e95\u5c42\u7cfb\u7edf\u4ea4\u4e92\u3001\u5185\u5b58\u7ba1\u7406\u3001\u7ebf\u7a0b\u8c03\u5ea6\u7b49\u3002<\/li>\n\n\n\n<li><strong>C++<\/strong>\uff1a\u7528\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u7ec4\u4ef6\u8bbe\u8ba1\uff0c\u5982\u7c7b\u52a0\u8f7d\u5668\u3001\u5783\u573e\u56de\u6536\u5668\u7b49\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Java \u81ea\u8eab<br>\u90e8\u5206 JVM \u7ec4\u4ef6\uff08\u5982\u8fd0\u884c\u65f6\u5e93\uff09\u53ef\u80fd\u4f7f\u7528 Java \u7f16\u5199\uff0c\u4f46\u8fd9\u4e9b\u4ee3\u7801\u6700\u7ec8\u4f1a\u88ab\u7f16\u8bd1\u4e3a\u5b57\u8282\u7801\uff0c\u4ecd\u9700\u4f9d\u8d56\u5e95\u5c42 JVM \u6267\u884c\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4e3a\u4ec0\u4e48\u7528 C\/C++\uff1f<\/strong><\/p>\n\n\n\n<ul>\n<li>\u6027\u80fd\u8981\u6c42<br>JVM \u9700\u8981\u76f4\u63a5\u64cd\u4f5c\u786c\u4ef6\u8d44\u6e90\uff08\u5982\u5185\u5b58\u3001CPU\uff09\uff0cC\/C++ \u80fd\u63d0\u4f9b\u63a5\u8fd1\u539f\u751f\u7684\u6027\u80fd\u3002<\/li>\n\n\n\n<li>\u5e73\u53f0\u517c\u5bb9\u6027<br>C\/C++ \u53ef\u4ee5\u5728\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\uff08Windows\u3001Linux\u3001macOS\uff09\u4e0a\u5b9e\u73b0\u7edf\u4e00\u7684\u62bd\u8c61\u5c42\uff0c\u5c4f\u853d\u5e95\u5c42\u5dee\u5f02\u3002<\/li>\n\n\n\n<li>\u8bbf\u95ee\u7cfb\u7edf API<br>JVM \u9700\u8981\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u7684\u539f\u751f API\uff08\u5982\u6587\u4ef6\u7cfb\u7edf\u3001\u7f51\u7edc\uff09\uff0cC\/C++ \u4fbf\u4e8e\u4e0e\u8fd9\u4e9b API \u4ea4\u4e92\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5176\u4ed6 JVM \u5b9e\u73b0\u8bed\u8a00<\/strong><\/p>\n\n\n\n<ul>\n<li>HotSpot JVM<br>Oracle \u7684\u5b98\u65b9 JVM \u5b9e\u73b0\uff0c\u4e3b\u8981\u4f7f\u7528\u00a0<strong>C++<\/strong>\uff0c\u90e8\u5206\u7ec4\u4ef6\uff08\u5982\u89e3\u91ca\u5668\uff09\u4f7f\u7528\u00a0<strong>C<\/strong>\u3002<\/li>\n\n\n\n<li>OpenJDK<br>\u5f00\u6e90\u7684 JVM \u5b9e\u73b0\uff0c\u4e0e HotSpot \u4ee3\u7801\u5e93\u57fa\u672c\u4e00\u81f4\uff0c\u540c\u6837\u4f7f\u7528\u00a0<strong>C\/C++<\/strong>\u3002<\/li>\n\n\n\n<li>JRockit<br>\u66fe\u662f BEA Systems \u7684 JVM\uff0c\u540e\u88ab Oracle \u6536\u8d2d\uff0c\u4e3b\u8981\u4f7f\u7528\u00a0<strong>C\/C++<\/strong>\u3002<\/li>\n\n\n\n<li>J9 VM<br>IBM \u7684 JVM \u5b9e\u73b0\uff0c\u4e3b\u8981\u4f7f\u7528\u00a0<strong>C\/C++<\/strong>\u3002<\/li>\n\n\n\n<li>Substrate VM<br>GraalVM \u7684\u4e00\u90e8\u5206\uff0c\u4f7f\u7528\u00a0<strong>Java<\/strong>\u00a0\u548c\u00a0<strong>C++<\/strong>\u00a0\u6df7\u5408\u7f16\u5199\uff0c\u652f\u6301 Ahead-Of-Time (AOT) \u7f16\u8bd1\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u73b0\u4ee3\u8d8b\u52bf\uff1a\u6df7\u5408\u8bed\u8a00\u5f00\u53d1<\/strong><\/p>\n\n\n\n<p>\u73b0\u4ee3 JVM \u53ef\u80fd\u7ed3\u5408\u591a\u79cd\u8bed\u8a00\uff1a<\/p>\n\n\n\n<ul>\n<li>Java\uff1a\u7528\u4e8e\u5b9e\u73b0\u90e8\u5206\u5de5\u5177\u7c7b\u6216\u7ba1\u7406\u7ec4\u4ef6\u3002<\/li>\n\n\n\n<li>\u6c47\u7f16\u8bed\u8a00\uff1a\u5728\u5173\u952e\u6027\u80fd\u8def\u5f84\uff08\u5982\u5783\u573e\u56de\u6536\u7b97\u6cd5\uff09\u4e2d\u4f7f\u7528\u6c47\u7f16\u4f18\u5316\u3002<\/li>\n\n\n\n<li>\u7279\u5b9a\u9886\u57df\u8bed\u8a00\uff1a\u5982 Scala\u3001Kotlin \u7b49 JVM \u8bed\u8a00\u7f16\u5199\u7684\u8f85\u52a9\u5de5\u5177\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>JVM \u7684\u5206\u5c42\u67b6\u6784<\/strong><\/p>\n\n\n\n<ul>\n<li>\u89e3\u91ca\u5668\uff1a\u901a\u5e38\u7528\u00a0<strong>C<\/strong>\u00a0\u7f16\u5199\uff0c\u76f4\u63a5\u6267\u884c\u5b57\u8282\u7801\u3002<\/li>\n\n\n\n<li>\u5373\u65f6\u7f16\u8bd1\u5668 (JIT)\uff1a\u5982 HotSpot \u7684 C1\/C2 \u7f16\u8bd1\u5668\uff0c\u7528\u00a0<strong>C++<\/strong>\u00a0\u7f16\u5199\u3002<\/li>\n\n\n\n<li>\u5783\u573e<strong>\u56de<\/strong>\u6536\u5668\uff1a\u5982 G1\u3001ZGC\uff0c\u7528\u00a0<strong>C++<\/strong>\u00a0\u5b9e\u73b0\u590d\u6742\u7684\u5185\u5b58\u7ba1\u7406\u7b97\u6cd5\u3002<\/li>\n\n\n\n<li>\u7c7b\u52a0\u8f7d\u7cfb\u7edf\uff1a\u7528\u00a0<strong>C++<\/strong>\u00a0\u5b9e\u73b0\u7c7b\u7684\u52a0\u8f7d\u3001\u9a8c\u8bc1\u548c\u89e3\u6790\u3002<\/li>\n<\/ul>\n\n\n\n<p>JVM \u4e3b\u8981\u4f7f\u7528&nbsp;<strong>C \u548c C++<\/strong>&nbsp;\u7f16\u5199\uff0c\u8fd9\u662f\u4e3a\u4e86\u6ee1\u8db3\u6027\u80fd\u3001\u5e73\u53f0\u517c\u5bb9\u6027\u548c\u7cfb\u7edf\u8d44\u6e90\u8bbf\u95ee\u7684\u9700\u6c42\u3002\u867d\u7136\u90e8\u5206\u8f85\u52a9\u7ec4\u4ef6\u53ef\u80fd\u4f7f\u7528 Java \u6216\u5176\u4ed6\u8bed\u8a00\uff0c\u4f46\u6838\u5fc3\u529f\u80fd\u4ecd\u4f9d\u8d56\u4e8e\u5e95\u5c42\u7684 C\/C++ \u5b9e\u73b0\u3002<\/p>\n\n\n\n<p><strong>JVM \u7684\u5b9e\u73b0\u8bed\u8a00\u4e0e\u5177\u4f53\u7ec4\u4ef6\u793a\u4f8b<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>JVM \u7684\u5b9e\u73b0\u8bed\u8a00\u4e3b\u8981\u662f&nbsp;<strong>C \u548c C++<\/strong>\uff0c\u4e0b\u9762\u901a\u8fc7&nbsp;<strong>OpenJDK<\/strong>\uff08Oracle JDK \u7684\u5f00\u6e90\u7248\u672c\uff09\u7684\u6e90\u7801\u6765\u8be6\u7ec6\u8bf4\u660e\uff1a<\/p>\n\n\n\n<p><strong>JVM \u7684\u4e3b\u8981\u5b9e\u73b0\u8bed\u8a00<\/strong><\/p>\n\n\n\n<ul>\n<li>C++\uff1a\u7528\u4e8e\u5b9e\u73b0\u9762\u5411\u5bf9\u8c61\u7684\u6838\u5fc3\u7ec4\u4ef6\uff0c\u5982\u7c7b\u52a0\u8f7d\u5668\u3001\u5783\u573e\u56de\u6536\u5668\u3001JIT \u7f16\u8bd1\u5668\u3002<\/li>\n\n\n\n<li>C\uff1a\u7528\u4e8e\u5e95\u5c42\u7cfb\u7edf\u4ea4\u4e92\u3001\u5185\u5b58\u7ba1\u7406\u3001\u7ebf\u7a0b\u8c03\u5ea6\u3002<\/li>\n\n\n\n<li>\u6c47\u7f16\u8bed\u8a00\uff1a\u5728\u6027\u80fd\u5173\u952e\u8def\u5f84\uff08\u5982\u70ed\u70b9\u4ee3\u7801\u4f18\u5316\uff09\u4e2d\u4f7f\u7528\u3002<\/li>\n\n\n\n<li>Java\uff1a\u7528\u4e8e\u90e8\u5206\u5de5\u5177\u7c7b\uff08\u5982\u00a0<code>java.lang<\/code>\u00a0\u5305\uff09\uff0c\u4f46\u8fd9\u4e9b\u4ee3\u7801\u6700\u7ec8\u4f1a\u88ab\u7f16\u8bd1\u4e3a\u5b57\u8282\u7801\uff0c\u4ecd\u9700\u4f9d\u8d56 JVM \u6267\u884c\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>OpenJDK \u6e90\u7801\u7ed3\u6784\u793a\u4f8b<\/strong><\/p>\n\n\n\n<p>\u4ee5&nbsp;<strong>OpenJDK 11<\/strong>&nbsp;\u4e3a\u4f8b\uff0c\u6838\u5fc3 JVM \u4ee3\u7801\u4f4d\u4e8e&nbsp;<code>src\/hotspot<\/code>&nbsp;\u76ee\u5f55\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">hotspot\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 os\/        # \u64cd\u4f5c\u7cfb\u7edf\u76f8\u5173\u4ee3\u7801\uff08Linux\u3001Windows \u7b49\uff09\n\u2502   \u251c\u2500\u2500 cpu\/       # CPU \u67b6\u6784\u76f8\u5173\u4ee3\u7801\uff08x86\u3001ARM \u7b49\uff09\n\u2502   \u251c\u2500\u2500 share\/     # \u5e73\u53f0\u65e0\u5173\u7684\u5171\u4eab\u4ee3\u7801\n\u2502   \u2502   \u251c\u2500\u2500 vm\/    # JVM \u6838\u5fc3\u7ec4\u4ef6\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 classfile\/     # \u7c7b\u52a0\u8f7d\u5668\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 gc\/            # \u5783\u573e\u56de\u6536\u5668\uff08G1\u3001CMS \u7b49\uff09\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 jit\/           # JIT \u7f16\u8bd1\u5668\uff08C1\u3001C2\uff09\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 interpreter\/   # \u5b57\u8282\u7801\u89e3\u91ca\u5668\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 runtime\/       # \u8fd0\u884c\u65f6\u7cfb\u7edf\uff08\u7ebf\u7a0b\u3001\u9501\u7b49\uff09\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 ...\n\u2502   \u2502   \u2514\u2500\u2500 ...\n\u2502   \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 ...<\/pre>\n\n\n\n<p><strong>\u5177\u4f53\u7ec4\u4ef6\u7684\u5b9e\u73b0\u8bed\u8a00\u793a\u4f8b<\/strong><\/p>\n\n\n\n<p>\uff081\uff09\u7c7b\u52a0\u8f7d\u7cfb\u7edf\uff08Class Loading\uff09<\/p>\n\n\n\n<ul>\n<li>\u6e90\u7801\u4f4d\u7f6e\uff1a<code>src\/hotspot\/share\/classfile<\/code><\/li>\n\n\n\n<li>\u5b9e\u73b0\u8bed\u8a00\uff1a<strong>C++<\/strong><\/li>\n\n\n\n<li>\u5173\u952e\u6587\u4ef6\uff1a<code>systemDictionary.cpp<\/code>\u3001<code>classLoader.cp<\/code><\/li>\n<\/ul>\n\n\n\n<p>\u793a\u4f8b\u4ee3\u7801\uff08\u7b80\u5316\u7248\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ systemDictionary.cpp\nclass SystemDictionary : AllStatic {\nprivate:\n    static Hashtable&lt;oop, mtClass> _class_table;\n    \npublic:\n    \/\/ \u67e5\u627e\u6216\u52a0\u8f7d\u7c7b\n    static Klass* find_or_load_class(Symbol* name, Handle class_loader, ...);\n    \n    \/\/ \u7c7b\u52a0\u8f7d\u9501\u673a\u5236\n    static ObjectMonitor* load_lock(Symbol* name);\n};<\/pre>\n\n\n\n<p>\uff082\uff09\u5783\u573e\u56de\u6536\u5668\uff08Garbage Collection\uff09<\/p>\n\n\n\n<ul>\n<li>\u6e90\u7801\u4f4d\u7f6e\uff1a<code>src\/hotspot\/share\/gc<\/code><\/li>\n\n\n\n<li>\u5b9e\u73b0\u8bed\u8a00\uff1a<strong>C++<\/strong><\/li>\n\n\n\n<li>\u5173\u952e\u7ec4\u4ef6\uff1a\n<ul>\n<li>G1 GC\uff1a<code>g1CollectedHeap.cpp<\/code><\/li>\n\n\n\n<li>ZGC\uff1a<code>zHeap.cpp<\/code><\/li>\n\n\n\n<li>CMS GC\uff1a<code>concurrentMarkSweepGeneration.cpp<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u793a\u4f8b\u4ee3\u7801\uff08G1 GC \u7684\u5185\u5b58\u5206\u914d\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ g1CollectedHeap.cpp\nHeapWord* G1CollectedHeap::mem_allocate(Thread* thread, size_t word_size) {\n    if (word_size &lt;= _humongous_object_threshold_words) {\n        \/\/ \u5c0f\u5bf9\u8c61\u5206\u914d\u5230 Eden \u533a\n        return attempt_allocation(word_size, true);\n    } else {\n        \/\/ \u5927\u5bf9\u8c61\u76f4\u63a5\u5206\u914d\u5230 Humongous \u533a\n        return attempt_allocation_humongous(word_size);\n    }\n}<\/pre>\n\n\n\n<p>\uff083\uff09JIT \u7f16\u8bd1\u5668\uff08Just-In-Time Compilation\uff09<\/p>\n\n\n\n<ul>\n<li>\u6e90\u7801\u4f4d\u7f6e\uff1a<code>src\/hotspot\/share\/c1<\/code>\uff08C1 \u7f16\u8bd1\u5668\uff09\u3001<code>src\/hotspot\/share\/c2<\/code>\uff08C2 \u7f16\u8bd1\u5668\uff09<\/li>\n\n\n\n<li>\u5b9e\u73b0\u8bed\u8a00\uff1a<strong>C++<\/strong><\/li>\n\n\n\n<li>\u5173\u952e\u6587\u4ef6\uff1a<code>compiler.cpp<\/code>\u3001<code>codeGenerator.cpp<\/code><\/li>\n<\/ul>\n\n\n\n<p>\u793a\u4f8b\u4ee3\u7801\uff08\u65b9\u6cd5\u7f16\u8bd1\u5165\u53e3\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ c1_compiler.cpp\nCompilation* C1Compiler::compile_method(Method* method, ...) {\n    \/\/ \u89e3\u6790\u5b57\u8282\u7801\uff0c\u6784\u5efa\u63a7\u5236\u6d41\u56fe\n    Parse* parse = new Parse(method, osr_bci, ...);\n    \n    \/\/ \u6267\u884c\u4f18\u5316\n    parse->do_optimization();\n    \n    \/\/ \u751f\u6210\u673a\u5668\u7801\n    CodeBuffer* code = new CodeBuffer(...);\n    CodeGenerator* gen = new CodeGenerator(parse, code, ...);\n    gen->generate();\n    \n    return new Compilation(method, parse, code, ...);\n}<\/pre>\n\n\n\n<p>\uff084\uff09\u5b57\u8282\u7801\u89e3\u91ca\u5668\uff08Bytecode Interpreter\uff09<\/p>\n\n\n\n<ul>\n<li>\u6e90\u7801\u4f4d\u7f6e\uff1a<code>src\/hotspot\/share\/interpreter<\/code><\/li>\n\n\n\n<li>\u5b9e\u73b0\u8bed\u8a00\uff1a<strong>C<\/strong>\uff08\u90e8\u5206\u7528\u6c47\u7f16\u4f18\u5316\uff09<\/li>\n\n\n\n<li>\u5173\u952e\u6587\u4ef6\uff1a<code>interpreterRuntime.c<\/code>\u3001<code>bytecodeInterpreter.c<\/code><\/li>\n<\/ul>\n\n\n\n<p>\u793a\u4f8b\u4ee3\u7801\uff08\u89e3\u91ca\u5668 dispatch \u8868\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ bytecodeInterpreter.c\n\/\/ \u5b57\u8282\u7801\u6307\u4ee4\u4e0e\u5904\u7406\u51fd\u6570\u7684\u6620\u5c04\u8868\nvoid* Interpreter::_active_table[256] = {\n  [Bytecodes::_iload_0]   = iload_0_entry,\n  [Bytecodes::_iload_1]   = iload_1_entry,\n  [Bytecodes::_iload_2]   = iload_2_entry,\n  [Bytecodes::_iload_3]   = iload_3_entry,\n  \/\/ ... \u5176\u4ed6\u5b57\u8282\u7801\u6307\u4ee4\n};<\/pre>\n\n\n\n<p>JVM \u7684\u6838\u5fc3\u7ec4\u4ef6\uff08\u5982\u7c7b\u52a0\u8f7d\u3001GC\u3001JIT \u7f16\u8bd1\uff09\u5747\u4f7f\u7528\u00a0<strong>C++<\/strong>\u00a0\u5b9e\u73b0\uff0c\u4ee5\u4fdd\u8bc1\u9762\u5411\u5bf9\u8c61\u7684\u8bbe\u8ba1\u548c\u6027\u80fd\u3002\u5e95\u5c42\u7cfb\u7edf\u4ea4\u4e92\uff08\u5982\u5185\u5b58\u5206\u914d\u3001\u7ebf\u7a0b\u7ba1\u7406\uff09\u5219\u4f9d\u8d56\u00a0<strong>C<\/strong>\u00a0\u8bed\u8a00\uff0c\u5229\u7528\u5176\u5bf9\u786c\u4ef6\u7684\u76f4\u63a5\u63a7\u5236\u80fd\u529b\u3002\u8fd9\u79cd\u6df7\u5408\u8bed\u8a00\u67b6\u6784\u4f7f JVM \u80fd\u591f\u5728\u4fdd\u8bc1\u8de8\u5e73\u53f0\u6027\u7684\u540c\u65f6\uff0c\u63d0\u4f9b\u63a5\u8fd1\u539f\u751f\u7684\u6267\u884c\u6548\u7387\u3002\u5206\u4eab<\/p>\n\n\n\n<p><strong>Linux\u4e0b\u7684JVM \u4e5f\u662f C \u548cC++ \u5b9e\u73b0\u7684\u5417\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Linux \u4e0b JVM \u7684\u5b9e\u73b0\u8bed\u8a00<\/strong><\/p>\n\n\n\n<p>\u662f\u7684\uff0cLinux \u7cfb\u7edf\u4e0b\u7684 JVM\uff08Java \u865a\u62df\u673a\uff09\u540c\u6837\u662f\u7531&nbsp;<strong>C \u548c C++<\/strong>&nbsp;\u7f16\u5199\u7684\u3002JVM \u7684\u5b9e\u73b0\u8bed\u8a00\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u65e0\u5173\uff0c\u65e0\u8bba\u662f Linux\u3001Windows \u8fd8\u662f macOS\uff0c\u4e3b\u6d41\u7684 JVM \u5b9e\u73b0\uff08\u5982 Oracle \u7684 HotSpot\u3001OpenJDK \u7684 JVM\uff09\u90fd\u9075\u5faa\u8fd9\u4e00\u539f\u5219\u3002<\/p>\n\n\n\n<p>JVM \u7684\u8de8\u5e73\u53f0\u6027\u6b63\u662f\u901a\u8fc7 C\/C++ \u8fd9\u79cd \u201c\u4e2d\u95f4\u8bed\u8a00\u201d \u5b9e\u73b0\u7684\uff1a\u5728\u4e0d\u540c\u7cfb\u7edf\u4e0a\u7f16\u8bd1\u4e3a\u5bf9\u5e94\u5e73\u53f0\u7684\u4e8c\u8fdb\u5236\u4ee3\u7801\uff0c\u4f46\u63d0\u4f9b\u7edf\u4e00\u7684 Java \u5b57\u8282\u7801\u6267\u884c\u73af\u5883\u3002<\/p>\n\n\n\n<p>C \u548c C++ \u7a0b\u5e8f\u53ef\u4ee5\u5728 Linux\u3001macOS\u3001Windows \u4e0a\u6267\u884c\uff0c\u4f46\u9700\u8981\u89e3\u51b3\u7f16\u8bd1\u73af\u5883\u3001\u5e73\u53f0\u5dee\u5f02\u548c\u53ef\u6267\u884c\u683c\u5f0f\u7684\u95ee\u9898\u3002\u901a\u8fc7\u6761\u4ef6\u7f16\u8bd1\u3001\u8de8\u5e73\u53f0\u5e93\u548c\u6807\u51c6\u5316\u6784\u5efa\u7cfb\u7edf\uff0c\u80fd\u591f\u9ad8\u6548\u5b9e\u73b0\u8de8\u5e73\u53f0\u5f00\u53d1\uff0c\u540c\u65f6\u4fdd\u6301\u4ee3\u7801\u7684\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u7f16\u8bd1\u5668\u652f\u6301<\/strong>\n<ul>\n<li>\u9700\u8981\u9488\u5bf9\u76ee\u6807\u5e73\u53f0\u5b89\u88c5\u5bf9\u5e94\u7684\u7f16\u8bd1\u5668\uff1a\n<ul>\n<li><strong>Linux<\/strong>\uff1aGCC\uff08<code>gcc\/g++<\/code>\uff09\u3001Clang<\/li>\n\n\n\n<li><strong>macOS<\/strong>\uff1aXcode \u81ea\u5e26\u7684 Clang\uff08\u6216 Homebrew \u5b89\u88c5\u7684 GCC\uff09<\/li>\n\n\n\n<li><strong>Windows<\/strong>\uff1aMSVC\uff08Visual Studio\uff09\u3001MinGW\uff08GCC \u79fb\u690d\u7248\uff09\u3001Clang<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u4e00\u4e2a\u7b80\u5355\u7684 C++ \u7a0b\u5e8f\u4e3a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream>\n\nint main() {\n    std::cout &lt;&lt; \"Hello, Platform!\" &lt;&lt; std::endl;\n    \n    #ifdef _WIN32\n    std::cout &lt;&lt; \"This is Windows\" &lt;&lt; std::endl;\n    #elif defined(__APPLE__)\n    std::cout &lt;&lt; \"This is macOS\" &lt;&lt; std::endl;\n    #elif defined(__linux__)\n    std::cout &lt;&lt; \"This is Linux\" &lt;&lt; std::endl;\n    #else\n    std::cout &lt;&lt; \"Unknown OS\" &lt;&lt; std::endl;\n    #endif\n    \n    return 0;\n}<\/pre>\n\n\n\n<ul>\n<li>Linux \u7f16\u8bd1\u8fd0\u884c\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">g++ main.cpp -o app\n.\/app  # \u8f93\u51fa\uff1aHello, Platform! \u548c This is Linux<\/pre>\n\n\n\n<ul>\n<li>macOS \u7f16\u8bd1\u8fd0\u884c\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">clang++ main.cpp -o app\n.\/app  # \u8f93\u51fa\uff1aHello, Platform! \u548c This is macOS<\/pre>\n\n\n\n<ul>\n<li>Windows \u7f16\u8bd1\u8fd0\u884c\uff08MinGW\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">g++ main.cpp -o app.exe\napp.exe  # \u8f93\u51fa\uff1aHello, Platform! \u548c This is Windows<\/pre>\n\n\n\n<p><strong>C \u548c C++ \u5728Linux \u6267\u884c\u8fc7\u7a0b<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>C \u548c C++ \u4ee3\u7801\u53ef\u4ee5\u5728 Linux \u7cfb\u7edf\u4e2d\u76f4\u63a5\u7f16\u8bd1\u548c\u6267\u884c\u3002Linux \u4f5c\u4e3a\u5f00\u6e90\u7cfb\u7edf\uff0c\u5bf9 C\/C++ \u8bed\u8a00\u63d0\u4f9b\u4e86\u4e00\u6d41\u7684\u652f\u6301\u3002\u4ee5\u4e0b\u662f\u8be6\u7ec6\u89e3\u91ca\uff1a<\/p>\n\n\n\n<p><strong>\u00a0C\/C++ \u5728 Linux \u4e2d\u7684\u7f16\u8bd1\u4e0e\u6267\u884c\u6d41\u7a0b<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><strong>\u7f16\u8bd1\u9636\u6bb5<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>C \u8bed\u8a00<\/strong>\uff1a\u901a\u5e38\u4f7f\u7528\u00a0<code>gcc<\/code>\u00a0\u7f16\u8bd1\u5668\u3002<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">gcc hello.c -o hello  # \u7f16\u8bd1 C \u4ee3\u7801\n<\/pre>\n\n\n\n<ul>\n<li><strong>C++ \u8bed\u8a00<\/strong>\uff1a\u901a\u5e38\u4f7f\u7528\u00a0<code>g++<\/code>\u00a0\u7f16\u8bd1\u5668\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">g++ hello.cpp -o hello  # \u7f16\u8bd1 C++ \u4ee3\u7801\n<\/pre>\n\n\n\n<p><strong>\u6267\u884c\u9636\u6bb5<\/strong><\/p>\n\n\n\n<p>\u7f16\u8bd1\u540e\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u53ef\u76f4\u63a5\u5728 Linux \u4e2d\u8fd0\u884c\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.\/hello  # \u6267\u884c\u7a0b\u5e8f\n<\/pre>\n\n\n\n<p><strong>\u4e3a\u4ec0\u4e48 C\/C++ \u80fd\u5728 Linux \u4e2d\u76f4\u63a5\u6267\u884c\uff1f<\/strong><\/p>\n\n\n\n<ul>\n<li>\u539f\u751f\u8bed\u8a00\u7279\u6027\uff1aC\/C++ \u662f\u7f16\u8bd1\u578b\u8bed\u8a00\uff0c\u7f16\u8bd1\u540e\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u5305\u542b\u76f4\u63a5\u53ef\u6267\u884c\u7684\u673a\u5668\u7801\uff0c\u65e0\u9700\u4f9d\u8d56\u865a\u62df\u673a\uff08\u5982 JVM\uff09\u3002<\/li>\n\n\n\n<li>\u7cfb\u7edf\u517c\u5bb9\u6027\uff1aLinux \u5185\u6838\u548c\u7cfb\u7edf\u5e93\u672c\u8eab\u5927\u91cf\u4f7f\u7528 C \u8bed\u8a00\u7f16\u5199\uff0c\u5bf9 C\/C++ \u6709\u5929\u7136\u7684\u652f\u6301\u3002<\/li>\n\n\n\n<li>\u5de5\u5177\u94fe\u5b8c\u5584\uff1aLinux \u63d0\u4f9b\u4e86\u6210\u719f\u7684\u7f16\u8bd1\u5de5\u5177\u94fe\uff08\u5982 GCC\u3001Clang\uff09\u548c\u8c03\u8bd5\u5de5\u5177\uff08\u5982 GDB\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<p>GCC \u548c G++ \u6700\u7ec8\u5c06 C\/C++ \u4ee3\u7801\u8f6c\u6362\u4e3a&nbsp;<strong>\u4e0e\u786c\u4ef6\u67b6\u6784\u76f8\u5173\u7684\u673a\u5668\u7801<\/strong>\uff1a<\/p>\n\n\n\n<ul>\n<li><strong>\u673a\u5668\u7801<\/strong>\uff1a\u7531 0 \u548c 1 \u7ec4\u6210\u7684\u4e8c\u8fdb\u5236\u6307\u4ee4\uff0c\u76f4\u63a5\u88ab CPU \u8bc6\u522b\u548c\u6267\u884c\u3002<\/li>\n\n\n\n<li><strong>\u6307\u4ee4\u96c6\u67b6\u6784\uff08ISA\uff09<\/strong>\uff1a\u5982 x86\u3001ARM\u3001MIPS \u7b49\uff0c\u4e0d\u540c\u67b6\u6784\u7684\u673a\u5668\u7801\u4e0d\u517c\u5bb9\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u4f8b\u5982\uff0c\u5728 x86-64 \u67b6\u6784\u4e0a\uff0c\u4ee5\u4e0b C \u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int add(int a, int b) {\n    return a + b;\n}<\/pre>\n\n\n\n<p>\u53ef\u80fd\u88ab\u7f16\u8bd1\u4e3a\u5bf9\u5e94\u7684\u6c47\u7f16\u6307\u4ee4\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">add:\n    push    %rbp\n    mov     %rsp, %rbp\n    mov     %edi, -4(%rbp)\n    mov     %esi, -8(%rbp)\n    mov     -4(%rbp), %edx\n    mov     -8(%rbp), %eax\n    add     %edx, %eax\n    pop     %rbp\n    ret<\/pre>\n\n\n\n<p>\u6700\u7ec8\u8f6c\u6362\u4e3a\u673a\u5668\u7801\uff08\u5341\u516d\u8fdb\u5236\u8868\u793a\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">55 48 89 e5 89 7d fc 89 75 f8 8b 55 fc 8b 45 f8 01 d0 5d c3\n<\/pre>\n\n\n\n<p>GCC \u548c G++ \u6700\u7ec8\u5c06 C\/C++ \u6e90\u7801\u8f6c\u6362\u4e3a\u00a0<strong>\u4e0e\u786c\u4ef6\u67b6\u6784\u7ed1\u5b9a\u7684\u673a\u5668\u7801<\/strong>\uff0c\u8fd9\u4e9b\u673a\u5668\u7801\u88ab\u64cd\u4f5c\u7cfb\u7edf\u52a0\u8f7d\u5230\u5185\u5b58\u4e2d\u76f4\u63a5\u6267\u884c\uff0c\u65e0\u9700\u4e2d\u95f4\u89e3\u91ca\u5668\u3002\u8fd9\u4e5f\u662f C\/C++ \u6027\u80fd\u63a5\u8fd1\u786c\u4ef6\u539f\u751f\u901f\u5ea6\u7684\u539f\u56e0\u3002\u7f16\u8f91\u5206\u4eab<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JVM \u662f Java \u5e73\u53f0\u7684\u6838\u5fc3\uff0c\u8d1f\u8d23\u6267\u884c Java \u5b57\u8282\u7801\u3002\u5173\u4e8e\u5b83\u7684\u5b9e\u73b0\u8bed\u8a00\uff0c\u6709\u4ee5\u4e0b\u51e0\u4e2a\u5173\u952e\u70b9\uff1a JVM \u7684 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/17642"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17642"}],"version-history":[{"count":1,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/17642\/revisions"}],"predecessor-version":[{"id":17643,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/17642\/revisions\/17643"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}