Attaining good performance for parallel programs frequently requires substantial expertise and effort, which can be reduced by automated optimizations. In this talk we concentrate on run-time optimizations and techniques to automate them without programmer intervention, using post-mortem analysis of parallel program execution. We classify the characteristics of parallel programs with respect to object placement (mapping), scheduling and communication, then describe techniques to discover these characteristics by post-mortem analysis, present heuristics to choose appropriate optimizations based on these characteristics, and describe techniques to generate concise hints to runtime optimization libraries. Our ideas have been developed in the framework of the “Paradise” post-mortem analysis tool for the parallel object-oriented language Charm++. We also present results for optimizing simple parallel programs running of the Thinking Machine CM-5.