You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.0 KiB
137 lines
4.0 KiB
/*
|
|
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
package java.lang;
|
|
|
|
/**
|
|
* The {@code Compiler} class is provided to support Java-to-native-code
|
|
* compilers and related services. By design, the {@code Compiler} class does
|
|
* nothing; it serves as a placeholder for a JIT compiler implementation.
|
|
*
|
|
* <p> When the Java Virtual Machine first starts, it determines if the system
|
|
* property {@code java.compiler} exists. (System properties are accessible
|
|
* through {@link System#getProperty(String)} and {@link
|
|
* System#getProperty(String, String)}. If so, it is assumed to be the name of
|
|
* a library (with a platform-dependent exact location and type); {@link
|
|
* System#loadLibrary} is called to load that library. If this loading
|
|
* succeeds, the function named {@code java_lang_Compiler_start()} in that
|
|
* library is called.
|
|
*
|
|
* <p> If no compiler is available, these methods do nothing.
|
|
*
|
|
* @author Frank Yellin
|
|
* @since JDK1.0
|
|
*/
|
|
public final class Compiler {
|
|
private Compiler() {} // don't make instances
|
|
|
|
private static native void initialize();
|
|
|
|
private static native void registerNatives();
|
|
|
|
static {
|
|
registerNatives();
|
|
java.security.AccessController.doPrivileged(
|
|
new java.security.PrivilegedAction<Void>() {
|
|
public Void run() {
|
|
boolean loaded = false;
|
|
String jit = System.getProperty("java.compiler");
|
|
if ((jit != null) && (!jit.equals("NONE")) &&
|
|
(!jit.equals("")))
|
|
{
|
|
try {
|
|
System.loadLibrary(jit);
|
|
initialize();
|
|
loaded = true;
|
|
} catch (UnsatisfiedLinkError e) {
|
|
System.err.println("Warning: JIT compiler \"" +
|
|
jit + "\" not found. Will use interpreter.");
|
|
}
|
|
}
|
|
String info = System.getProperty("java.vm.info");
|
|
if (loaded) {
|
|
System.setProperty("java.vm.info", info + ", " + jit);
|
|
} else {
|
|
System.setProperty("java.vm.info", info + ", nojit");
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Compiles the specified class.
|
|
*
|
|
* @param clazz
|
|
* A class
|
|
*
|
|
* @return {@code true} if the compilation succeeded; {@code false} if the
|
|
* compilation failed or no compiler is available
|
|
*
|
|
* @throws NullPointerException
|
|
* If {@code clazz} is {@code null}
|
|
*/
|
|
public static native boolean compileClass(Class<?> clazz);
|
|
|
|
/**
|
|
* Compiles all classes whose name matches the specified string.
|
|
*
|
|
* @param string
|
|
* The name of the classes to compile
|
|
*
|
|
* @return {@code true} if the compilation succeeded; {@code false} if the
|
|
* compilation failed or no compiler is available
|
|
*
|
|
* @throws NullPointerException
|
|
* If {@code string} is {@code null}
|
|
*/
|
|
public static native boolean compileClasses(String string);
|
|
|
|
/**
|
|
* Examines the argument type and its fields and perform some documented
|
|
* operation. No specific operations are required.
|
|
*
|
|
* @param any
|
|
* An argument
|
|
*
|
|
* @return A compiler-specific value, or {@code null} if no compiler is
|
|
* available
|
|
*
|
|
* @throws NullPointerException
|
|
* If {@code any} is {@code null}
|
|
*/
|
|
public static native Object command(Object any);
|
|
|
|
/**
|
|
* Cause the Compiler to resume operation.
|
|
*/
|
|
public static native void enable();
|
|
|
|
/**
|
|
* Cause the Compiler to cease operation.
|
|
*/
|
|
public static native void disable();
|
|
}
|