#### Java特点 - 使用JVM层,确定开发者和系统调用的界限;内置自动垃圾回收算法。 - 编程语言,到可执行汇编前,使用 *字节码* 协议;多了一层运行时 *可编辑* 的解释性语法 - 可执行文件终态是字节码包,可运行于任何安装了虚拟机的操作系统 - 线程映射至操作系统线程,JVM作为用户态应用存在于宿主机上;IO操作需要用户态到系统态的转移 #### Go特点 - 直接编译为操作系统所需的可执行文件,可执行文件终态为汇编态; - 可执行文件运行于Go运行时空间,Go运行时提供自动垃圾回收,程序执行是面向CPU的任务调度 - 面向CPU的资源调度思想,高效、无用户态和系统态的切换,高IO效率 #### 对比优缺点 1. Java字节码的存在,可在运行时动态修改执行指令;为开发提供动态配置的优势,例如:注解的使用、SpringBoot的自动化配置 2. Go编译压缩率高,同等功能实现,运行态 *占用内存小* 很多,并且直接运行(不需要类似Java的JVM) 3. Go是面向CPU的任务调度,硬件使用率很高;尤其是IO操作 4. Java应用可在启动初始时,实现自动化配置,配置文件简单 #### 适合构建的系统 - Java适合构建流水式、日志式数据系统,业务系统;生态全面。 例如:财务系统、日志系统 - Go适合构建高IO、硬件调度类、运维辅助类; 例如:内存数据库、DevOps、视频图片处理,文件服务 #### 判断选择依据 - 专注于硬件资源的使用,或解决硬件资源占用过多的问题;建议使用Go - 想要运行期出现问题迅速定位和解决,快速处理因软件系统导致的运营过程中的问题,请使用Java。