迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 内联函数

作者:迹忆客 最近更新:2023/07/22 浏览次数:

本文介绍如何在 Java 中实现内联函数。


Java 内联函数

当编译器复制函数代码并将其放置在任何位置时,它被视为内联函数。 如果我们更改内联函数的代码,编译器将必须更改所有复制版本中的代码。

HotSpot JVM 即时(JIT)编译器可以执行很多优化,其中还包括默认启用的内联,我们可以使用以下标志来启用或禁用 JVM 中的内联:

-XX:+Inline (+ means true, which enables the inlining)
-XX:-Inline (- means false, which disables the inlining)

Java不提供内联函数,但JVM在执行时执行此操作。 当编译器执行时,我们不必使用Java中的内联函数。

为了了解它是如何工作的,让我们尝试在 Java 中创建内联函数功能。 参见示例:

package jiyik;

public class Inline_Example {

    public static final class Points {

        private int a = 0;

        private int b = 0;

        public int getA() {
            return a;
        }

        public void setA(int a) {
            this.a = a;
        }

        public int getB() {
            return b;
        }

        public void setB(int b) {
            this.b = b;
        }

        @Override
        public String toString() {
            return String.format("%s[a=%d, b=%d]", getClass().getSimpleName(), a, b);
        }
    }

    public static void main(String[] args) {

        final Points NotInlinedPoints = new Points();
        NotInlinedPoints.setA( NotInlinedPoints.getA() + 2);
        NotInlinedPoints.setB( NotInlinedPoints.getA() * 6/2);

        final Points InlinedPoints = new Points();
        InlinedPoints.a = InlinedPoints.a + 2;
        InlinedPoints.b = InlinedPoints.a * 6/2;

        System.out.println("The Non Inlined Points "+NotInlinedPoints);
        System.out.println("The Inlined Points "+InlinedPoints);
    }
}

上面的代码显示了方法内联。 执行优化,方法调用被替换为简单的语句,如我们的代码所示。

NotInlinedPoints 和 InlinedPoints 都执行相同的操作,如输出所示:

The Non Inlined Points Points[a=2, b=6]
The Inlined Points Points[a=2, b=6]

正如我们在这里看到的,我们不必通过在 Java 中声明内联函数来执行内联。 JVM 在幕后通过一些复杂的结构来完成此任务。

默认情况下,JVM 中启用内联。 让我们尝试使用上述标志禁用内联来运行代码。

在cmd中运行上面的代码:

C:\Users\DelftStack>javac Inline_Example.java
C:\Users\DelftStack> Java -XX:-Inline Inline_Example.java
The Non Inlined Points Points[a=2, b=6]
The Inlined Points Points[a=2, b=6]

正如我们所看到的,禁用内联后,代码在结果上没有显示任何差异,但此编译的进程 ID 和经过的时间会更多。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Merge PDF in Java

发布时间:2023/07/21 浏览次数:157 分类:Java

This tutorial will discuss merging PDF in Java.

Define a Static Method in Java Interface

发布时间:2023/07/21 浏览次数:187 分类:Java

This tutorial demonstrates how to define static methods in a Java interface, what are rules for that and why we can't override these static methods.

Limit Java SSL Debug Logging

发布时间:2023/07/21 浏览次数:184 分类:Java

Today, we will learn about Java SSL debug, its importance, various utilities and how to use one or multiple in a single command.

Introduction to Integration Testing in Java

发布时间:2023/07/21 浏览次数:103 分类:Java

This tutorial revolves around integration testing, its different types, and guides about the required steps of integration testing taking a real-world scenario.

Capture and Analyze Java Heap Dump

发布时间:2023/07/21 浏览次数:68 分类:Java

This tutorial educates about Java heap dump, its various formats and methods to capture. Further, we will learn what tool is used to analyze heap dump that we generated.

Java 中的过滤器列表

发布时间:2023/07/21 浏览次数:69 分类:Java

在 Java 中工作时经常需要过滤列表。 在 Java 中过滤列表的多种方法使用核心 Java 和不同的库。本文介绍如何在 Java 中过滤列表。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便