📄 runtime.java
字号:
* @throws SecurityException if permission is denied * @see #exit(int) * @see #gc() * @since 1.1 * @deprecated never rely on finalizers to do a clean, thread-safe, * mop-up from your code */ public static void runFinalizersOnExit(boolean finalizeOnExit) { SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkExit(0); VMRuntime.runFinalizersOnExit(finalizeOnExit); } /** * Create a new subprocess with the specified command line. Calls * <code>exec(cmdline, null, null)</code>. A security check is performed, * <code>checkExec</code>. * * @param cmdline the command to call * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmdline is null * @throws IndexOutOfBoundsException if cmdline is "" */ public Process exec(String cmdline) throws IOException { return exec(cmdline, null, null); } /** * Create a new subprocess with the specified command line and environment. * If the environment is null, the process inherits the environment of * this process. Calls <code>exec(cmdline, env, null)</code>. A security * check is performed, <code>checkExec</code>. * * @param cmdline the command to call * @param env the environment to use, in the format name=value * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmdline is null, or env has null entries * @throws IndexOutOfBoundsException if cmdline is "" */ public Process exec(String cmdline, String[] env) throws IOException { return exec(cmdline, env, null); } /** * Create a new subprocess with the specified command line, environment, and * working directory. If the environment is null, the process inherits the * environment of this process. If the directory is null, the process uses * the current working directory. This splits cmdline into an array, using * the default StringTokenizer, then calls * <code>exec(cmdArray, env, dir)</code>. A security check is performed, * <code>checkExec</code>. * * @param cmdline the command to call * @param env the environment to use, in the format name=value * @param dir the working directory to use * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmdline is null, or env has null entries * @throws IndexOutOfBoundsException if cmdline is "" * @since 1.3 */ public Process exec(String cmdline, String[] env, File dir) throws IOException { StringTokenizer t = new StringTokenizer(cmdline); String[] cmd = new String[t.countTokens()]; for (int i = 0; i < cmd.length; i++) cmd[i] = t.nextToken(); return exec(cmd, env, dir); } /** * Create a new subprocess with the specified command line, already * tokenized. Calls <code>exec(cmd, null, null)</code>. A security check * is performed, <code>checkExec</code>. * * @param cmd the command to call * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmd is null, or has null entries * @throws IndexOutOfBoundsException if cmd is length 0 */ public Process exec(String[] cmd) throws IOException { return exec(cmd, null, null); } /** * Create a new subprocess with the specified command line, already * tokenized, and specified environment. If the environment is null, the * process inherits the environment of this process. Calls * <code>exec(cmd, env, null)</code>. A security check is performed, * <code>checkExec</code>. * * @param cmd the command to call * @param env the environment to use, in the format name=value * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmd is null, or cmd or env has null * entries * @throws IndexOutOfBoundsException if cmd is length 0 */ public Process exec(String[] cmd, String[] env) throws IOException { return exec(cmd, env, null); } /** * Create a new subprocess with the specified command line, already * tokenized, and the specified environment and working directory. If the * environment is null, the process inherits the environment of this * process. If the directory is null, the process uses the current working * directory. A security check is performed, <code>checkExec</code>. * * @param cmd the command to call * @param env the environment to use, in the format name=value * @param dir the working directory to use * @return the Process object * @throws SecurityException if permission is denied * @throws IOException if an I/O error occurs * @throws NullPointerException if cmd is null, or cmd or env has null * entries * @throws IndexOutOfBoundsException if cmd is length 0 * @since 1.3 */ public Process exec(String[] cmd, String[] env, File dir) throws IOException { SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkExec(cmd[0]); return VMRuntime.exec(cmd, env, dir); } /** * Returns the number of available processors currently available to the * virtual machine. This number may change over time; so a multi-processor * program want to poll this to determine maximal resource usage. * * @return the number of processors available, at least 1 */ public int availableProcessors() { return VMRuntime.availableProcessors(); } /** * Find out how much memory is still free for allocating Objects on the heap. * * @return the number of bytes of free memory for more Objects */ public long freeMemory() { return VMRuntime.freeMemory(); } /** * Find out how much memory total is available on the heap for allocating * Objects. * * @return the total number of bytes of memory for Objects */ public long totalMemory() { return VMRuntime.totalMemory(); } /** * Returns the maximum amount of memory the virtual machine can attempt to * use. This may be <code>Long.MAX_VALUE</code> if there is no inherent * limit (or if you really do have a 8 exabyte memory!). * * @return the maximum number of bytes the virtual machine will attempt * to allocate */ public long maxMemory() { return VMRuntime.maxMemory(); } /** * Run the garbage collector. This method is more of a suggestion than * anything. All this method guarantees is that the garbage collector will * have "done its best" by the time it returns. Notice that garbage * collection takes place even without calling this method. */ public void gc() { VMRuntime.gc(); } /** * Run finalization on all Objects that are waiting to be finalized. Again, * a suggestion, though a stronger one than {@link #gc()}. This calls the * <code>finalize</code> method of all objects waiting to be collected. * * @see #finalize() */ public void runFinalization() { VMRuntime.runFinalization(); } /** * Tell the VM to trace every bytecode instruction that executes (print out * a trace of it). No guarantees are made as to where it will be printed, * and the VM is allowed to ignore this request. * * @param on whether to turn instruction tracing on */ public void traceInstructions(boolean on) { VMRuntime.traceInstructions(on); } /** * Tell the VM to trace every method call that executes (print out a trace * of it). No guarantees are made as to where it will be printed, and the * VM is allowed to ignore this request. * * @param on whether to turn method tracing on */ public void traceMethodCalls(boolean on) { VMRuntime.traceMethodCalls(on); } /** * Load a native library using the system-dependent filename. This is similar * to loadLibrary, except the only name mangling done is inserting "_g" * before the final ".so" if the VM was invoked by the name "java_g". There * may be a security check, of <code>checkLink</code>. * * <p> * The library is loaded using the class loader associated with the * class associated with the invoking method. * * @param filename the file to load * @throws SecurityException if permission is denied * @throws UnsatisfiedLinkError if the library is not found */ public void load(String filename) { load(filename, VMStackWalker.getCallingClassLoader()); } /** * Same as <code>load(String)</code> but using the given loader. * * @param filename the file to load * @param loader class loader, or <code>null</code> for the boot loader * @throws SecurityException if permission is denied * @throws UnsatisfiedLinkError if the library is not found */ void load(String filename, ClassLoader loader) { SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkLink(filename); if (loadLib(filename, loader) == 0) throw new UnsatisfiedLinkError("Could not load library " + filename); } /** * Do a security check on the filename and then load the native library. * * @param filename the file to load * @param loader class loader, or <code>null</code> for the boot loader * @return 0 on failure, nonzero on success * @throws SecurityException if file read permission is denied */ private static int loadLib(String filename, ClassLoader loader) { SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkRead(filename); return VMRuntime.nativeLoad(filename, loader); } /** * Load a native library using a system-independent "short name" for the * library. It will be transformed to a correct filename in a * system-dependent manner (for example, in Windows, "mylib" will be turned * into "mylib.dll"). This is done as follows: if the context that called * load has a ClassLoader cl, then <code>cl.findLibrary(libpath)</code> is * used to convert the name. If that result was null, or there was no class * loader, this searches each directory of the system property * <code>java.library.path</code> for a file named * <code>System.mapLibraryName(libname)</code>. There may be a security * check, of <code>checkLink</code>. * * <p>Note: Besides <code>java.library.path</code> a VM may chose to search * for native libraries in a path that is specified by the * <code>gnu.classpath.boot.library.path</code> system property. However * this is for internal usage or development of GNU Classpath only. * <b>A Java application must not load a non-system library by changing * this property otherwise it will break compatibility.</b></p> * * <p> * The library is loaded using the class loader associated with the * class associated with the invoking method. * * @param libname the library to load * * @throws SecurityException if permission is denied * @throws UnsatisfiedLinkError if the library is not found * * @see System#mapLibraryName(String) * @see ClassLoader#findLibrary(String) */ public void loadLibrary(String libname) { loadLibrary(libname, VMStackWalker.getCallingClassLoader()); } /** * Same as <code>loadLibrary(String)</code> but using the given loader. * * @param libname the library to load * @param loader class loader, or <code>null</code> for the boot loader * @throws SecurityException if permission is denied * @throws UnsatisfiedLinkError if the library is not found */ void loadLibrary(String libname, ClassLoader loader) { SecurityManager sm = SecurityManager.current; // Be thread-safe! if (sm != null) sm.checkLink(libname); String filename; if (loader != null && (filename = loader.findLibrary(libname)) != null) { if (loadLib(filename, loader) != 0) return; } else { filename = VMRuntime.mapLibraryName(libname); for (int i = 0; i < libpath.length; i++) if (loadLib(libpath[i] + filename, loader) != 0) return; // OK. That did not work. Let's be creative and try different // prefix-suffix combinations. // NB: Yes, this is a wasteful implementation. String [] prefixes = {"lib", "cyg", "" }; String [] suffixes = {".so", ".dll", ".la", ".a", ".dylib", ".jnilib", ".dll.a"}; for (int j = 0; j < prefixes.length; j++) for (int k = 0; k < suffixes.length; k++) for (int i = 0; i < libpath.length; i++) if (loadLib(libpath[i] + prefixes[j] + libname + suffixes[k], loader) != 0) return; } throw new UnsatisfiedLinkError("Native library `" + libname + "' not found (as file `" + filename + "' in class loader " + loader + ") in gnu.classpath.boot.library.path and java.library.path `" + Arrays.asList(libpath) + "'"); } /** * Return a localized version of this InputStream, meaning all characters * are localized before they come out the other end. * * @param in the stream to localize * @return the localized stream * @deprecated <code>InputStreamReader</code> is the preferred way to read * local encodings * @XXX This implementation does not localize, yet. */ public InputStream getLocalizedInputStream(InputStream in) { return in; } /** * Return a localized version of this OutputStream, meaning all characters * are localized before they are sent to the other end. * * @param out the stream to localize * @return the localized stream * @deprecated <code>OutputStreamWriter</code> is the preferred way to write * local encodings * @XXX This implementation does not localize, yet. */ public OutputStream getLocalizedOutputStream(OutputStream out) { return out; }} // class Runtime
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -