This paper presents a system level dynamic voltage and frequency scaling (DVFS) technique targeted toward non realtime applications running on a portable embedded system with multiple frequency-adjustable components. The key idea is to balance the frequency of processor core and memory. Some applications may be I/O bound, some may be CPU bound, and the others may be Memory bound. The proposed DVFS technique relies on pre-collected statistical information of different applications to calculate the expected workload for each coming time slice, and then, it adjusts the frequency of processor core, memory, and system bus to meet the timing constraints(with acceptable penalty) and achieves the maximum energy saving. The proposed technique has been tested on the PXA27x (XScale based)  embedded platform and the result was exciting, the processor energy saving can achieve up to 70% in memory bound applications, and the timing performance degradation was less than 5%. In CPU bound applications, the energy saving is relatively small, about 20~40%.