@echo off REM ======================================== REM 优化的 JVM 启动参数模板 REM 用于解决 Windows 7GB 内存系统上的本地内存不足问题 REM ======================================== :: 设置命令行字符集为 UTF-8 chcp 65001 :: ======================================== REM 【必须修改】配置项 REM ======================================== :: Java 路径 set "JAVA_PATH=D:\sy_software\jdk-20\bin\java.exe" :: JAR 包路径(根据你的应用修改) set "JAR_PATH=D:\sy_software\application-app\yudao-server.jar" :: 日志路径(确保目录存在) set "LOG_PATH=D:\sy_software\application-app\logs" :: 应用名称(用于日志文件名) set "APP_NAME=yudao-server" :: ======================================== REM 优化的 JVM 参数 REM ======================================== :: 内存配置 :: -Xms: 初始堆大小(1GB) :: -Xmx: 最大堆大小(2GB,为其他进程和本地内存保留 5GB) :: -XX:MetaspaceSize: 初始元空间大小 :: -XX:MaxMetaspaceSize: 最大元空间大小 :: -XX:ReservedCodeCacheSize: JIT 编译代码缓存(增加到 512MB) :: 关键修复参数 :: -XX:HeapBaseMinAddress=0x100000000 :: 将 Java Heap 放在 4GB 地址空间以上 :: 避免与本地内存(OpenCV、ONNX、相机库等)地址冲突 :: -XX:MaxDirectMemorySize=1g :: 设置直接内存最大限制为 1GB :: 解决 ONNX、OpenCV 等需要分配大量直接内存的问题 set "JVM_OPTS=-server ^ -Xms1g ^ -Xmx2g ^ -XX:MetaspaceSize=256m ^ -XX:MaxMetaspaceSize=512m ^ -XX:ReservedCodeCacheSize=512m ^ -XX:MaxDirectMemorySize=1g ^ -XX:HeapBaseMinAddress=0x100000000" :: 垃圾回收器配置 :: -XX:+UseG1GC: 使用 G1 垃圾回收器 :: -XX:MaxGCPauseMillis=200: 目标 GC 暂停时间 200ms set "JVM_OPTS=%JVM_OPTS% ^ -XX:+UseG1GC ^ -XX:MaxGCPauseMillis=200" :: 错误处理和日志 :: -XX:+HeapDumpOnOutOfMemoryError: OOM 时生成堆转储 :: -XX:HeapDumpPath: 堆转储文件路径 :: -XX:ErrorFile: JVM 崩溃日志路径 set "JVM_OPTS=%JVM_OPTS% ^ -XX:+HeapDumpOnOutOfMemoryError ^ -XX:HeapDumpPath=%LOG_PATH%/%APP_NAME%_heap_dump.hprof ^ -XX:ErrorFile=%LOG_PATH%/hs_err_pid%%p.log" :: 系统属性 :: -Dfile.encoding: 文件编码 :: -Duser.timezone: 时区 set "JVM_OPTS=%JVM_OPTS% ^ -Dfile.encoding=UTF-8 ^ -Duser.timezone=Asia/Shanghai" :: ======================================== REM 启动应用 REM ======================================== echo ======================================== echo 正在启动: %APP_NAME% echo ======================================== echo Java 路径: %JAVA_PATH% echo JAR 路径: %JAR_PATH% echo 日志路径: %LOG_PATH% echo. echo JVM 参数: echo -Xms1g -Xmx2g echo -XX:HeapBaseMinAddress=0x100000000 (关键修复) echo -XX:ReservedCodeCacheSize=512m echo -XX:+UseG1GC echo. echo ======================================== :: 检查日志目录是否存在 if not exist "%LOG_PATH%" ( echo 创建日志目录: %LOG_PATH% mkdir "%LOG_PATH%" ) :: 启动应用 echo 启动中... "%JAVA_PATH%" %JVM_OPTS% -jar "%JAR_PATH%" echo. echo ======================================== echo 应用已退出 echo ======================================== pause