method call java_我们教授在讲Java的时候提到,说calling method会使Java效率降低,请问这是为什么?...

与运行时栈开辟栈空间有关系,方法越多,栈空间越多。来回开辟栈空间,初始化调用指令这两块需要时间。用sdk带的class查看器,检查编译后代码,java无内联概念。写成方法就是方法,那来内连说法。懂java指令集,调用过程,自己检查符号。内联我会的语言中只有C++有此概念。而且是编译器把代码编译完后,申明为内联的方法会编译成指令合并而不是调用方法。不初始化调用入口,不处理出口,不开辟栈空间,所以内联代码可以节约这样的时间。内联是C++编译器实现功能。java8我没见过编译器有内联功能。

java规范中,包含虚拟机规范,虚拟机也是机器,所以有独立指令,见java字节码规范。换句话说要懂字节码规范,可以直接用虚拟机指令编程。这也是cglib这样的动态库执行原理。

虚拟机换会,真实机器码,知道任何一门机器码以及汇编。就非常好理解。任何函数方法调用,有入口,出口,栈,寄存器状态,操作入口,出口,栈,寄存器都有特定指令花费系统给定时间单位(1个单位一般取100ns或60ns)。

所以,方法越多消耗时间越多。代码设计,用哲学考虑,性能要极致,代码可读性会差一些,应用场景如霹雳导弹的通讯模块,性能与准确性就是极致要求。运用系统用几个时间单元换取代码可读性,可维护性是必要的。代码写成一大坨,怎么搞呢?而且代码复用性也丢了,即便不考虑复用性,从软件工程角度代码也别写成一大坨。入口,出口,开辟栈空间9.99成的应用都可以容忍,霹雳导弹这种通信控制特殊,因为导弹飞行速度很快,通信协调这些算法做不好,导弹就不听招呼。

所以,你们老师没告诉你的东西,method多并不一定有问题,而且9.99成情况下不会有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值