导航

Jikes RVM中 Java 循环的识别

Posted on 2004-06-30 11:22  姜伟华  阅读(1482)  评论(3编辑  收藏  举报
对于Jikes RVM 2.3.2来说,其基本的循环识别步骤在OPT_LSTGraph.java中。它通过构造LSTGraph(Loop Structure Tree Graph)来识别Java bytecode中的循环。

首先它通过回边(back edge)查找来识别出循环,并确定循环中包括的基本块,然后构造一个OPT_LSTNode来包含这个循环的信息(其header域指向循环的第一个基本块,其loop域包含了循环包含的所有基本块列表)。然后循环之间的相互包含关系是通过OPT_LSTNode的inNodes和outNodes来指向的。即如果循环A包含循环B,那么B在A的outNodes中,A在B的inNodes中。

但是,这个循环的识别功能是比较弱的。它识别的是广义上的循环(for、while等等)。对于for循环的识别实际上还要用到OPT_LoopUnrolling.java中的unrollLeaf方法中的一些功能。