文档章节

Java的final方法与Java的内联函数

ND小龙
 ND小龙
发布于 2017/09/03 23:29
字数 689
阅读 43
收藏 1

final方法

《java编程思想》中讲到final方法时提到,使用final方法原因有两个, 
一、锁定方法。防止任何继承类修改、覆盖 
二、效率。在java早期实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的调用都转化为内嵌调用。

如果是内嵌调用,虚拟机不再执行正常的方法调用(参数压栈,跳转到方法处执行,再调回,处理栈参数,处理返回值),而是直接将方法展开,以方法体重的实际代码替代原来的方法调用。这样减少了方法调用的开销。

 

内联函数

对函数(方法)进行某种处理,在程序运行的时候将函数(方法)展开,转换为代码。要问这样做的意义就不得不提到方法(Java中没有函数,以下用方法表示)的运行原理。

 

内联函数特点: 
(1)提升效率。如上说明。 
(2)占更多内存空间。编译器直接将内联函数扩展开,调用多复制品就多,因此更占用内存。 
(3)java中不需额外关注,jvm会自动进行优化。

 

举例

int max (int a, int b){
    if (a > b)
        return a;
    else
        return b;
}

 

void main() {
        .....
    a = max (x, y); // 内联,等价于 "a = (x > y ? x : y);" 直接扩展开了,不再调用方法
        .....
}

 

调用方法的原理

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

 

最后

final关键字只是告诉编译器,在编译的时候考虑性能的提升,可以将final函数视为内联函数。但最后编译器会怎么处理,编译器会分析将final函数处理为内联和不处理为内联的性能比较了。(和垃圾处理机制类似,程序员只有建议权而没有决定权)

本文转载自:http://blog.csdn.net/rflyee/article/details/51067301

共有 人打赏支持
ND小龙
粉丝 10
博文 45
码字总数 2295
作品 0
福州
Kotlin和Java混合开发必读:基本的互操作

在使用Kotlin和Java混合开发的时候,涉及到一些基本的互操作 一、属性的读写 1.Kotlin自动识别Java的属性的Getter和Setter 2.Java操作kotlin属性可以通过Getter和Setter的方式 二、空安全类型...

王木东
04/05
0
0
java Object类源代码详解 及nativ

package java.lang; public class Object { / 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。/ private static native void registerNatives(); / 对象初始化时自动调用此...

Yason_Luo
2014/03/18
0
0
Java OutOfMemoryError 的原因是什么,什么是Java native方法

一、Java OutOfMemoryError 的原因是什么,什么是Java native方法?转载的博文 容易发生内存溢出问题的内存空间包括:Permanent Generation space和Heap space。 常见的几种错误: 1.1 OutO...

Oscarfff
2015/05/15
0
0
Scala学习笔记(2)-基础语法

秉着简洁而不失完整的的原则,这章只把Scala主要语法和与Java不同的内容列出来,以后章节也如此,内容以简洁为主,太长了自己都被吓着了,也没耐心看下去。 1.Scala解释器使用,这里不做介绍...

山海经
2013/08/25
0
0
Android Camera 模块分析(三)

第三部分 Camera的主要实现分析   3。1 JAVA程序部分   在packages/apps/Camera/src/com/android/camera/ 目录的Camera。java文件中,包含了对Camera的调用   在Camera。java中包含对包...

Jerikc
2012/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash常用内置变量介绍

Bash常用内置变量介绍 Bash中有很多内置变量,这些变量不仅影响Bash的相关行为,也大大的方便了用户的常见操作。**Bash内置变量大体上包括两类,一类是传统Shell所具备的,另一类就是Bash所特...

小陶小陶
31分钟前
0
0
05-《深度拆解Java虚拟机》之JVM是如何执行方法调用的?(下)

一、问题引入 我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以作者就想在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文...

飞鱼说编程
51分钟前
3
0
nginx统一入口 多服务出口

nginx配置多ip和端口统一调用入口log_format中$upstream_addr 标识打印转发的url地址配置upstream和locationhttp {include mime.types;default_type application/octet-stream...

GoldenVein
53分钟前
3
0
阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站无法正常访问的情况...

我是你大哥
55分钟前
2
0
华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!

还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线...

华为终端开放实验室
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部