In recent years, Java workloads are becoming increasingly prominent on the entire scale of computing devices, ranging from small PDA-like systems to high-end web servers. It becomes thus increasingly important to understand the implications of all the aspects involved when running Java applications when a system is designed. This means that first of all, the interactions between the Java application, its input and the Java Virtual Machine execution the application should be understood. The lowest level on which we can try to comprehend how these components interact is clearly the micro-architectural level. To do this we measure a number of low-level characteristics such as the branch behaviour, the cache behaviour, etc. This is done using the performance counters that can be found on modern microprocessors. Using statistical analysis techniques such as Principal Components Analysis and Cluster Analysis, we seek to gain insights in an understandable way. We conclude that for small input sets, the behaviour is primarily influenced by the virtual machine, while for larger input sets, the Java application itself becomes the primary influence of the low-level behaviour.