--- old/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/ObjectSynchronizer.java 2017-08-09 15:48:30.240351630 +0900 +++ new/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/ObjectSynchronizer.java 2017-08-09 15:48:30.138349458 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -108,13 +108,16 @@ public Object next() { Address addr; - if (index > 0) { - addr = blockAddr.addOffsetTo(index*objectMonitorTypeSize); - } else { + if (index == 0) { + // advance to next block blockAddr = block.freeNext(); + if (blockAddr == null) { + throw new NoSuchElementException(); + } + block = new ObjectMonitor(blockAddr); index = blockSize - 1; - addr = blockAddr.addOffsetTo(index*objectMonitorTypeSize); } + addr = blockAddr.addOffsetTo(index*objectMonitorTypeSize); index --; return new ObjectMonitor(addr); }