Java虚拟机工作原理详解( 三 )


当程序通过JNI(Java Native Interface)调用本地方法(如C或者C++代码)时,就根据本地方法的语言类型建立相应的栈 。
5. 方法区域
方法区域是一个JVM实例中的所有线程共享的,当启动一个JVM实例时,方法区域被创建 。它用于存运行放常量池、有关域和方法的信息、静态变量、类和方法的字节码 。不同的JVM实现方式在实现方法区域的时候会有所区别 。Oracle的HotSpot称之为永久区域(Permanent Area)或者永久代(Permanent Generation) 。
6. 运行常量池
这个区域存放类和接口的常量,除此之外,它还存放方法和域的所有引用 。当一个方法或者域被引用的时候,JVM就通过运行常量池中的这些引用来查找方法和域在内存中的的实际地址 。
7. 堆(Heap)
堆中存放的是程序创建的对象或者实例 。这个区域对JVM的性能影响很大 。垃圾回收机制处理的正是这一块内存区域 。
所以,类加载器加载其实就是根据编译后的Class文件,将java字节码载入JVM内存,并完成对运行数据处于的初始化工作,供执行引擎执行 。
三、 执行引擎(Execution Engine)类加载器将字节码载入内存之后,执行引擎以Java 字节码指令为但愿,读取Java字节码 。问题是,现在的java字节码机器是读不懂的,因此还必须想办法将字节码转化成平台相关的机器码 。这个过程可以由解释器来执行,也可以有即时编译器(JIT Compiler)来完成 。




推荐阅读