Java 内联函数
本文介绍如何在 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 和经过的时间会更多。
相关文章
Serialize Object to JSON in Java
发布时间:2023/07/21 浏览次数:195 分类:Java
-
This tutorial demonstrates how to serialize an object to JSON in Java.
Pretty-Print JSON Data in Java
发布时间:2023/07/21 浏览次数:115 分类:Java
-
This tutorial will discuss the JSON Pretty-Print 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.
Java Disable SSL Validation
发布时间:2023/07/21 浏览次数:101 分类:Java
-
This tutorial demonstrates how to disable SSL validation in Java.
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 中过滤列表。