Main.java revision 4514d3c0e69a49f5dbe19138330a2bb2aee36d63
17c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom/* 27c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * Copyright (C) 2011 The Android Open Source Project 37c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * 47c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License"); 57c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * you may not use this file except in compliance with the License. 67c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * You may obtain a copy of the License at 77c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * 87c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * http://www.apache.org/licenses/LICENSE-2.0 97c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * 107c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * Unless required by applicable law or agreed to in writing, software 117c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS, 127c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * See the License for the specific language governing permissions and 147c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom * limitations under the License. 157c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom */ 167c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 177c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.ArrayList; 187c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.Arrays; 197c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.Collections; 207c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.HashMap; 217c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.List; 227c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromimport java.util.Map; 237c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 247c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom// Run on host with: 257c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom// javac ThreadTest.java && java ThreadStress && rm *.class 267c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstromclass ThreadStress implements Runnable { 277c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 284514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom public static final boolean DEBUG = false; 297c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 307c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom enum Operation { 317c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom OOM(1), 327c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom ALLOC(99), 337c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom EXIT(50), 347c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom WAIT(50); 357c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 367c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private final int frequency; 377c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Operation(int frequency) { 387c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom this.frequency = frequency; 397c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 407c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 417c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 427c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom public static void main(String[] args) throws Exception { 437c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 447c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final int numberOfThreads = 5; 457c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final int totalOperations = 1000; 467c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final int operationsPerThread = totalOperations/numberOfThreads; 477c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 487c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Lock used to notify threads performin Operation.WAIT 497c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final Object lock = new Object(); 507c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 517c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Each thread is going to do operationsPerThread 527c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // operations. The distribution of operations is determined by 537c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // the Operation.frequency values. We fill out an Operation[] 547c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // for each thread with the operations it is to perform. The 557c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Operation[] is shuffled so that there is more random 567c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // interactions between the threads. 577c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 587c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // The simple-minded filling in of Operation[] based on 597c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Operation.frequency below won't have even have close to a 607c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // reasonable distribution if the count of Operation 617c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // frequencies is greater than the total number of 627c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // operations. So here we do a quick sanity check in case 637c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // people tweak the constants above. 647c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom int operationCount = 0; 657c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (Operation op : Operation.values()) { 667c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom operationCount += op.frequency; 677c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 687c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (operationCount > operationsPerThread) { 697c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom throw new AssertionError(operationCount + " > " + operationsPerThread); 707c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 717c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 727c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Fill in the Operation[] array for each thread by laying 737c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // down references to operation according to their desired 747c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // frequency. 757c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final ThreadStress[] threadStresses = new ThreadStress[numberOfThreads]; 767c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int t = 0; t < threadStresses.length; t++) { 777c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Operation[] operations = new Operation[operationsPerThread]; 787c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom int o = 0; 797c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom LOOP: 807c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom while (true) { 817c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (Operation op : Operation.values()) { 827c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int f = 0; f < op.frequency; f++) { 837c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (o == operations.length) { 847c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom break LOOP; 857c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 867c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom operations[o] = op; 877c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom o++; 887c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 897c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 907c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 917c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Randomize the oepration order 927c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Collections.shuffle(Arrays.asList(operations)); 937c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom threadStresses[t] = new ThreadStress(lock, t, operations); 947c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 957c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 967c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Enable to dump operation counds per thread to make sure its 977c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // sane compared to Operation.frequency 987c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (DEBUG) { 997c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int t = 0; t < threadStresses.length; t++) { 1007c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Operation[] operations = new Operation[operationsPerThread]; 1017c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Map<Operation, Integer> distribution = new HashMap<Operation, Integer>(); 1027c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (Operation operation : operations) { 1037c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Integer ops = distribution.get(operation); 1047c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (ops == null) { 1057c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom ops = 1; 1067c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } else { 1077c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom ops++; 1087c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1097c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom distribution.put(operation, ops); 1107c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1117c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Distribution for " + t); 1127c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (Operation op : Operation.values()) { 1137c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println(op + " = " + distribution.get(op)); 1147c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1157c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1167c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1177c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1187c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // Create the runners for each thread. The runner Thread 1197c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // ensures that thread that exit due to Operation.EXIT will be 1207c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // restarted until they reach their desired 1217c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // operationsPerThread. 1227c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Thread[] runners = new Thread[numberOfThreads]; 1237c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int r = 0; r < runners.length; r++) { 1247c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final ThreadStress ts = threadStresses[r]; 1257c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom runners[r] = new Thread() { 1267c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom final ThreadStress threadStress = ts; 1277c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom public void run() { 1287c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom int id = threadStress.id; 1297c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Starting runner for " + id); 1307c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom while (threadStress.nextOperation < operationsPerThread) { 1317c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Thread thread = new Thread(ts); 1327c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom thread.start(); 1337c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom try { 1347c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom thread.join(); 1357c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } catch (InterruptedException e) { 1367c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1377c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Thread exited for " + id + " with " 1387c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom + (operationsPerThread - threadStress.nextOperation) 1397c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom + " operations remaining."); 1407c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1417c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Finishing runner for " + id); 1427c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1437c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom }; 1447c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1457c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1467c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // The notifier thread is a daemon just loops forever to wake 1477c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom // up threads in Operation.WAIT 1487c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Thread notifier = new Thread() { 1497c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom public void run() { 1507c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom while (true) { 1517c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom synchronized (lock) { 1527c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom lock.notifyAll(); 1537c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1547c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1557c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1567c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom }; 1577c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom notifier.setDaemon(true); 1587c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom notifier.start(); 1597c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1607c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int r = 0; r < runners.length; r++) { 1617c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom runners[r].start(); 1627c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1637c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom for (int r = 0; r < runners.length; r++) { 1647c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom runners[r].join(); 1657c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1667c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1677c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1687c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private final Operation[] operations; 1697c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private final Object lock; 1707c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private final int id; 1717c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1727c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private int nextOperation; 1737c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1747c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom private ThreadStress(Object lock, int id, Operation[] operations) { 1757c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom this.lock = lock; 1767c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom this.id = id; 1777c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom this.operations = operations; 1787c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1797c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom 1807c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom public void run() { 1817c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom try { 1827c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (DEBUG) { 1837c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Starting ThreadStress " + id); 1847c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1857c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom while (nextOperation < operations.length) { 1867c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom Operation operation = operations[nextOperation]; 1877c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (DEBUG) { 1887c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("ThreadStress " + id 1897c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom + " operation " + nextOperation 1907c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom + " is " + operation); 1917c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1927c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom nextOperation++; 1937c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom switch (operation) { 1947c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom case EXIT: { 1957c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom return; 1967c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 1977c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom case WAIT: { 1987c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom synchronized (lock) { 1997c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom try { 2007c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom lock.wait(); 2017c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } catch (InterruptedException e) { 2027c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2037c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2047c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom break; 2057c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2067c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom case OOM: { 2077c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom try { 2087c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom List<byte[]> l = new ArrayList<byte[]>(); 2097c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom while (true) { 2107c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom l.add(new byte[1024]); 2117c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2127c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } catch (OutOfMemoryError e) { 2137c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2147c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom break; 2157c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2167c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom case ALLOC: { 2174514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom try { 2184514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom List<byte[]> l = new ArrayList<byte[]>(); 2194514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom for (int i = 0; i < 1024; i++) { 2204514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom l.add(new byte[1024]); 2214514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom } 2224514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom } catch (OutOfMemoryError e) { 2237c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2247c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom break; 2257c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2267c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom default: { 2277c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom throw new AssertionError(operation.toString()); 2287c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2297c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2307c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2314514d3c0e69a49f5dbe19138330a2bb2aee36d63Brian Carlstrom } finally { 2327c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom if (DEBUG) { 2337c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom System.out.println("Finishing ThreadStress for " + id); 2347c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2357c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2367c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom } 2377c6deaa3382f1f4fb0f591af206f03045c6e9004Brian Carlstrom} 238