我知道这依赖于JVM,每个虚拟机都会选择实现它,但我想了解总体概念。
据说对于JVM用来执行Java程序的内存段
不一定用连续内存实现,并且可能都实际分配在操作系统提供的一些堆内存上,这就引出了我的问题。
再次,我想强调我要求的是一个整体概念,我知道每个JVM都会选择实现这个有点不同...
JVM充分利用JIT机制,将字节码方法编译成本机机器码方法,并将这些方法存储在某个地方,会在哪里?
它存储在Java中的“Perm Gen”中
执行引擎(通常用C/C编写)必须调用这些JIT编译的函数,然而内核不应该允许程序执行保存在堆栈/堆/静态内存段上的代码,JVM如何克服这一问题?
内存区域既是可写的,也是可执行的,尽管我不知道具体需要哪个系统调用来实现这一点。
我的另一个问题是关于Java栈,当一个方法(JIT编译后)
最初代码没有编译,但它以相同的方式使用堆栈。
是在处理器内执行的。它的局部变量应该保存在Java堆栈中,而且Java堆栈可以使用非连续内存来实现
每个线程都有一个连续的堆栈。
甚至可能只是在堆上作为堆栈分配的一些堆栈数据结构,如何以及在何处保存正在执行的方法的局部变量?
在线程堆栈上。
内核不应该允许程序将堆分配的内存视为进程堆栈,JVM如何克服这个困难?
它不能这样做。
问题内容: Sun的规范JVM实现对字节码进行了一些相当复杂的优化,以在代码运行几次后获得接近本机的执行速度。 问题是,为什么没有将此编译后的代码缓存到磁盘以供以后使用同一功能/类时使用? 就目前而言,每次执行程序时,JIT编译器都会重新启动,而不是使用代码的预编译版本。当本质上解释字节码时,是否添加此功能不会大大提高程序的初始运行时间? 问题答案: 我不求助于@MYYN发布的链接的’n’past
我试图理解Java源代码是如何执行的,我对JVM中的JIT编译器究竟是什么感到困惑。首先,让我告诉您我是如何理解从Java源代码到在计算机上执行机器代码的过程的。也许,我在这一过程中误解了一些导致混淆的东西。 步骤如下: 源代码被编译成字节码(.class文件) 现在,根据维基百科关于JVM的文章,更具体地说是“字节码解释器和实时编译器”部分,为了执行Java字节码,您需要一个解释器(但我们有一个
主要内容:JIT编译器语法,JIT编译器的风险和假设JIT 编译器是用 C++ 编写的,用于将 Java 转换为字节码。现在 Java 10 可以选择启用基于 Java 的实验性 JIT 编译器 Graal 来代替标准的 JIT 编译器。Graal 正在使用 Java 9 中引入的 JVMCI,即 JVM 编译器接口。 Graal 在 Java 9 中也可用。使用 Java 10,我们可以启用 Graal 来测试和调试实验性 JVM 编译器。 JI
这个问题与android系统有关。Dalvik VM使用JIT概念,这意味着当您第一次运行应用程序时,Dalvik VM编译它并加载到RAM中,只要它能留在那里。我理解这个概念。而新的称为ART的虚拟机则使用AOT方法。ART编译应用程序后,你安装它(或当你正在安装它?)。这意味着什么?ART编译的应用程序与已编译的应用程序(如C应用程序)相同,但运行在与其他操作系统分离的独立进程中?谁能更透彻地
我正在尝试离线构建一个站点,并且已经登录,打算创建一个子主题,但是出现了一些错误。 我尝试在php.ini中添加以下行:"pcre.jit=0" 这是显示的错误: JIT编译失败:没有更多的内存til.php#1425preg_replace 回溯 ./库/类/Util.php#1425:preg_replace(string'/\.?0$/', string", string'48.0', )
问题内容: 我经常碰到声称Java被解释的文章。我知道Oracle的HotSpot JRE提供即时编译,但是大多数台式机用户都是这种情况吗?例如,如果我通过http://www.java.com/en/download下载Java ,它将包括JIT编译器吗? 问题答案: 是的,一点没错。声称Java被解释的文章通常由不了解Java的工作原理或不了解解释的含义的人撰写。 话虽如此,HotSpot 有