Dynamic or just-in-time (JIT) compilation can generate optimized native code during each program run, and is a popular technique used by process-level virtual machines (VM) to simultaneously achieve binary code portability and high execution performance. JIT compilers typically collect profile information at run-time to guide selective compilation and profile-guided optimizations (PGO). Ahead-of-time (AOT) compilation is an alternative model that can also achieve portability by converting the distributed binary to native code when the software is first installed. The AOT compilation model removes the overhead of online profile collection and dynamic compilation, and may reduce VM complexity. However, AOT compilation cannot customize the generated native code to different program inputs/behaviors. The goal of this work is to investigate and quantify the implications of the AOT compilation model on the quality of the generated native code for current VMs. To achieve our goal, this study develops and conducts many new innovative experiments using a variety of novel frameworks. First, we quantify the quality of native code generated by the two compilation models for a state-of-the-art (HotSpot) Java VM. Second, we determine how the amount of profile data collected affects the quality of generated code. Third, we develop a mechanism to determine the similarity or representative-ness of different profile data for a given program run for guiding PGOs.Fourth, we investigate how the accuracy of profile data affects its ability to effectively guide PGOs. Finally, we categorize the profile data types in our VM and explore the contribution of each such category to performance.iii