Java foreach eficiência

Tenho algo parecido com isto:

Map<String, String> myMap = ...;

for(String key : myMap.keySet()) {
   System.out.println(key);
   System.out.println(myMap.get(key)); 
}

Então émyMap.keySet() ligou uma vez noforeach loop? Eu acho que é, mas quero a sua opiniã

Gostaria de saber se está usando o foreach dessa maneira myMap.keySet()) tem um impacto no desempenho ou é equivalente a isso:

Set<String> keySet = myMap.keySet();
for (String key : keySet) {
   ...
}

questionAnswers(12)

yourAnswerToTheQuestion