当我从一些小的 java函数中读取jvm字节码时,我发现当一个新的局部变量在操作数堆栈上计算时,假设它将存储在局部变量表中,但通常它会立即加载到操作数堆栈中(仅字面上的字节码).我操作不好,是不必要的操作?

解决方法

Java编译器倾向于以非常简单和直接的方式编译事物,从而将优化留给JIT.

例如,如果你写x * = 3; x * = 4;,你可能会得到字节码

iload_1
iconst_3
imul
istore_1
iload_1
iconst_4
imul
istore_1

理论上,编译器可以确定存储/加载对是冗余的并将其删除.但是有几个理由不这样做 – 1)这增加了很多复杂性而没有任何好处,因为JIT无论如何都会优化一切2)它使调试变得更难,因为你不再能够访问所有局部变量的值3)如果在此表达式的中间以某种方式抛出异常,则局部变量将具有不正确的值.

为什么java字节码“存储”通常后跟“加载”?的更多相关文章

  1. ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器

    我的理解是Xamarin的Ahead-of-Time编译器直接将Xamarin.iOS应用程序编译为本机ARM汇编代码.然而,我没有得到的是为什么它需要被称为“Ahead-of-Time”而不仅仅是一个普通的编译器.Xamarin的AOT编译器和传统编译器之间有什么区别,还是仅仅是一个营销术语?没有.Xamarin在该段中传达的信息是,他们的代码比简单的基于字节码的语言执行得更快.对于iOS和Android,他们都能够在热代码路径上执行本机代码以提高性能.AOT和JIT这两个术语是关于他们如何做到这一点的

  2. Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值

    类型属性用于定义特定类型所有实例共享的数据,比如所有实例都能用的一个常量,或者所有实例都能访问的一个变量.对于值类型可以定义存储型和计算型类型属性,对于类则只能定义计算型类型属性,值类型的存储型类型属性可以是变量或常量,计算型类型属性跟实例的计算属性一样定义成变量属性.PS:跟实例的存储属性不同,必须给存储型类型属性指定默认值,因为类型本身无法在初始化过程中使用构造器给类型属性赋值。

  3. [翻译]Swift编程语言——函数

    Swift的标准化函数语法足够用来表述无论是C风格的无参函数,还是复杂的OC风格的具有本地和外部参数的方法。每个Swift的函数都有类型,类型包括了函数的参数类型和返回值类型。为了让这个函数看起来更简洁,可以将讯息创建和返回语句组合在一行实现:函数的参数和返回值Swift的函数参数以及返回值是非常灵活的。写那个名字一次,在它的前面加上井号就可以,这个告诉Swift这个参数的局部名称和外部名称相同。

  4. Swift学习:2.6 函数

    Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的C风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。在Swift中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。下面这个函数就是一个无参函数,当被调用时,它返回固定的String消息:尽管这个函数没有参数,但是定义中在函数名后还是需要一对圆括号。第二个函数printWithoutCounting调用了第一个函数,但是忽略了它的返回值。

  5. 使用swift编译器裸机?

    我真的很想使用swift进行嵌入式编程,因为我觉得它更适合用于c,我正在使用的处理器是ARMCortex-M4F(http://www.ti.com/tool/ek-tm4c123gxl).看一下swift编译器page,它说你可以从swift源生成LLVMIR然后我希望与LLVM交叉编译.这可能吗?绝对可以使用Swift生成机器代码.实际上,默认情况下,当您在Xcode或swiftc命令行编译器

  6. 什么是我可以使用Kotlin的最早的Android API级别?

    我认为这个问题很清楚但是我能在Kotlin上定位的最早API级别是什么?解决方法实际上,任何API级别.这是因为Kotlin被编译为JVM6平台的字节码,所有AndroidAPI级别都支持该字节码.因此,除非您在Kotlin代码中使用任何较新的AndroidAPI,否则它不需要任何特定的API级别.

  7. Kotlin与Android上的ART 100%兼容吗?

    ART是Android上的“新”Dalvik运行时版,自Android5.0起就取代了它.我非常热衷于Kotlin&在JVMv8上运行的JavaFX.我不确定Kotlin编译器生成或将在其达到v1.0发布状态时生成的字节码版本.所以问题是:ART现在能够运行“Kotlin代码”并且能够在未来运行Kotlin代码,例如什么时候Kotlin编译器要发出Java8字节码?解决方法与Android的兼容性是我们的首要任务,因此请确保Kotlin在发布时支持ART.目前Kotlin生成字节码版本1.6,因此它是兼容

  8. Android本地存储方法浅析介绍

    这篇文章主要介绍了Android本地存储案例,方法简单可以实现存储并达到节省内存的效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  9. Java中token的存储和获取实例代码

    关于java获取微信Token验证的问题相信很多人都遇见过,尤其是对刚接触微信开发的人来说确实有点棘手,下面这篇文章主要给大家介绍了关于Java中token存储和获取的相关资料,需要的朋友可以参考下

  10. 用PHP调用Oracle存储过程

    PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。但是使用存储过程至少有两个最明显的优点:速度和效率。使用存储过程的速度显然更快。但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程。偶也是使用PHP调用存储过程不久,做了下面这个列子。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部