Embedded software has to meet multiple requirements: power efficiency, soft real-time performance, ... but also flexibility and adaptability to ever changing functional requirements. Heterogeneous MPSoC systems offer an interesting platform to meet these requirements. We propose to run a Java Virtual Machine (JVM) on the embedded, general-purpose processor to add the necessary flexibility and adaptability to the system. The techniques proposed in this paper allow the JVM to dynamically partition the application and map the partitions at run-time to the suitable system components and also to reconfigure the system when needed. In doing this, the JVM continuously monitors the communication cost, often a limiting factor in MPSoC design. In previous work we have shown that the JVM can dynamically switch between executing threads on the general-purpose processor or on specific hardware blocks and that it can reduce the communication overhead in the system by up to 86%. In this paper we extend our approach to a reconfigurable platform in which the JVM also decides on the scheduling and mapping of functionality