1. A method of varying branch prediction strategy within a trace of program code having branch instructions comprising: identifying branch instructions within the trace that have a branch direction that is taken more often than not; partitioning the identified branch instructions into identified branch instructions that have strong branching behavior and identified branch instructions that have weak branching behavior; associating a basic block of instructions with each identified branch instruction that has weak branching behavior, wherein each identified branch instruction that has weak branching behavior is a member of the basic block of instructions to which it is associated; translating basic blocks of instructions that include branch instructions having weak branching behavior into a dynamic code cache; associating a basic block of instructions with each identified branch instruction that has strong branching behavior, wherein each identified branch instruction that has strong branching behavior is a member of the basic block of instructions to which it is associated; translating basic blocks of instructions that include branch instructions having strong branching behavior into a static code cache.