java内联_JAVA中的内联函数

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

调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到

转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保

存地址继续执行。也就是通常说的压栈和出栈。因此,函数调用要有一定的时间和空间方面的开销。那么对于那些函数体

代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大。

那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了。内联函数就是在程序编译时,编译器将程序中出现

的内联函数的调用表达式用内联函数的函数体来直接进行替换。显然,这样就不会产生转去转回的问题,但是由于在编译

时将函数体中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时

那么大,可见它是以目标代码的增加为代价来换取时间的节省。

在大学里学习写C代码时,我们都学到将一些简短的逻辑定义在宏里。这样做的好处是,在编译器编译的时候会将用

到该宏的地方直接用宏的代码替换。这样就不再需要象调用方法那样的压栈、出栈,传参了。性能上提升了。内联函数的

处理方式与宏类似,但与宏又有所不同,内联函数拥有函数的本身特性(类型、作用域等等)

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

编译器视为内联函数。

那么,在java中的内联函数长什么模样呢?在java中使用final关键字来指示一个函数为内联函数,例如:

Java代码  f9291b0d260ca2e42fa1a5f7a2a3b2bc.png

public final void method1() {

//TODO something

}

这个指示并不是必需的。final关键字只是告诉编译器,在编译的时候考虑性能的提升,可以将final函数视为内联函数。

但最后编译器会怎么处理,编译器会分析将final函数处理为内联和不处理为内联的性能比较了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两端对齐布局与text-align:justify

百分比实现 首先最简单的是使用百分比实现&#xff0c;如下一个展示列表&#xff1a; 1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"UTF-8">5 <title></title>6 <style type"text/cs…

java拆分单元格_Java 拆分Excel单元格数据为多列

一、概述及使用工具在Excel表格里面&#xff0c;可设置将单元格中的文本数据按分隔符拆分为多列&#xff0c;下面通过Java程序来介绍具体实现方法。这里使用Free Spire.XLS for Java(免费版)来实现数据分列&#xff0c;需要导入Spire.Xls.jar文件到Java程序&#xff0c;可参考以…

win10下安装centos7双系统

国庆最后一天了&#xff0c;闲来无事装个双系统&#xff0c;用虚拟机的linux总有些不方便。 window下安装linux双系统有两中方法&#xff1a; 1.U盘安装 &#xff08;我采用的方法&#xff0c;后面详述&#xff09; 2.EasyBCD工具安装 &#xff08;使用EasyBCD完美实现Windows7…

java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

本文将讲解如何做一个类似MyEclipse启动画面的闪屏&#xff0c;为Java Swing应用程序增添魅力。首先看一下效果图吧&#xff0c;原理很简单&#xff0c;就是创建一个Dialog&#xff0c;Dialog有一个进度条和一个Label用来分别显示进度和进度信息&#xff0c;而Dialog的宽度和高…

【JZOJ4817】【NOIP2016提高A组五校联考4】square

题目描述 输入 输出 样例输入 3 4 1 1 0 1 0 1 1 0 0 1 1 0 5 1 1 2 3 2 1 3 2 3 2 3 4 1 1 3 4 1 2 3 4 样例输出 1 1 1 2 2 数据范围 解法 设f[i][j]为以(i,j)为右下角的正方形的最大边长。 则f[i][j]min(f[i−1][j],f[i−1][j−1],f[i][j−1])1(a[i][j]1) 考虑…

java单例模式 uml_Java设计模式系列之单例模式

单例模式的定义一个类有且仅有一个实例&#xff0c;并且自行实例化向整个系统提供。比如&#xff0c;多程序读取一个配置文件时&#xff0c;建议配置文件时&#xff0c;建议配置文件封装成对象。会方便操作其中的数据&#xff0c;又要保证多个程序读到的是同一个配置文件对象&a…

Linux安全基础:grep命令的使用

grep &#xff08;缩写来自Globally search a Regular Expression and Print&#xff09;是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。 grep的工作方式是这样的&#xff0c;它在…

php面试题2018mysql_PHP程序员必会的MySQL面试题

01数据库字段类型MySQL常见的数据类型有哪些&#xff1f;MySQL数据类型分为数值类型、日期时间型和字符串类型。数值类型常见的是TINYINT、INT、DECIMAL&#xff0c;日期类型常见的有DATE、DATETIME&#xff0c;字符串类型常见的有CHAR、VARCHAR、TEXT。详细介绍见文章末尾的图…

【开发软件】推荐一款MAC OS X 下php集成开发环境mamp

这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件&#xff0c;非常的好用&#xff0c;需要的朋友可以拿去&#xff0c;不用谢 ^_^之前苦于mac上搭建本地服务器之艰辛&#xff0c;找寻好久都没找到一款类似windows上集成的本地服务器环境&#xff0c;诸如phpstudy…

java 2分钟_java开发中的那些事(5)--------一点经历,败给2分钟的2个小时

特意记下这个经历&#xff0c;这个让我感慨万千又斗志昂扬的一次经历&#xff0c;这是经验&#xff0c;也是生活。故事的始末是这种&#xff0c;先给大家上几句代码&#xff0c;如今身在家中&#xff0c;仅仅能凭记忆敲打几行&#xff0c;大致意思倒不会错&#xff1a;{field:c…

java cygwin 乱码_windows10乱码怎么解决

如 图组360没有乱码 但字体明显不对字体不正常更明显了第三方浏览器要么乱码 要么根本打不开安装java时也是乱码 要不是我安装过 我根本不知道按钮在哪里eclipse也逃脱不了显示错误的命运(ps:第一行代码 或是说注释)酷狗音乐就更惨了这是cmd命令执行 dir /?时得到的帮助信息 我…

java怎么打增量包_eclipse实现JavaWeb应用增量打包

很多情况下&#xff0c;项目是不允许全量发布的&#xff0c;所以你得把有做修改的文件一个个挑出来&#xff0c;如果有成千上百的文件&#xff0c;你是不是要头大了? 以下方法应该可以让你得到解救!前提是你是用装有svn plugin的eclipse上做开发。第一步&#xff0c;用svn生成…

java 定时器框架_java定时器

java定时器什么是Java定时器&#xff1f;Java 定时器就是在给定的间隔时间执行自己的任务; Java实现定时器有以下几种:通过Timer来实现定时任务Timer 是来自 java.util.Timer指定时间执行任务/*** author spp* date 2020-10-14 09:04**/public class TimerTest {public static …

Flume之核心架构深入解析

我们一起来了解Source、Channel和Sink的全链路过程。 一、Flume架构分析 这个图中核心的组件是&#xff1a; Source&#xff0c;ChannelProcessor&#xff0c;Channel&#xff0c;Sink。他们的关系结构如下&#xff1a; Source {ChannelProcessor {Channel ch1Channel ch2……

java连接cdh集群_有一台电脑需要通过beeline的方式连接到CDHclouderahadoop集群,提示报错。...

有一台电脑需要通过beeline的方式连接到CDHclouderahadoop集群&#xff0c;提示报错。码农的苦恼2020-02-24 10:25:48目前客户端服务器已经开通了3000-60000的端口访问权限&#xff0c;请问还需要开通哪些权限。谢谢&#xff01;17/11/14 09:19:40 WARN conf.HiveConf: DEPRECA…

最长公共子序列及其引申问题

最长公共子序列是经典的动态规划问题&#xff0c;在很多书籍和文章中都有介绍&#xff0c;这里对这一经典算法进行回顾并对两个follow up questions进行总结和分析。 1. 回顾LCS&#xff08;longest common subsequence&#xff09;解法&#xff0c;求LCS长度 典型的双序列动态…

怎么用java实现打字功能_怎么用JAVA编写一个打字游戏

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个帖子是一年前发的&#xff0c;当时对Java也不是很懂&#xff0c;我看大家都对这个感兴趣&#xff0c;我把代码改了一下&#xff0c;发布出来&#xff0c;其实还有很多的地方还没有完善...&#xff0c;这个只能算一个Demo&#…

pythonfor循环列表排序_Python Day4950(for循环语句整理)

班长的图Python for循环可以遍历任何序列的项目&#xff0c;如一个列表或者一个字符串。一、Python 循环遍历列表元素1.for i in list():2.for i in enumerate(list):2.for i in range(len(list)):for i in list():for i in enumerate(list):for i in range(len(list)):二、Pyt…

Java异常处理深入理解_关于java异常处理机制的深入理解.doc

关于java异常处理机制的深入理解.doc 关于JAVA异常处理机制的深入理解1引子TRYCATCHFINALLY恐怕是大家再熟悉不过的语句了&#xff0c;而且感觉用起来也是很简单&#xff0c;逻辑上似乎也是很容易理解。不过&#xff0c;我亲自体验的“教训”告诉我&#xff0c;这个东西可不是想…

java 格式化 布尔型_这么久才知道Java中的format很强大!

Java中允许我们对指定的对象进行某种格式化&#xff0c;从而得到我们想要的格式化样式。Format首先介绍java.text包中的FormatForamt是一个抽象基类&#xff0c;其具体子类必须实现format(Object obj, StringBuffer toAppendTo, FieldPosition pos)和parseObject(String source…