A data center has become a crucial element to the modern information technology society. Operating a data center is costly so the efficiency is vital. The primary objective of this research is to maximize the efficiency, specifically the "computation efficiency", of a data center. There are two factors that have major impact to the computation efficiency of data center: Task Scheduling efficiency and communication efficiency. We develop and evaluate several techniques to address these two factors. These works are organized into three contributions. Firstly, we propose Container Rebalancing, a novel task scheduling mechanism which increased task scheduling efficiency for Linux Container (LXC) based data center. Container Rebalancing takes advantage of LXC's rapid container migration to increase the optimal overcommit ratio of a Linux container cluster and in turn, increases overall resources utilization of the data center. Secondly, we propose the application-aware routing, a software-defined network (SDN) assisted routing mechanism. The application-aware routing route each network flow individually according to the characteristics of the corresponding application, resulting in a better performance to each flow and an increased communication efficiency to the overall network. A network implementing application-aware routing is called an application-aware network. Thirdly, we propose a self-optimizing application-aware network, an improved version of an application-aware network. The self-optimizing application-aware network use an automatic network traffic classification model instead of manual user configuration to identify and categorize network flow, making it easier to deploy. The automatic network traffic classification model is a major component of the self-optimizing application-aware network. The model is learned using a stacked denoising autoencoder, a deep-learning-based classification technique.