 Because portable runtimes try to present a common API for applications for a wide variety of hardware, applications are less able to take advantage of OS specific features.Portable application environments also have higher memory and CPU overheads than optimized native applications, but these overheads are much smaller compared with full machine virtualization.Portable Byte Code environments such as Java have become very popular on the server where a wide variety of hardware exist and the set of OS-specific APIs required is standard across most Unix and Windows flavors.