< prev index next >

test/jdk/java/lang/management/MemoryMXBean/MemoryManagement.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2016, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2003, 2018, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 80,104 **** if (trace) { MemoryUtil.printMemoryPools(pools); MemoryUtil.printMemoryManagers(managers); } ! // Find the Old generation which supports low memory detection ListIterator iter = pools.listIterator(); while (iter.hasNext()) { MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next(); if (p.getType() == MemoryType.HEAP && p.isUsageThresholdSupported()) { mpool = p; if (trace) { System.out.println("Selected memory pool for low memory " + "detection."); MemoryUtil.printMemoryPool(mpool); } break; } } SensorListener listener = new SensorListener(); NotificationEmitter emitter = (NotificationEmitter) mm; emitter.addNotificationListener(listener, null, null); --- 80,126 ---- if (trace) { MemoryUtil.printMemoryPools(pools); MemoryUtil.printMemoryManagers(managers); } ! // Find a pool which which supports low memory detection ListIterator iter = pools.listIterator(); while (iter.hasNext()) { MemoryPoolMXBean p = (MemoryPoolMXBean) iter.next(); + // Only check heap pools that support a usage threshold. + // This is typically only the old generation space + // since the other spaces are expected to get filled up. if (p.getType() == MemoryType.HEAP && p.isUsageThresholdSupported()) { + // In all collectors except G1, only the old generation supports a + // usage threshold. The G1 legacy mode "G1 Old Gen" also does. In + // G1 default mode, both the old space ("G1 Old Space": it's not + // really a generation in the non-G1 collector sense) and the + // humongous space ("G1 Humongous Space"), support a usage threshold. + // So, the following condition is true for all non-G1 old generations, + // for the G1 legacy old gen, and for the G1 default humongous space. + // It is not true for the G1 default old gen. + // + // We're allocating humongous objects in this test, so the G1 default + // mode "G1 Old Space" occupancy doesn't change, because humongous + // objects are allocated in the "G1 Humongous Space". If we allowed + // the G1 default mode "G1 Old Space", notification would never + // happen because no objects are allocated there. + if (!p.getName().equals("G1 Old Space")) { mpool = p; if (trace) { System.out.println("Selected memory pool for low memory " + "detection."); MemoryUtil.printMemoryPool(mpool); } break; } } + } + if (mpool == null) { + throw new RuntimeException("TEST FAILED: No heap pool found"); + } SensorListener listener = new SensorListener(); NotificationEmitter emitter = (NotificationEmitter) mm; emitter.addNotificationListener(listener, null, null);
< prev index next >