`

JVM内联函数

 
阅读更多

JVM内联函数的背景:

首先来看函数的调用过程:

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

 

什么是jvm内联函数?

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

 

JVM内联函数

C++是否为内联函数由自己决定,Java由编译器决定。Java不支持直接声明为内联函数的,如果想让他内联,你只能够向编译器提出请求: 关键字final修饰 用来指明那个函数是希望被JVM内联的,例:

public final void doSomething() {  
        // to do something  
}  

 总的来说,一般的函数都不会被当做内联函数,只有声明了final后,编译器才会考虑是不是要把你的函数变成内联函数。

 



 

  • 大小: 154.5 KB
分享到:
评论

相关推荐

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

    对于普通的非内联函数,JVM自身也具备内联优化的能力。它会在适当的时候自动进行函数内联,以提高运行时效率。因此,通常情况下,我们无需手动将普通函数声明为内联,因为JVM的内联优化可以达到同样的效果,而且不会...

    Java动态绑定和内联

    Java动态绑定和内联是Java...而内联则是JVM为了提高程序运行速度的一种优化手段,它可以在某些情况下消除函数调用的开销。理解这两个概念对于编写高效、可扩展的Java代码至关重要,也是Java开发者面试时常见的考察点。

    JVM性能调优

    - **内联与去内联**:适当使用方法内联可以提高性能。 #### 工具与技术 - **JConsole**:内置的监视工具,用于监控JVM的运行状态。 - **VisualVM**:提供丰富的图形界面,帮助分析JVM性能问题。 - **JProfiler** ...

    java函数

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

    kotlin-inline-logger:记录器通过Kotlin的内联类和函数促进延迟评估的日志调用

    Kotlin在线记录器 记录器通过Kotlin的内联和来促进惰性评估...在JVM上, kotlin-inline-logger提供提供委托给内联函数。 从现有SLF4J解决方案迁移的用户将发现对记录功能的现有调用,如logger.info("Example")现已标记

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

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

    jvm原理面试

    - **本地方法栈**:为Java Native Interface调用的C/C++函数服务。 - **程序计数器**:记录当前线程执行的字节码指令地址。 3. **垃圾收集(GC)** - **自动内存管理**:GC负责回收不再使用的对象,避免内存泄露...

    optimizing software in cpp

    内联函数可以消除函数调用开销,但过度使用可能导致代码膨胀。模板则提供了泛型编程能力,但可能导致编译时膨胀。在考虑使用时需权衡利弊。 5. **循环优化** 循环展开可以减少迭代次数,提高缓存利用率。避免在...

    JVM.JS-Compiler:JVM.JS的编译器

    - **优化**:对生成的JavaScript代码进行进一步优化,如内联函数、删除未使用的代码等。 **3. 运行时环境** JVM.JS不仅仅是一个编译器,还包括一个JavaScript实现的JVM运行时环境。这个环境模拟了JVM的关键组件,...

    Kotlin Language Documentation

    5. 内联函数:Kotlin中的内联函数可以减少运行时的额外开销。 6. 协程:Kotlin提供了协程支持,极大地简化了异步编程和并发编程。 7. 集合:Kotlin对集合的操作提供了丰富的支持,包括List、Set、Map等类型。 8. ...

    深入理解java对象,包括对象创建和内存分配

    例如,通过使用方法内联,JVM可以消除方法调用的开销,提高代码执行速度。此外,针对热点代码,JVM还可以进行即时编译(JIT),将字节码转化为机器码,进一步提升性能。 总的来说,理解Java对象的创建、内存分配和...

    C++和Java多态的区别

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

    kotlin-doc

    函数和Lambda表达式是Kotlin的一个重要特性,它简化了函数的定义和调用,并且支持高阶函数和内联函数,这些特性在函数式编程中尤为有用。 “类和对象”部分详细介绍了Kotlin中的类和对象,包括类的定义、继承、接口...

    Programming Kotlin(pdf+epub+mobi+code_file).zip

    2. **函数与Lambda表达式**:Kotlin的函数支持高阶函数和内联函数,而Lambda表达式使得函数式编程变得简单易行。 3. **面向对象编程**:Kotlin的类、接口、继承和多态特性,以及Sealed类和伴生对象等高级概念。 4....

    JVM-Compiler

    - **并行和并发**:Scala的函数式编程特性与JVM的线程管理相结合,可以轻松实现高效的并行和并发处理。 - **内存管理**:Scala依赖JVM的垃圾回收机制进行内存管理,程序员无需手动管理内存。 4. **JVM优化技术**...

    行业分类-设备装置-支持MIPS平台的Java虚拟机实现方法及装置.zip

    这可能涉及循环展开、寄存器分配、内联函数等优化技术,旨在减少内存访问,提高计算速度。 5. 内存管理和垃圾收集 Java虚拟机在MIPS上还需要管理内存,包括对象分配、内存回收和垃圾收集。MIPS架构可能有特定的内存...

    Kotlin 资料集合

    1. 高级特性:如内联函数和泛型数组,这些是Kotlin中提高性能和代码复用的高级特性。需要注意的是,高级特性可能会有一些“坑”,即不易察觉的陷阱或需要注意的细节。 2. 高阶函数与Lambda表达式:这部分涉及到函数...

    kotlin-compiler-di,kotlin编译器代码生成的实验.zip

    4. **编译器优化**:如何通过修改代码生成策略来提高性能,例如使用内联函数、尾递归等。 5. **JVM字节码**:理解字节码指令集,以及如何通过ASM、ByteBuddy等库直接操作字节码。 6. **Gradle构建系统**:项目构建和...

    kotlin文档

    文档还探讨了如何使用Kotlin编写函数式代码,包括高阶函数、内联函数等。 Kotlin还提供了对注解处理工具的支持,并且可以使用Gradle、Maven、Ant等构建工具来构建Kotlin项目。Kotlin与OSGi的集成也通过编译器插件...

Global site tag (gtag.js) - Google Analytics