Tag: jit

JVM / JAVA中的预取指令

是否有Java语言或JVM中的任何软件预取指令,例如GCC中提供的__builtin_prefetch

Java:JIT方法内联

Java JIT 何时内联方法调用? 它是基于#times调用调用方法(如果是,该数字是什么?),或者其他一些标准(那将是什么?) 我已经读过JIT可以内联’final’方法,但它也会根据运行时统计信息内联非最终方法,所以想知道什么是触发条件。 我想答案会根据JVM的实现而有所不同,但也许所有这些都有共同之处?

禁用特定方法/类的Java JIT?

我在我的Java应用程序中遇到了一个JIT破坏代码的问题。 如果我禁用JIT,一切正常,但运行速度慢10-20倍。 有没有办法禁用特定方法或类的JIT? 编辑:我正在使用Ubuntu 10.10,获得相同的结果: OpenJDK Runtime Environment (IcedTea6 1.9) (6b20-1.9-0ubuntu1) OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode) 和: Java(TM) SE Runtime Environment (build 1.6.0_16-b01) Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

桌面上的JVM是否使用JIT编译?

我总是遇到声称Java被解释的文章。 我知道Oracle的HotSpot JRE提供即时编译,但对于大多数桌面用户来说情况如此吗? 例如,如果我通过以下url下载Java: http : //www.java.com/en/download ,这是否包含JIT编译器?

一些运行/ JIT的故障后Java循环变慢了?

所以我想对一些基本的javafunction进行基准测试,以便为这个问题添加一些信息: 将方法声明为静态会带来什么好处 。 我知道写作基准有时并不容易,但这里发生的事情我无法解释。 请注意,我并没有考虑如何解决这个问题,而是为什么会发生这种情况* 测试类: public class TestPerformanceOfStaticVsDynamicCalls { private static final long RUNS = 1_000_000_000L; public static void main( String [] args ){ new TestPerformanceOfStaticVsDynamicCalls().run(); } private void run(){ long r=0; long start, end; for( int loop = 0; loop<10; loop++ ){ // Benchmark start = System.currentTimeMillis(); for( long i = 0; i […]

jit会优化新对象吗?

我创建了这个类是不可变的,并且具有流畅的API: public final class Message { public final String email; public final String escalationEmail; public final String assignee; public final String conversationId; public final String subject; public final String userId; public Message(String email, String escalationEmail, String assignee, String conversationId, String subject, String userId) { this.email = email; this.escalationEmail = escalationEmail; this.assignee = assignee; this.conversationId = […]

HotSpot JIT内联策略:自上而下或下至上

假设我们有3个方法:从方法1调用方法2,从方法2调用方法3.方法2和3各自大小为30个字节码。 另外,假设确定性方法2总是从方法1中恰好调用一次,并且方法3总是从方法2中调用一次。 如果方法2首先被内联,则方法3将直接从方法1的主体调用,并且可以依次内联。 如果方法3首先内联到方法2中,则后者的大小将变为大约60个字节码,并且不能内联,因为默认的MaxInlineSize阈值是35个字节码。 HotSpot JIT以哪种顺序内联方法:自上而下或下至上?

Java:空循环使用多长时间?

我试图在Java中测试自动装箱和拆箱的速度,但是当我尝试将它与原语上的空循环进行比较时,我注意到了一个奇怪的事情。 这个片段: for (int j = 0; j < 10; j++) { long t = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) ; t = System.currentTimeMillis() – t; System.out.print(t + " "); } 每次我运行它,它返回相同的结果: 6 7 0 0 0 0 0 0 0 0 为什么前两个循环总是需要一些时间,其余的似乎被系统跳过? 在这篇文章的答案中,据说Just-In-Time编译将能够优化这一点。 但如果是这样,为什么前两个循环还需要一些时间?

JVM如何决定JIT编译方法(将方法归类为“热门”)?

我已经使用-XX:+PrintCompilation ,我知道JIT编译器的基本技术以及使用JIT编译的原因。 然而,我仍然没有发现JVM如何决定JIT编译方法,即“当JIT编译方法的时候到了”。 我是否正确地假设每个方法都开始被解释,并且只要它不被归类为“热方法”它就不会被编译? 我有一些东西在脑后,我读到一个方法被认为是“热”,当它被执行至少10.000次(解释方法10.000次后,它将被编译),但我不得不承认我是不确定这个或我在哪里读到这个。 总结一下我的问题: (1)只要没有将每种方法归类为“热”方法(并因此已被编译),或者是否有理由使用方法进行编译,即使它们不是“热”的,也会解释每种方法吗? (2)JVM如何将方法分为“非热”和“热”方法? 执行次数? 还要别的吗? (3)如果“热”方法存在某些阈值(如执行次数),是否有Java标志( -XX:… )来设置此阈值?