decrese number of iterator() invocations -> less object creations, faster.
Even jvm_serializers show deserialization time difference 209893 -> 197058. My guess - effect mostly from GC.
diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index 74277bd..9c26246 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -371,10 +371,8 @@
          * the implementation is not as in PyYAML. Because
          * this.possibleSimpleKeys is ordered we can simply take the first key
          */
-        Iterator<SimpleKey> iter = this.possibleSimpleKeys.values().iterator();
-        if (iter.hasNext()) {
-            SimpleKey key = iter.next();
-            return key.getTokenNumber();
+        if (!this.possibleSimpleKeys.isEmpty()) {
+            return this.possibleSimpleKeys.values().iterator().next().getTokenNumber();
         }
         return -1;
     }
@@ -391,16 +389,18 @@
      */
     private void stalePossibleSimpleKeys() {
         // use toRemove to avoid java.util.ConcurrentModificationException
-        for (Iterator<Entry<Integer, SimpleKey>> iterator = this.possibleSimpleKeys.entrySet()
-                .iterator(); iterator.hasNext();) {
-            Entry<Integer, SimpleKey> level = iterator.next();
-            SimpleKey key = level.getValue();
-            if ((key.getLine() != reader.getLine()) || (reader.getIndex() - key.getIndex() > 1024)) {
-                if (key.isRequired()) {
-                    throw new ScannerException("while scanning a simple key", key.getMark(),
-                            "could not found expected ':'", reader.getMark());
+        if (!this.possibleSimpleKeys.isEmpty()) {
+            for (Iterator<SimpleKey> iterator = this.possibleSimpleKeys.values().iterator(); iterator
+                    .hasNext();) {
+                SimpleKey key = iterator.next();
+                if ((key.getLine() != reader.getLine())
+                        || (reader.getIndex() - key.getIndex() > 1024)) {
+                    if (key.isRequired()) {
+                        throw new ScannerException("while scanning a simple key", key.getMark(),
+                                "could not found expected ':'", reader.getMark());
+                    }
+                    iterator.remove();
                 }
-                iterator.remove();
             }
         }
     }
@@ -432,8 +432,8 @@
         if (this.allowSimpleKey) {
             removePossibleSimpleKey();
             int tokenNumber = this.tokensTaken + this.tokens.size();
-            SimpleKey key = new SimpleKey(tokenNumber, required, reader.getIndex(), reader
-                    .getLine(), this.reader.getColumn(), this.reader.getMark());
+            SimpleKey key = new SimpleKey(tokenNumber, required, reader.getIndex(),
+                    reader.getLine(), this.reader.getColumn(), this.reader.getMark());
             this.possibleSimpleKeys.put(this.flowLevel, key);
         }
     }
@@ -680,8 +680,8 @@
         if (this.flowLevel == 0) {
             // Are we allowed to start a key (not necessary a simple)?
             if (!this.allowSimpleKey) {
-                throw new ScannerException(null, null, "mapping keys are not allowed here", reader
-                        .getMark());
+                throw new ScannerException(null, null, "mapping keys are not allowed here",
+                        reader.getMark());
             }
             // We may need to add BLOCK-MAPPING-START.
             if (addIndent(this.reader.getColumn())) {
@@ -1161,8 +1161,8 @@
         }
         if (length == 0) {
             throw new ScannerException("while scanning an " + name, startMark,
-                    "expected alphabetic or numeric character, but found but found " + ch, reader
-                            .getMark());
+                    "expected alphabetic or numeric character, but found but found " + ch,
+                    reader.getMark());
         }
         String value = reader.prefixForward(length);
         ch = reader.peek();
@@ -1329,8 +1329,8 @@
                 increment = Integer.parseInt(String.valueOf(ch));
                 if (increment == 0) {
                     throw new ScannerException("while scanning a block scalar", startMark,
-                            "expected indentation indicator in the range 1-9, but found 0", reader
-                                    .getMark());
+                            "expected indentation indicator in the range 1-9, but found 0",
+                            reader.getMark());
                 }
                 reader.forward();
             }
@@ -1338,8 +1338,8 @@
             increment = Integer.parseInt(String.valueOf(ch));
             if (increment == 0) {
                 throw new ScannerException("while scanning a block scalar", startMark,
-                        "expected indentation indicator in the range 1-9, but found 0", reader
-                                .getMark());
+                        "expected indentation indicator in the range 1-9, but found 0",
+                        reader.getMark());
             }
             reader.forward();
             ch = reader.peek();
@@ -1355,8 +1355,8 @@
         ch = reader.peek();
         if (Constant.NULL_BL_LINEBR.hasNo(ch)) {
             throw new ScannerException("while scanning a block scalar", startMark,
-                    "expected chomping or indentation indicators, but found " + ch, reader
-                            .getMark());
+                    "expected chomping or indentation indicators, but found " + ch,
+                    reader.getMark());
         }
         return new Chomping(chomping, increment);
     }
@@ -1501,8 +1501,8 @@
                     if (NOT_HEXA.matcher(hex).find()) {
                         throw new ScannerException("while scanning a double-quoted scalar",
                                 startMark, "expected escape sequence of " + length
-                                        + " hexadecimal numbers, but found: " + hex, reader
-                                        .getMark());
+                                        + " hexadecimal numbers, but found: " + hex,
+                                reader.getMark());
                     }
                     char unicode = (char) Integer.parseInt(hex, 16);
                     chunks.append(unicode);
@@ -1511,8 +1511,8 @@
                     chunks.append(scanFlowScalarBreaks(startMark));
                 } else {
                     throw new ScannerException("while scanning a double-quoted scalar", startMark,
-                            "found unknown escape character " + ch + "(" + ((int) ch) + ")", reader
-                                    .getMark());
+                            "found unknown escape character " + ch + "(" + ((int) ch) + ")",
+                            reader.getMark());
                 }
             } else {
                 return chunks.toString();
@@ -1751,8 +1751,8 @@
                 throw new ScannerException("while scanning a " + name, startMark,
                         "expected URI escape sequence of 2 hexadecimal numbers, but found "
                                 + reader.peek() + "(" + ((int) reader.peek()) + ") and "
-                                + reader.peek(1) + "(" + ((int) reader.peek(1)) + ")", reader
-                                .getMark());
+                                + reader.peek(1) + "(" + ((int) reader.peek(1)) + ")",
+                        reader.getMark());
             }
             reader.forward(2);
         }