`
berdy
  • 浏览: 513651 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA中的内联函数

阅读更多
在说内联函数之前,先说说函数的调用过程。

    调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到
转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保
存地址继续执行。也就是通常说的压栈和出栈。因此,函数调用要有一定的时间和空间方面的开销。那么对于那些函数体
代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大。

    那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了。内联函数就是在程序编译时,编译器将程序中出现
的内联函数的调用表达式用内联函数的函数体来直接进行替换。显然,这样就不会产生转去转回的问题,但是由于在编译
时将函数体中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时
那么大,可见它是以目标代码的增加为代价来换取时间的节省。

    在大学里学习写C代码时,我们都学到将一些简短的逻辑定义在宏里。这样做的好处是,在编译器编译的时候会将用
到该宏的地方直接用宏的代码替换。这样就不再需要象调用方法那样的压栈、出栈,传参了。性能上提升了。内联函数的
处理方式与宏类似,但与宏又有所不同,内联函数拥有函数的本身特性(类型、作用域等等)

    写过C++代码的应该都知道,在C++里有个内联函数,使用inline关键字修饰。另外,写在Class定义内的函数也会被
编译器视为内联函数。

那么,在java中的内联函数长什么模样呢?在java中使用final关键字来指示一个函数为内联函数,例如:
public final void method1() {   
   //TODO something   
}

    这个指示并不是必需的。final关键字只是告诉编译器,在编译的时候考虑性能的提升,可以将final函数视为内联函数。
但最后编译器会怎么处理,编译器会分析将final函数处理为内联和不处理为内联的性能比较了。

分享到:
评论

相关推荐

    Kotlin 内联函数详解及实例

    Kotlin 内联函数是 Kotlin 语言中的一种特殊函数类型,它可以在编译时将函数体代码直接插入到调用处,从而避免函数调用的时间和空间开销。下面将对 Kotlin 内联函数的相关知识点进行详细解释。 一、函数调用过程 ...

    Java动态绑定和内联

    Java动态绑定和内联是Java编程中的两个关键概念,它们对于理解Java的面向对象特性,尤其是多态性和性能优化有着重要的作用。 动态绑定,又称晚期绑定或运行时绑定,是Java语言的一个核心特性。它指的是在运行时而非...

    Kotlin中关于内联函数的一些理解分享

    看了很多博客,才明白了内联的含义,其实最根本的就是将写在别处的代码拷贝到你现在执行的方法中,相当于在一个方法中执行,java的方法执行是需要压栈出栈的对吧,如果是两三个方法那就是两三次的压栈出栈,为了节省...

    java函数语言大全

    这在回调函数和高阶函数中非常常见。 **6. 变量作用域:** 在函数内部定义的变量只有在该函数内部可见,称为局部变量。全局变量在整个程序中都可见,但使用时需谨慎,避免引发意外的副作用。 **7. 函数重载:** ...

    Java计算机语言函数应用

    - 内联函数可以提高性能,因为它们在编译时被展开,而不是在运行时调用。 - 尾递归优化是优化递归函数的一种方法,确保递归调用是函数体的最后一步,减少栈帧消耗。 以上知识点涵盖了Java函数应用的基础和进阶...

    java函数

    虽然Java不直接支持内联函数,但JIT编译器可能会在运行时进行内联,以提高性能。 15. **异常处理**: Java函数可以抛出异常,这需要在函数声明中使用`throws`关键字指定。调用者必须捕获或重新抛出这些异常。 ...

    常用高阶函数:标准库函数

    在Kotlin的标准库中,有一组非常实用的高阶函数,它们被定义在`kotlin.Standard.kt`文件内,并且都使用了`@kotlin.Internal.InlineOnly`注解,要求编译器将这些函数内联到调用位置。这样的设计主要是为了提升性能,...

    Turbo C语言函数集

    内联函数是一种优化技术,旨在减少函数调用的开销。通过在源代码中展开函数调用,避免了函数调用的额外开销。但是,编译器是否实际进行内联取决于多种因素。 十、重载函数 C语言不支持函数重载,即不能有多个同名但...

    Java 函数式编程的技巧详解.pdf

    Java函数式编程是一种高效、简洁的编程风格,它在Java 8中得到了广泛支持。函数式编程的核心思想是将计算视为函数的组合,避免副作用,提高代码的可读性和可测试性。在Java中,我们可以利用Lambda表达式、高阶函数、...

    shrinker,用asm和transform api实现android r类的内联常量字段.zip

    内联是一种优化技术,它将函数调用替换为函数体,减少了方法调用的开销,提升了执行效率。在R类中,内联常量字段可以减少对象创建,节省内存,同时由于字段直接写入到使用它的代码中,也减少了APK的大小。 Android...

    GCC内联汇编入门[参照].pdf

    同时,GCC内联汇编也可以与其他编程语言结合使用,例如C++、Java等。 本篇 HOWTO文档详细介绍了GCC内联汇编的概念、语法和用法,并提供了实用的示例代码和解释。通过学习这篇文档,开发者可以快速掌握GCC内联汇编的...

    CH-Java语言程序设计中的若干问题(与“方法”有关文档共86张).pptx

    - Java没有内联函数,但编译器可以通过优化实现类似效果。 - 类的定义在Java中没有分号结尾,类声明和定义是合一的,而在C++中,头文件(*.h)中通常包含类的声明。 3. **Java特性**: - Java使用16位Unicode...

    inline-activity-result,在回调中内联接收活动结果,不带任何样板文件。.zip

    3. 调用`launch()`方法启动目标Activity,并在lambda表达式或扩展函数中处理结果。 五、注意事项 虽然"inline-activity-result"简化了流程,但在实际应用中仍需考虑异常处理和兼容性问题。例如,确保在适当的地方...

    内联Java:通过Haskell模块中的内联Java代码进行HaskellJava互操作

    内联Java:从Haskell调用任何JVM函数 Haskell标准包括本机外部功能接口(FFI)。 使用它可能会有点麻烦,GHC中仅实现了C支持。 inline-java使您可以直接从Haskell调用任何JVM函数,而无需使用FFI编写自己的外部导入...

    《C++ for Java Programmers》高清完整英文PDF版

    书中讲解了C++中的函数定义与调用、函数重载、默认参数、内联函数和单独编译。同时对数组和字符串的使用、多维数组以及引用与常量引用的参数传递进行了详细说明。 知识点五:指针与引用变量。这部分涉及到Java与C++...

    一本介绍如何将现有的 Java 代码重构为 Kotlin 代码的书籍

    - **性能调优**:介绍如何利用Kotlin的一些性能优化特性,如内联函数、数据类等来提升程序的执行效率。 综上所述,《从Java到Kotlin:重构指南》是一本非常适合Java开发者学习Kotlin并进行代码重构的专业书籍。它...

    C++和Java多态的区别

    - **性能考量**:C++中的虚函数调用可能会导致额外的间接寻址开销,而Java中的方法调用由JVM优化处理,可能通过内联等技术减少调用成本。 - **语法糖**:Java提供了更多语法上的支持来简化多态的使用,如接口和抽象...

    html语法的教程 java中有用

    - JSP中的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化了与后台数据的交互,如 `${item.title}` 可以显示数据库中的标题。 - 使用Java的HTTP客户端库(如Apache HttpClient或...

    css+html+java 中英文帮助文档

    3. 层叠规则:CSS的“层叠”特性意味着多个样式可以应用于同一个元素,按照特定规则决定最终效果,如优先级(内联样式>内部样式>外部样式)和特异性计算。 4. 盒模型:CSS盒模型描述了元素在网页布局中的占据空间,...

    浅析面向对象语言C_与Java区别_王艳娟1

    C++的方法可以类内或类外定义,类内定义的函数通常被认为是内联函数。 3. **类定义方式**:两者类定义形式相似,但Java类定义无需结束分号,且严格遵循数据封装,没有友元函数和友元类的概念,而C++支持friend...

Global site tag (gtag.js) - Google Analytics