JVM中的本机堆栈和缓存代码

时间:2015-05-03 18:19:18

标签: java jvm native

  

解释Java字节代码但这不如在JVM的主机CPU上直接执行本机代码那么快。为了提高性能,Oracle Hotspot VM会查找定期执行的“热”字节代码区域,并将这些区域编译为本机代码。然后将本机代码存储在非堆内存中的代码缓存中。通过这种方式,Hotspot VM尝试选择最合适的方式来权衡编译代码所需的额外时间以及执行解释代码所需的额外时间。

     

并非所有JVM都支持本机方法,但是,那些通常会创建每线程本机方法堆栈的方法。如果使用C-linkage模型为Java Native Invocation(JNI)实现了JVM,则本机堆栈将是C堆栈。在这种情况下,参数和返回值的顺序在本机堆栈中与典型的C程序相同。本机方法通常可以(取决于JVM实现)回调到JVM并调用Java方法。 Java调用的本机将发生在堆栈上(普通的Java堆栈);线程将离开本机堆栈并在堆栈上创建一个新帧(普通Java堆栈)。

代码缓存和本机堆栈的原生含义是什么?当我在Ubuntu上编写一个程序并在Eclipse上运行它时,程序运行一个循环,其中有一些代码,这个代码会转到代码缓存吗?是否会重新编译为某种母语,当我使用Ubuntu,Oracle Java 1.7时,我使用的是Intel i5处理器。 关于Oracle JVM7的同样问题 - 它是用C语言编写的吗?当我使用Ubuntu和Oracle Java 1.7时,当使用本机堆栈时,在这种情况下究竟是什么意思的本机?

1 个答案:

答案 0 :(得分:0)

据我所知,JVM为本机方法创建了一个单独的堆栈,通过JNI绑定到Java代码。它已经这样做了,因为这些方法有自己的堆栈规范。但这一切都取决于JVM的实现,也可能是Native方法没有单独的堆栈。

你可以看看这篇文章: http://www.artima.com/insidejvm/ed2/jvm9.html