Garbage collection is a good example. Automatic garbage collection is always a tradeoff between efficiency and use of resources, i.e. cpu time and memory usage. It can only do educated guess when it might be the best time to clean up memory, so it might do it even when there are better things to do for your cpu or it might not clean up at all of you still keep a reference to am object somewhere without you noticing.
What high level languages really brought us is efficiency in development time (you can develop complex code much faster than in the past), but not really in resource usage.