高效搭建与优化 Ubuntu 上的 Java 开发环境
一 基础环境快速到位
- 安装 JDK:优先使用包管理器安装稳定版 OpenJDK。示例:安装默认 JDK 或指定 OpenJDK 11。
- 命令:sudo apt update && sudo apt install default-jdk 或 sudo apt install openjdk-11-jdk
- 验证安装:java -version、javac -version 均应返回版本信息。
- 多版本共存与切换:使用 update-alternatives --config java 选择系统默认 Java。
- 环境变量:
- 查询路径:readlink -f $(which java) 或 ls /usr/lib/jvm
- 全局配置(系统级):编辑 /etc/environment,设置如 JAVA_HOME=“/usr/lib/jvm/java-11-openjdk-amd64”,然后 source /etc/environment
- 用户级配置:编辑 ~/.bashrc 或 ~/.zshrc,添加 export JAVA_HOME=… 与 export PATH=$JAVA_HOME/bin:$PATH,然后 source 使之生效
- 建议:面向生产与团队协作,固定一个 LTS 版本(如 11 或 17) 作为基线,减少环境差异带来的问题。
二 构建与依赖管理
- 使用 Maven:sudo apt install maven;常用命令:mvn compile、mvn test、mvn package、mvn exec:java -Dexec.mainClass=com.example.App
- 使用 Gradle:sudo apt install gradle;适合多模块与现代化构建,配合 Gradle Wrapper 保证团队一致版本
- 工程脚手架:
- Maven:mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
- 依赖与质量:
- 使用 JUnit 等单元测试框架,集成到构建流程中,确保每次构建自动运行测试
- 结合 CI 执行 mvn verify 或 gradle check,保障代码质量与可重复构建。
三 IDE 与调试监控工具
- IDE 选择:
- IntelliJ IDEA:下载 Linux 版 .tar.gz,解压至 /opt,运行 bin/idea.sh 启动;可创建软链方便启动:sudo ln -s /opt/idea-IC-*/bin/idea.sh /usr/local/bin/idea
- Eclipse / NetBeans:同样解压即用,适合轻量与插件化需求
- 调试与诊断:
- 命令行调试:jdb 进行断点、单步、堆栈查看
- JVM 监控:jconsole、VisualVM 观察内存、线程、类加载、CPU 采样
- 性能分析:结合 YourKit / JProfiler 定位热点方法与内存泄漏
- 远程调试:在 IDE 中配置远程调试(Remote Debug),服务端以 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 启动,即可远程断点调试。
四 JVM 性能与系统层优化
- 堆与 GC:
- 设置初始/最大堆:-Xms 与 -Xmx(如 -Xms512m -Xmx2g),避免运行期频繁扩堆
- 选择低停顿 GC:如 -XX:+UseG1GC;高并发可适当调节并行/并发线程数
- 元空间:Java 8 及更早可设置 -XX:MaxPermSize;Java 8+ 使用 -XX:MaxMetaspaceSize 限制元空间上限
- 编译与执行:开启分层编译 -XX:+TieredCompilation,提升运行期优化
- 资源与内核:
- 文件描述符:ulimit -n 查看与调高(如 65536),避免 “Too many open files”
- 内存与交换:适度降低 vm.swappiness,优先保障堆内存与页面缓存
- 磁盘与文件系统:优先 SSD;挂载选项使用 noatime 减少写放大
- 网络:按应用调优 net.core.somaxconn、net.ipv4.tcp_max_syn_backlog 等
- 监控与验证:用 jstat、jconsole、VisualVM 持续观察 GC 次数/停顿、线程与内存曲线,所有调优需先在测试环境验证并回归压测。
五 打包部署与持续交付
- 打包运行:
- 可执行 JAR:mvn package 生成 fat/uber JAR 后,java -jar target/app.jar
- 指定主类与参数:java -cp target/classes:target/lib/* com.example.Main arg1 arg2
- 容器化:
- Dockerfile 示例:FROM openjdk:11;COPY target/app.jar /app.jar;CMD [“java”,“-jar”,“/app.jar”]
- 构建与运行:docker build -t my-java-app .;docker run -it --rm my-java-app
- CI/CD:
- Jenkins:sudo apt install jenkins;创建项目,配置 Git 源码、构建步骤(如 mvn test package)、归档产物与部署
- Travis CI / GitLab CI:在仓库根目录添加 .travis.yml 或 .gitlab-ci.yml,定义语言与脚本阶段,实现自动化测试与发布。