15464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier/*
25464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * Copyright (C) 2016 The Android Open Source Project
35464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier *
45464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * Licensed under the Apache License, Version 2.0 (the "License");
55464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * you may not use this file except in compliance with the License.
65464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * You may obtain a copy of the License at
75464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier *
85464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier *      http://www.apache.org/licenses/LICENSE-2.0
95464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier *
105464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * Unless required by applicable law or agreed to in writing, software
115464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * distributed under the License is distributed on an "AS IS" BASIS,
125464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * See the License for the specific language governing permissions and
145464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier * limitations under the License.
155464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier */
165464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier
175464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartierpublic class Main {
185464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier  public static void main(String[] args) {
195464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    Class klass = Other.class;
205464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    Object[] data = new Object[100000];
215464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    try {
225464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        System.out.println("Filling heap");
235464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        int size = 256 * 1024 * 1024;
245464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        int index = 0;
255464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        while (true) {
265464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier            try {
275464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                data[index] = new byte[size];
285464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                index++;
295464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier            } catch (OutOfMemoryError e) {
305464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                size /= 2;
315464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                if (size == 0) {
325464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                    break;
335464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier                }
345464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier            }
355464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        }
365464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        // Initialize now that the heap is full.
375464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        Other.print();
385464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    } catch (OutOfMemoryError e) {
395464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    } catch (Exception e) {
405464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier        System.err.println(e);
415464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier    }
425464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier  }
435464c73567ccccd0cda6449d2a2775814d5fe88dMathieu Chartier}
44