#### 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。
有疑问加站长微信联系(非本文作者))