Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当目标平台预先确定时,如何消除JIT需求?_Java_.net_Operating System_Platform Independent - Fatal编程技术网

Java 当目标平台预先确定时,如何消除JIT需求?

Java 当目标平台预先确定时,如何消除JIT需求?,java,.net,operating-system,platform-independent,Java,.net,Operating System,Platform Independent,使用中间语言(.Net:MSIL,Java:Bytecode)可以实现平台独立性,这是非常棒的。但是,当一个应用程序应该只在一个平台上运行(例如Windows)时,在这种情况下,有没有简单的方法来指定“我不需要每次都使用JIT,只要给我本机代码就可以了?”我不能代表.Net,但肯定有本机Java编译器,比如GNU GCJ 然而,更重要的是,您真的确定要避免JIT吗?JIT编译器根据代码的全局状态进行操作,通常可以进行静态编译器无法进行的优化。例如,当JIT编译器知道当前不存在重写它的子类时,它可

使用中间语言(.Net:MSIL,Java:Bytecode)可以实现平台独立性,这是非常棒的。但是,当一个应用程序应该只在一个平台上运行(例如Windows)时,在这种情况下,有没有简单的方法来指定“我不需要每次都使用JIT,只要给我本机代码就可以了?”

我不能代表.Net,但肯定有本机Java编译器,比如GNU GCJ


然而,更重要的是,您真的确定要避免JIT吗?JIT编译器根据代码的全局状态进行操作,通常可以进行静态编译器无法进行的优化。例如,当JIT编译器知道当前不存在重写它的子类时,它可以内联虚拟方法(而静态编译器不知道以后是否会(静态或动态)链接这样的类)。还有许多其他的例子,但我不认为这个答案的范围是列出它们

我不能代表.Net说话,但肯定有本地Java编译器,比如GNU GCJ

然而,更重要的是,您真的确定要避免JIT吗?JIT编译器根据代码的全局状态进行操作,通常可以进行静态编译器无法进行的优化。例如,当JIT编译器知道当前不存在重写它的子类时,它可以内联虚拟方法(而静态编译器不知道以后是否会(静态或动态)链接这样的类)。还有许多其他的例子,但我不认为这个答案的范围是列出它们

单一平台(Windows)并不意味着单一目标。我目前在Windows上运行,有些二进制文件是x86,有些是x64。即使在同一处理器系列中,不同的特定芯片也具有JIT可以处理的不同功能

在.NET上,你可以使用它,但就我个人而言,在你将它实际用于生产之前,我会看到它有多大的好处。我认为主要的好处在于启动时间,而不是实际执行时的性能。事实上,我相信“正常”JIT可以做出一些NGEN不会做的优化

需要注意的一点是,尽管Hotspot JIT for Java如Dolda2000所述是自适应的,.NET JIT目前是“一次性的”-如果它被大量使用,它不会重新使用JIT代码,也不会对子类化进行假设,然后在以后“撤消”它们。

单平台(Windows)并不是说只有一个目标。我目前在Windows上运行,有些二进制文件是x86,有些是x64。即使在同一处理器系列中,不同的特定芯片也具有JIT可以处理的不同功能

在.NET上,你可以使用它,但就我个人而言,在你将它实际用于生产之前,我会看到它有多大的好处。我认为主要的好处在于启动时间,而不是实际执行时的性能。事实上,我相信“正常”JIT可以做出一些NGEN不会做的优化

需要注意的一点是,尽管Hotspot JIT for Java如Dolda2000所述是自适应的,.NET JIT目前是“一次性的”-如果它被大量使用,它不会重新使用JIT代码,也不会对子类化进行假设,然后在以后“撤消”它们。

另一点:

当前许多框架在类加载期间操纵字节码。这意味着磁盘上的代码不是执行的代码。任何执行基于注释的依赖项注入的Java框架都将使用这种方法。JPA/Hibernate使用这个。AOP(面向方面编程)通常使用这种方法,尽管AOP框架通常也提供一种在构建期间操作类文件的方法

将代码预先编译为本机代码会使这些框架变得无用

另一点:

当前许多框架在类加载期间操纵字节码。这意味着磁盘上的代码不是执行的代码。任何执行基于注释的依赖项注入的Java框架都将使用这种方法。JPA/Hibernate使用这个。AOP(面向方面编程)通常使用这种方法,尽管AOP框架通常也提供一种在构建期间操作类文件的方法

将代码预先编译为本机代码会使这些框架变得无用