Are hoisting and reordering the same thing?

前端 未结 3 608
北海茫月
北海茫月 2020-12-09 05:14

I read from Effective Java that In the absence of synchronization the following sequence A below can be converted into sequence B by the virtual machine and this is called <

相关标签:
3条回答
  • 2020-12-09 05:47

    They are slightly different.

    Hoisting means that you have pulled some operation out of a loop because the loop itself does not affect the result of the operation. In your case, you are hoisting the conditional test out of the while loop.

    Re-ordering means changing the sequence of instructions in a way that does not affect the result. Typically this would be adjacent instructions with no data dependencies, e.g. it does not matter which order you perform the following two statements:

    int a = x;
    int b = y;
    
    0 讨论(0)
  • 2020-12-09 05:49

    The term "reordering" as it's used in the Java Memory Model refers to all possible optimizations that may affect correctness of improperly synchronized programs.

    So, reordering in this sense is a generic term that includes optimizations such as hoisting, effects of out-of-order execution, inconsistencies caused by memory hierarchy (i.e. caches), and so on.

    0 讨论(0)
  • 2020-12-09 05:50

    Reordering relates to performance of execution where as reordering doesn't impact performance.

    Hoisting is done to reordering of Memory barrier instructions.

    0 讨论(0)
提交回复
热议问题