addA
dPri
t3doubleresultaddTwoTypes188884Systemoutpri
tl
result56publicstaticdoubleaddTwoTypesi
tidoubled7retur
id8910
f执行上述代码时,Java栈如下图所示:
花些时间好好研究上图。一样需要注意的是,栈的底部在上方,先押人员addA
dPri
t方法的栈帧,再压入addTwoTypes方法的栈帧。上图最右边的文字说明有错误,应该是addTwoTypes的执行结果存放在addA
dPri
t的操作数栈中。》》本地方法栈
f当程序通过JNI(JavaNativeI
terface)调用本地方法(如C或者C代码)时,就根据本地方法的语言类型建立相应的栈。》》方法区域方法区域是一个JVM实例中的所有线程共享的,当启动一个JVM实例时,方法区域被创建。它用于存运行放常量池、有关域和方法的信息、静态变量、类和方法的字节码。不同的JVM实现方式在实现方法区域的时候会有所区别。Oracle的HotSpot称之为永久区域(Perma
e
tArea)或者永久代(Perma
e
tGe
eratio
)。》》运行常量池这个区域存放类和接口的常量,除此之外,它还存放方法和域的所有引用。当一个方法或者
f域被引用的时候,JVM就通过运行常量池中的这些引用来查找方法和域在内存中的的实际地址。》》堆(Heap)堆中存放的是程序创建的对象或者实例。这个区域对JVM的性能影响很大。垃圾回收机制处理的正是这一块内存区域。所以,类加载器加载其实就是根据编译后的Class文件,将java字节码载入JVM内存,并完成对运行数据处于的初始化工作,供执行引擎执行。
三、执行引擎(Executio
E
gi
e)类加载器将字节码载入内存之后,执行引擎以Java字节码指令为但愿,读取Java字节码。
f问题是,现在的java字节码机器是读不懂的,因此还必须想办法将字节码转化成平台相关的机器码。这个过程可以由解释器来执行,也可以有即时编译器(JITCompiler)来完成。
fr