Debian Java虚拟机设置技巧
在Debian系统中,JVM参数配置需根据应用场景选择合适方式,确保参数生效范围与需求匹配:
/etc/environment文件,添加JAVA_OPTS变量(以设置最大堆内存为例):JAVA_OPTS="-Xmx4g",保存后运行source /etc/environment使配置生效。验证时运行java -version,后续启动的Java应用会自动加载该参数。/etc/init.d/myapp或/usr/local/bin/start.sh),在启动命令前添加JAVA_OPTS:java $JAVA_OPTS -jar /path/to/myapp.jar,保存后重启应用(sudo service myapp restart或./start.sh)。/etc/systemd/system/myapp.service),在[Service]部分添加Environment行:[Unit]
Description=My Java Application
[Service]
ExecStart=/usr/bin/java $JAVA_OPTS -jar /path/to/myapp.jar
Environment="JAVA_OPTS=-Xmx4g -Xms2g -XX:+UseG1GC"
[Install]
WantedBy=multi-user.target
保存后运行sudo systemctl daemon-reload重新加载配置,再通过sudo systemctl restart myapp重启服务,并用sudo systemctl enable myapp设置开机自启。-Xms)和最大大小(-Xmx)。建议将两者设置为相同值(如-Xms4g -Xmx4g),避免运行时堆内存动态扩容/缩容带来的性能开销(频繁扩容会导致GC频繁触发,缩容则浪费内存)。-XX:+UseG1GC)是JDK 9+的默认回收器,适用于大堆内存(如超过4GB),平衡吞吐量与延迟;ZGC(-XX:+UseZGC)适用于对响应时间要求极高的应用(如金融交易),最大GC暂停时间可控制在10ms以内;Parallel GC(-XX:+UseParallelGC)适用于批处理任务,追求高吞吐量。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log);设置新生代与老年代比例(-XX:NewRatio,默认2,新生代占1/3,可根据应用对象生命周期调整,如对象生命周期短则增大新生代比例);设置新生代中Eden区与Survivor区比例(-XX:SurvivorRatio,默认8,Eden占80%,可根据对象晋升率调整)。-XX:MetaspaceSize(初始元空间大小,如128m)和-XX:MaxMetaspaceSize(最大元空间大小,如256m)代替旧版的-XX:PermSize和-XX:MaxPermSize(JDK 8+已移除永久代);线程栈大小使用-Xss设置(如-Xss128k,默认1MB,可根据应用线程数量调整,减少内存占用)。sudo fallocate -l 1G /swapfile;设置文件权限:sudo chmod 600 /swapfile;格式化为交换空间:sudo mkswap /swapfile;启用交换文件:sudo swapon /swapfile;永久生效:在/etc/fstab文件中添加/swapfile none swap sw 0 0。可通过sudo swapon --show验证是否启用。WeakHashMap代替HashMap(WeakHashMap的键是弱引用,不会阻止GC回收),确保资源(如文件流、数据库连接)在使用后正确关闭(使用try-with-resources语句)。HashMap替代ArrayList进行快速查找,用StringBuilder替代字符串拼接(避免循环中使用+操作符,减少内存开销)。