/** * Builds a list of arguments to run java. * * <p>This method finds the java executable to use and appends JVM-specific options for running a * class with Spark in the classpath. It also loads options from the "java-opts" file in the * configuration directory being used. * * <p>Callers should still add at least the class to run, as well as any arguments to pass to the * class. */ List<String> buildJavaCommand(String extraClassPath) throws IOException { List<String> cmd = new ArrayList<String>(); String envJavaHome; if (javaHome != null) { cmd.add(join(File.separator, javaHome, "bin", "java")); } else if ((envJavaHome = System.getenv("JAVA_HOME")) != null) { cmd.add(join(File.separator, envJavaHome, "bin", "java")); } else { cmd.add(join(File.separator, System.getProperty("java.home"), "bin", "java")); } // Load extra JAVA_OPTS from conf/java-opts, if it exists. File javaOpts = new File(join(File.separator, getConfDir(), "java-opts")); if (javaOpts.isFile()) { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(javaOpts), "UTF-8")); try { String line; while ((line = br.readLine()) != null) { addOptionString(cmd, line); } } finally { br.close(); } } cmd.add("-cp"); cmd.add(join(File.pathSeparator, buildClassPath(extraClassPath))); return cmd; }
/** * Adds the default perm gen size option for Spark if the VM requires it and the user hasn't set * it. */ void addPermGenSizeOpt(List<String> cmd) { // Don't set MaxPermSize for IBM Java, or Oracle Java 8 and later. if (getJavaVendor() == JavaVendor.IBM) { return; } String[] version = System.getProperty("java.version").split("\\."); if (Integer.parseInt(version[0]) > 1 || Integer.parseInt(version[1]) > 7) { return; } for (String arg : cmd) { if (arg.startsWith("-XX:MaxPermSize=")) { return; } } cmd.add("-XX:MaxPermSize=128m"); }