从Java里认识汇编指令重排序

前言

        编译器重排指令主要是为了优化程序的执行效率。编译器会根据程序的语义和指令的特性,对指令进行重新排序,使得程序在执行时能够更快地完成。例如,编译器可能会将循环中的计算指令重新排序,以避免CPU缓存的缺失,从而提高程序的执行速度。编译器和处理器常常会对指令做重排,保证每个指令都在寄存器中可以获取,一般分为一下3种

1. 数据重排(Data Reorganization):编译器和处理器可以重新组织指令中的数据,以使其更符合计算机的存储和寄存器使用规则。例如,编译器可以将数据按照特定的格式进行排列,以便处理器可以更快地访问它们。
2. 指令重排(Instruction Scheduling):编译器和处理器可以对指令进行重新排序,以优化程序的执行效率。例如,编译器可以将循环中的计算指令重新排序,以避免CPU缓存的缺失,从而提高程序的执行速度。
3. 寄存器重排(Register Reorganization):编译器和处理器可以重新组织指令中使用的寄存器,以使每个指令都可以在寄存器中获取。例如,编译器可以将一些指令的输入输出操作放在不同的寄存器中,以便处理器可以更快地访问它们。

这些重排方式都可以提高程序的性能和效率,但同时也需要注意保证程序的正确性。编译器和处理器在进行重排时,需要遵守程序的语义规则,确保程序在重排后的执行结果与原始程序相同。

一、对象创建过程

对象创建过程,指令不只是一条,所以多线程执行会进行重排序,如图所示:

你可能感兴趣的:(Java后端开发,汇编,指令重排)