标签: jit

究竟什么-XX:-TieredCompilation呢?

使用java -XX:+PrintFlagsFinal我找到了TieredCompilation旗帜,我在线阅读了一下.

然而,我仍然不知道究竟它设置时会发生什么false.

我知道编译系统支持5个执行级别,基本上分为解释器C1和C2:

  • 0级 - 翻译
  • 级别1 - 具有完全优化的C1(无分析)
  • 级别2 - 具有调用和后备计数器的C1
  • 3级 - 具有完整性能分析的C1(2级+ MDO)
  • 4级 - C2

资料来源:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/2b2511bd3cc8/src/share/vm/runtime/advancedThresholdPolicy.hpp#l34

两个问题:

(1)通过设置-XX:-TieredCompilation,这些级别中的一些只是禁用了吗?如果是的话,哪个?

(2)是否有一些标志来决定是禁用C1还是C2,还是根本不编译?

java jit jvm

54
推荐指数
3
解决办法
2万
查看次数

为什么LuaJIT这么好?

编辑:不幸的是,LuaJIT在下面的链接中被取消了比较.

这种编程语言的比较表明,LuaJIT比普通的Lua实现有十倍以上的改进.为什么变化如此之大?是否有一些特定的Lua使得它从JIT编译中受益匪浅?Python是动态类型化的,并且也被编译为字节码,那么为什么PyPy(我相信现在有JIT)显示出如此大的性能提升?

lua jit luajit

52
推荐指数
1
解决办法
2万
查看次数

JIT没有优化涉及Integer.MAX_VALUE的循环

在写另一个问题的答案时,我注意到JIT优化的一个奇怪的边界情况.

以下程序不是 "Microbenchmark",也不是为了可靠地测量执行时间(如另一个问题的答案中所指出的).它仅用作MCVE来重现该问题:

class MissedLoopOptimization
{
    public static void main(String args[])
    {
        for (int j=0; j<3; j++)
        {
            for (int i=0; i<5; i++)
            {
                long before = System.nanoTime();
                runWithMaxValue();
                long after = System.nanoTime();
                System.out.println("With MAX_VALUE   : "+(after-before)/1e6);
            }
            for (int i=0; i<5; i++)
            {
                long before = System.nanoTime();
                runWithMaxValueMinusOne();
                long after = System.nanoTime();
                System.out.println("With MAX_VALUE-1 : "+(after-before)/1e6);
            }
        }
    }

    private static void runWithMaxValue()
    {
        final int n = Integer.MAX_VALUE;
        int i = …
Run Code Online (Sandbox Code Playgroud)

java jit jvm-hotspot compiler-optimization

49
推荐指数
1
解决办法
1394
查看次数

为什么使用JIT与编译到机器代码时Java更快?

我听说Java必须使用JIT才能快速.与解释相比,这是完全合理的,但为什么不能有人制作生成快速Java代码的提前编译器?我知道gcj,但我认为它的输出通常不比Hotspot快.

是否有关于语言的事情使这个困难?我认为这取决于这些事情:

  • 反射
  • 类加载

我错过了什么?如果我避免使用这些功能,是否可以将Java代码编译一次到本机机器代码并完成?

java jit

48
推荐指数
8
解决办法
2万
查看次数

LuaJIT真的比其他所有JIT动态语言都快吗?

根据计算机语言基准测试游戏,LuaJIT实现似乎击败了所有其他JIT-ed动态语言(V8,Tracemonkey,PLT Scheme,Erlang HIPE)一个数量级.

我知道这些基准测试不具代表性(正如他们所说:"哪种编程语言实现具有最快的基准测试程序?"),但这仍然令人印象深刻.

在实践中,情况确实如此吗?有人测试过Lua的实现吗?

lua jit luajit

48
推荐指数
3
解决办法
3万
查看次数

定义局部变量const与类const

如果我使用仅在方法中需要的常量,最好在方法范围内或类范围内声明const吗?是否有更好的性能在方法中声明它?如果这是真的,我认为在类范围(文件顶部)定义它们以更改值并更容易重新编译更为标准.

public class Bob
{
   private const int SomeConst = 100; // declare it here?
   public void MyMethod()
   {
      const int SomeConst = 100; // or declare it here?
      // Do soemthing with SomeConst
   }
}
Run Code Online (Sandbox Code Playgroud)

.net c# jit const

47
推荐指数
3
解决办法
1万
查看次数

.NET JIT编译的代码在哪里缓存?

.NET程序首先编译为MSIL代码.执行时,JIT编译器会将其编译为本机机器代码.

我想知道:

这些JIT编译的机器代码存储在哪里?它只存储在进程的地址空间中吗?但是由于程序的第二次启动比第一次快得多,我认为即使在执行完成之后,这个本机代码也必须存储在磁盘上.但是哪里?

.net c# clr jit

46
推荐指数
3
解决办法
1万
查看次数

如何在x86程序集中编写自修改代码

我正在为最近一直在研究的业余爱好虚拟机编写JIT编译器.我知道有点汇编,(我主要是一个C程序员.我可以阅读大多数汇编参考我不理解的操作码,并编写一些简单的程序.)但我很难理解这几个例子我在网上找到的自修改代码.

这是一个这样的例子:http://asm.sourceforge.net/articles/smc.html

提供的示例程序在运行时进行了大约四种不同的修改,其中没有一个被清楚地解释.Linux内核中断被多次使用,没有解释或详细说明.(作者在调用中断之前将数据移动到几个寄存器中.我假设他正在传递参数,但这些参数根本没有解释,让读者猜测.)

我正在寻找的是自修改程序代码中最简单,最直接的例子.我可以看到的东西,用于理解如何编写x86程序集中的自修改代码,以及它是如何工作的.您是否有任何资源可以指向我,或者您可以提供的任何示例都能充分证明这一点?

我正在使用NASM作为我的汇编程序.

编辑:我也在Linux上运行此代码.

x86 assembly jit self-modifying vm-implementation

46
推荐指数
2
解决办法
2万
查看次数

冗余演员表会得到优化吗?

我正在更新一些旧代码,并且发现了几个实例,每次需要调用其中一个属性或方法时,都会重复转换相同的对象.例:

if (recDate != null && recDate > ((System.Windows.Forms.DateTimePicker)ctrl).MinDate)
{
    ((System.Windows.Forms.DateTimePicker)ctrl).CustomFormat = "MM/dd/yyyy";
    ((System.Windows.Forms.DateTimePicker)ctrl).Value = recDate;
}
else
{
    (System.Windows.Forms.DateTimePicker)ctrl).CustomFormat = " ";
}
((System.Windows.Forms.DateTimePicker)ctrl).Format = DateTimePickerFormat.Custom;
Run Code Online (Sandbox Code Playgroud)

我倾向于修复这种怪异,但考虑到我有限的时间,我不想打扰任何不影响功能或性能的东西.

所以我想知道的是,这些冗余的演员是否被编译器优化了?我试着用一个简单的例子使用ildasm自己搞清楚,但不熟悉IL我只是更加困惑.

UPDATE

到目前为止,共识似乎是a)不,演员表没有优化,但b)虽然可能会有一些小的性能影响因此,它不太可能显着,并且c)我应该考虑修复它们无论如何.如果我有时间的话,我有一天会解决这些问题.同时,我不会担心他们.

感谢大家!

.net c# jit casting compiler-optimization

45
推荐指数
3
解决办法
1854
查看次数

使用const局部变量是否有运行时优势?

除了确保它们无法更改(编译器错误的调整)之外,JIT是否对const本地进行任何优化?

例如.

public static int Main(string[] args)
{
    const int timesToLoop = 50;

    for (int i=0; i<timesToLoop; i++)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

c# jit const

44
推荐指数
3
解决办法
7337
查看次数