Path: blob/master/test/hotspot/jtreg/serviceability/sa/LingeredAppWithNativeMethod.java
41149 views
1/*2* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.3* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.4*5* This code is free software; you can redistribute it and/or modify it6* under the terms of the GNU General Public License version 2 only, as7* published by the Free Software Foundation.8*9* This code is distributed in the hope that it will be useful, but WITHOUT10* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or11* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License12* version 2 for more details (a copy is included in the LICENSE file that13* accompanied this code).14*15* You should have received a copy of the GNU General Public License version16* 2 along with this work; if not, write to the Free Software Foundation,17* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.18*19* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA20* or visit www.oracle.com if you need additional information or have any21* questions.22*/2324import java.util.Random;25import jdk.test.lib.apps.LingeredApp;26import jdk.test.lib.Utils;2728public class LingeredAppWithNativeMethod extends LingeredApp {2930public static final String THREAD_NAME = "NoFramePointerJNIFib";31private static final int UPPER_BOUND = 55;32private static final int LOWER_BOUND = 40;33private static final Random RNG = Utils.getRandomInstance();3435static {36// JNI library compiled with no frame pointer info37System.loadLibrary("NoFramePointer");38}3940public void callNative() {41// Call JNI code which does something compute42// intensive: fibonacci43// That is to ensure that the native bits run when44// jstack --mixed info is to be gathered.45// Results of fibonacci calculation from JNI are46// reported via callback(). That's where the process47// of calculating fibonacci restarts.48int num = (int) (RNG.nextDouble() * UPPER_BOUND);49while (num < LOWER_BOUND) {50num = (int) (RNG.nextDouble() * UPPER_BOUND);51}52System.out.print("fib(" + num + ") = ");53callJNI(this, num);54}5556// Called from JNI library libNoFramePointer57private void callback(long val) {58System.out.println(val);59// Call native again so as to increase chances of60// being currently in JNI code when jstack --mixed61// runs.62callNative();63}6465public static native void callJNI(Object target, int num);6667public static void main(String[] args) {68LingeredAppWithNativeMethod app = new LingeredAppWithNativeMethod();69Thread fibonacci = new Thread(() -> {70app.callNative();71});72fibonacci.setName(THREAD_NAME);73fibonacci.start();74LingeredApp.main(args);75}76}777879