慢慢琢磨JVM——恭喜JavaEye重新开张?1 JVM简介???该图参考了网上广为流传的JVM构成图,大家看这个图,整个JVM
慢慢琢磨JVM——恭喜JavaEye重新开张
?
1 JVM简介
?
?
?该图参考了网上广为流传的JVM构成图,大家看这个图,整个JVM分为四部分:
?图示在一个栈中有两个栈帧,栈帧2是最先被调用的方法,先入栈,然后方法2又调用了方法1,栈帧1处于栈顶的位置,栈帧2处于栈底,执行完毕后,依次弹出栈帧1和栈帧2,线程结束,栈释放。
?q?Method Area 方法区
(引用自《虚拟机:系统与进程的通用平台》第一章)
<p>?</p>
<p>?</p>
<p alt="缓缓琢磨JVM——恭喜JavaEye重新开张"><br>?<span>该图参考了网上广为流传的<span lang="EN-US">JVM</span>构成图,大家看这个图,整个<span lang="EN-US">JVM</span>分为四部分:</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span>ClassFile {</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u4 magic;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 minor_version;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>?</span><span>?? </span><span>? </span>u2 major_version;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 constant_pool_count;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>cp_info constant_pool[constant_pool_count-1];</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 access_flags;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 this_class;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 super_class;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 interfaces_count;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 interfaces[interfaces_count];</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 fields_count;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>field_info fields[fields_count];</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 methods_count;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>method_info methods[methods_count];</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>u2 attributes_count;</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span><span>? </span>attribute_info attributes[attributes_count];</span></p>
<p style="margin-right: 0cm; text-indent: 17.5pt;"><span style="color: windowtext; font-size: 10pt;"><span>??? </span>}</span></p>
</div>
<p alt="缓缓琢磨JVM——恭喜JavaEye重新开张"><br>?<span>图示在一个栈中有两个栈帧,栈帧<span lang="EN-US">2</span>是最先被调用的方法,先入栈,然后方法<span lang="EN-US">2</span>又调用了方法<span lang="EN-US">1</span>,栈帧<span lang="EN-US">1</span>处于栈顶的位置,栈帧<span lang="EN-US">2</span>处于栈底,执行完毕后,依次弹出栈帧<span lang="EN-US">1</span>和栈帧<span lang="EN-US">2</span>,线程结束,栈释放。</span></p>
<p style="text-indent: 21.1pt;"><strong><span lang="EN-US">Permanent Space </span></strong><strong><span>永久存储区</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span lang="EN-US">Young Generation Space </span></strong><strong><span>新生区</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span lang="EN-US">Tenure generation space</span></strong><strong><span>养老区</span></strong></p>
<p alt="缓缓琢磨JVM——恭喜JavaEye重新开张"><br>?<span style="font-family: Wingdings;"><span>q<span style="font: 7.0pt ;">? </span></span></span><span lang="EN-US">Method Area </span><span>方法区</span></p>
<p style="text-indent: 21.1pt;"><strong><span>问:堆和栈有什么区别</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:堆内存中到底存在着什么东西?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:类变量和实例变量有什么区别?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:我听说类变量是在</span><span lang="EN-US">JVM</span></strong><strong><span>启动时就初始化好的,和你这说的不同呀!</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:</span><span lang="EN-US">Java</span></strong><strong><span>的方法(函数)到底是传值还是传址?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:为什么会产生</span><span lang="EN-US">OutOfMemory</span></strong><strong><span>产生?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:我产生的对象不多呀,为什么还会产生</span><span lang="EN-US">OutOfMemory</span></strong><strong><span>?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:</span><span lang="EN-US">OutOfMemory</span></strong><strong><span>错误分几种?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:为什么会产生</span><span lang="EN-US">StackOverflowError</span></strong><strong><span>?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:一个机器上可以看多个</span><span lang="EN-US">JVM</span></strong><strong><span>吗?</span><span lang="EN-US">JVM</span></strong><strong><span>之间可以互访吗?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:为什么</span><span lang="EN-US">Java</span></strong><strong><span>要采用垃圾回收机制,而不采用</span><span lang="EN-US">C/C++</span></strong><strong><span>的显式内存管理?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:为什么你没有详细介绍垃圾回收机制?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:</span><span lang="EN-US">JVM</span></strong><strong><span>中到底哪些区域是共享的?哪些是私有的?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:什么是</span><span lang="EN-US">JIT</span></strong><strong><span>,你怎么没说?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:</span><span lang="EN-US">JVM</span></strong><strong><span>还有哪些部分是你没有提到的?</span></strong></p>
<p style="text-indent: 0cm;"><span lang="EN-US"><span>?????? </span></span></p>
<p style="text-indent: 21.1pt;"><strong><span>问:为什么不建议在程序中显式的生命</span><span lang="EN-US">System.gc()</span></strong><strong><span>?</span></strong></p>
<p style="text-indent: 21.1pt;"><strong><span>问:</span><span lang="EN-US">JVM</span></strong><strong><span>有哪些调整参数?</span></strong></p>
<p />