java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java程序执行流程

Java程序执行的全流程

作者:源末coco

这篇文章主要介绍了Java程序执行的全流程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java程序执行流程

Java程序执行的整个过程可以分为三个阶段:编译、加载和运行

1.编译

Java程序的源代码需要经过编译器(例如javac)的编译,将其转换成字节码(即.class文件),这个过程称为编译。

编译器会对源代码中的语法进行检查和优化,并生成可在JVM上运行的字节码文件。

2.类加载

当Java程序启动时,JVM就会创建一个类加载器(ClassLoader)树来加载所有的类。

类加载器负责在运行时将类的字节码文件加载到内存中,并创建对应的Class对象。

类加载器会按照一定的顺序加载类,通常是先由系统类加载器(AppClassLoader)加载本地路径下的类,如果找不到则由扩展类加载器(ExtClassLoader)加载,最后由启动类加载器(BootstrapClassLoader)加载JRE中的核心类。

类加载器会执行以下三个步骤:

3.执行

在加载完成后,JVM会执行main方法。具体执行过程如下:

在执行main方法时,JVM将会按照程序员编写的语句依次执行,在执行完毕后,程序结束。

4.垃圾回收

在Java程序执行过程中,JVM需要管理内存,包括分配、使用和释放内存。

当一个对象不再被引用时,JVM会通过垃圾回收机制将其回收并释放内存。

垃圾回收器会定期扫描堆内存中的对象,标记不再被引用的对象为垃圾对象,然后清理掉这些对象所占用的内存空间。

Java代码执行Linux命令

说明:项目必须是部署在Linux服务器中才能生效。

1.工具类

@Controller
public class ExecuteNewFlowUtil {
    /**
     * 运行Linux命令
     * @author YuanRiKang
     * @date 2022/5/24 16:56
     * @param commands 命令集合
     * @return 返回结果
     */
    public List<String> executeNewFlow(List<String> commands) {
        List<String> rspList = new ArrayList<String>();
        Runtime run = Runtime.getRuntime();
        try {
            Process proc = run.exec("/bin/bash", null, null);
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
            for (String line : commands) {
                out.println(line);
            }
            out.println("exit");// 这个命令必须执行,否则in流不结束。
            String rspLine = "";
            while ((rspLine = in.readLine()) != null) {
                System.out.println(rspLine);
                rspList.add(rspLine);
            }
            proc.waitFor();
            in.close();
            out.close();
            proc.destroy();
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return rspList;
    }
}

2.方法执行代码段

//运行命令生成对比信息
List<String> generateComparativeInformationCommands = new ArrayList<>();
generateComparativeInformationCommands.add("命令1");
generateComparativeInformationCommands.add("命令2");
generateComparativeInformationCommands.add("命令3");
executeNewFlowUtil.executeNewFlow(generateComparativeInformationCommands);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文