java 机会内联_优化过程中会使用Java内联方法吗?

小编典典

javac将提供字节码,该字节码是生成该字节码的原始Java程序的忠实表示(在某些可以优化的特定情况下除外: 常量折叠 和 消除死代码

)。但是,当JVM使用JIT编译器时,可以执行优化。

对于第一种情况,JVM似乎支持内联(请参见此处的“方法”

下的内容,以及有关JVM的内联示例的信息,请参见此处)。

我找不到自己执行方法内联的任何示例javac。我尝试编译一些示例程序(类似于您在问题中描述的程序),即使是,它们似乎都没有直接内联该方法final。这些优化似乎是由JVM的JIT编译器而非进行的javac。下提到的“编译”

的方法

在这里似乎是热点JVM的JIT编译器,而不是javac。

据我所知,它javac支持 死代码消除 (请参阅第二种情况的示例)和 常量折叠

。在常量折叠中,编译器将预先计算常量表达式并使用计算出的值,而不是在运行时执行计算。例如:

public class ConstantFolding {

private static final int a = 100;

private static final int b = 200;

public final void baz() {

int c = a + b;

}

}

编译为以下字节码:

Compiled from "ConstantFolding.java"

public class ConstantFolding extends java.lang.Object{

private static final int a;

private static final int b;

public ConstantFolding();

Code:

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: return

public final void baz();

Code:

0: sipush 300

3: istore_1

4: return

}

请注意,字节码有一个sipush 300替代aload的getfieldS和一个iadd。300是计算值。private

final变量也是如此。如果a和b不是静态的,则产生的字节码将是:

Compiled from "ConstantFolding.java"

public class ConstantFolding extends java.lang.Object{

private final int a;

private final int b;

public ConstantFolding();

Code:

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: aload_0

5: bipush 100

7: putfield #2; //Field a:I

10: aload_0

11: sipush 200

14: putfield #3; //Field b:I

17: return

public final void baz();

Code:

0: sipush 300

3: istore_1

4: return

}

这里也sipush 300使用了。

对于第二种情况(消除死代码),我使用了以下测试程序:

public class InlineTest {

private static final boolean debug = false;

private void baz() {

if(debug) {

String a = foo();

}

}

private String foo() {

return bar();

}

private String bar() {

return "abc";

}

}

给出以下字节码:

Compiled from "InlineTest.java"

public class InlineTest extends java.lang.Object{

private static final boolean debug;

public InlineTest();

Code:

0: aload_0

1: invokespecial #1; //Method java/lang/Object."":()V

4: return

private void baz();

Code:

0: return

private java.lang.String foo();

Code:

0: aload_0

1: invokespecial #2; //Method bar:()Ljava/lang/String;

4: areturn

private java.lang.String bar();

Code:

0: ldc #3; //String abc

2: areturn

}

如您所见,foo根本不会调用,baz因为该if块内的代码实际上是“死”的。

Sun(现在是Oracle)的HotSpot

JVM结合了字节码的解释和JIT编译。当将字节码提供给JVM时,代码将首先进行解释,但是JVM将监视字节码并挑选出经常执行的部分。它将这些部分覆盖到本机代码中,以便它们可以更快地运行。对于不经常使用的字节码,此编译不会完成。同样也因为编译有一些开销。因此,这实际上是一个权衡的问题。如果决定将所有字节码编译为本机代码,则该代码可能会具有很长的启动延迟。

除了监视字节码之外,JVM还可在解释和加载字节码时对其执行静态分析,以执行进一步的优化。

如果您想了解JVM执行的特定类型的优化,那么Oracle的此页面将非常有帮助。它描述了HotSpot

JVM中使用的性能技术。

2020-09-11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值