--- title: Java Management description: Automatic Java detection, download, and installation --- # Java Management DropOut provides comprehensive Java management, automatically detecting installed versions and downloading new ones as needed. ## Auto-detection ### System Scan DropOut scans multiple locations for Java installations: **Linux:** - `/usr/lib/jvm/` - `/usr/java/` - `$JAVA_HOME` - `PATH` environment variable **macOS:** - `/Library/Java/JavaVirtualMachines/` - `/System/Library/Java/JavaVirtualMachines/` - `$JAVA_HOME` - `PATH` environment variable **Windows:** - `C:\Program Files\Java\` - `C:\Program Files (x86)\Java\` - `%JAVA_HOME%` - `PATH` environment variable - Windows Registry ### Version Detection For each Java installation found, DropOut: 1. Runs `java -version` to get version info 2. Parses major version (8, 11, 17, 21, etc.) 3. Detects architecture (x64, ARM64) 4. Identifies vendor (Oracle, Adoptium, etc.) ### Results All detected Java installations appear in Settings → Java: - Version number - Installation path - Architecture - Current selection status ## Java Download ### Adoptium Integration DropOut integrates with the Eclipse Adoptium API to download high-quality, free JDK/JRE builds. **Supported Versions:** - Java 8 (LTS) - Java 11 (LTS) - Java 17 (LTS) - Java 21 (LTS) - Java 23+ (Latest) **Features:** - Automatic platform detection - Architecture-specific builds - JDK or JRE selection - Checksum verification ### Download Process 1. Navigate to Settings → Java 2. Click "Download Java" 3. Select version (e.g., Java 17) 4. Choose JDK or JRE 5. Click Download 6. Wait for download and extraction **Progress Tracking:** - Real-time download speed - ETA calculation - Extraction progress - Installation confirmation ### Catalog Management The Java catalog is cached for 24 hours to improve performance: ```rust // Catalog structure { "versions": [ { "version": "17.0.9+9", "major": 17, "url": "https://api.adoptium.net/...", "sha256": "...", "size": 123456789 } ], "last_updated": 1234567890 } ``` **Refresh:** - Automatic after 24 hours - Manual refresh in settings - Forced refresh on download failure ## Installation ### Download Directory Downloaded Java runtimes are installed to: ``` ~/.local/share/com.dropout.launcher/java/ (Linux) ~/Library/Application Support/com.dropout.launcher/java/ (macOS) %APPDATA%/com.dropout.launcher/java/ (Windows) ``` ### Directory Structure ``` java/ ├── jdk-17.0.9+9/ │ ├── bin/ │ │ └── java (or java.exe) │ └── lib/ ├── jdk-21.0.1+12/ │ ├── bin/ │ └── lib/ └── download_queue.json ``` ### Extraction 1. Download to `.part` file 2. Verify checksum 3. Extract archive: - `.tar.gz` on Linux/macOS - `.zip` on Windows 4. Move to `java//` directory 5. Set executable permissions (Unix) ## Configuration ### Memory Allocation Configure JVM memory in Settings: **Minimum Memory:** - Default: 1024 MB - Recommended: 2048 MB for vanilla - Recommended: 4096+ MB for modded **Maximum Memory:** - Default: 4096 MB - Adjust based on your system RAM - Leave 4GB for OS and other apps **Format:** ```bash -Xms1024M -Xmx4096M ``` ### Custom JVM Arguments Add custom JVM arguments for advanced configuration: **Common Arguments:** ```bash # Garbage collection -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions # Performance -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 # Memory -XX:G1HeapRegionSize=32M ``` ### Java Path Selection **Auto-select:** - DropOut recommends the best Java version for each Minecraft version - Java 8 for Minecraft 1.12.2 and older - Java 17 for Minecraft 1.18-1.20.4 - Java 21 for Minecraft 1.20.5+ **Manual selection:** 1. Go to Settings → Java 2. Choose from detected installations 3. Or specify custom path ## Version Recommendations ### Minecraft Version → Java Version | Minecraft Version | Recommended Java | Minimum Java | |-------------------|------------------|--------------| | 1.7.10 and older | Java 8 | Java 8 | | 1.8 - 1.12.2 | Java 8 | Java 8 | | 1.13 - 1.16.5 | Java 8 or 11 | Java 8 | | 1.17 - 1.17.1 | Java 16 | Java 16 | | 1.18 - 1.20.4 | Java 17 | Java 17 | | 1.20.5+ | Java 21 | Java 21 | ### Modded Minecraft **Fabric:** - Usually matches vanilla requirements - Some mods may require newer Java **Forge:** - May require specific Java versions - Check mod loader documentation - Often requires exact version match ## Troubleshooting ### Java Not Detected **Issue:** Installed Java not showing up **Solutions:** 1. Verify Java is in standard location 2. Check `JAVA_HOME` environment variable 3. Add Java `bin` directory to `PATH` 4. Restart DropOut 5. Manual path selection ### Download Fails **Issue:** Java download doesn't complete **Solutions:** 1. Check internet connection 2. Verify disk space 3. Try different version 4. Clear download queue 5. Manual download from Adoptium ### Wrong Java Version **Issue:** Game crashes due to Java version **Solutions:** 1. Check Minecraft version requirements 2. Download correct Java version 3. Select appropriate Java in settings 4. Verify Java path is correct ### OutOfMemoryError **Issue:** Game crashes with memory error **Solutions:** 1. Increase maximum memory allocation 2. Close other applications 3. Upgrade system RAM 4. Use 64-bit Java 5. Optimize JVM arguments ### Performance Issues **Issue:** Low FPS or stuttering **Solutions:** 1. Adjust memory allocation (not too high!) 2. Enable G1GC garbage collector 3. Add performance JVM arguments 4. Use newer Java version if compatible 5. Allocate 4-8GB for modpacks ## API Reference ### Tauri Commands **Detect Java Installations:** ```typescript const javas = await invoke('detect_java_installations'); // Returns: Array<{ path: string, version: string, major: number }> ``` **Get Java Catalog:** ```typescript const catalog = await invoke('get_java_catalog'); // Returns: { versions: Array, last_updated: number } ``` **Download Java:** ```typescript await invoke('download_java', { version: '17.0.9+9', variant: 'jdk' // or 'jre' }); ``` **Cancel Java Download:** ```typescript await invoke('cancel_java_download'); ``` **Set Java Path:** ```typescript await invoke('set_java_path', { path: '/path/to/java' }); ``` ### Events **Download Progress:** ```typescript listen('java-download-progress', (event) => { const { percent, speed, eta } = event.payload; }); ``` **Download Complete:** ```typescript listen('java-download-complete', (event) => { const { path, version } = event.payload; }); ``` ## Best Practices ### For Players 1. **Use Adoptium builds** - Free, high-quality, maintained 2. **Match Java to Minecraft** - Check version requirements 3. **Don't over-allocate memory** - Leave RAM for OS 4. **Keep Java updated** - Security and performance 5. **Use 64-bit Java** - Required for large memory ### For Developers 1. **Test multiple Java versions** - Ensure compatibility 2. **Document Java requirements** - Help users 3. **Handle missing Java** - Graceful fallbacks 4. **Validate Java path** - Before launching 5. **Provide clear errors** - When Java is wrong ## Advanced Topics ### Custom Java Installation To use a custom Java installation: 1. Install Java manually 2. Note the installation path 3. In DropOut Settings → Java 4. Click "Custom Path" 5. Browse to Java executable 6. Verify version is correct ### Java for Servers When running a Minecraft server: ```bash # Recommended server JVM arguments -Xms4G -Xmx4G \ -XX:+UseG1GC \ -XX:+ParallelRefProcEnabled \ -XX:MaxGCPauseMillis=200 \ -XX:+UnlockExperimentalVMOptions \ -XX:+DisableExplicitGC \ -XX:G1NewSizePercent=30 \ -XX:G1MaxNewSizePercent=40 \ -XX:G1HeapRegionSize=8M \ -XX:G1ReservePercent=20 \ -XX:G1HeapWastePercent=5 \ -XX:G1MixedGCCountTarget=4 \ -XX:InitiatingHeapOccupancyPercent=15 \ -XX:G1MixedGCLiveThresholdPercent=90 \ -XX:G1RSetUpdatingPauseTimePercent=5 \ -XX:SurvivorRatio=32 \ -XX:+PerfDisableSharedMem \ -XX:MaxTenuringThreshold=1 ``` ### GraalVM GraalVM is supported for advanced users: 1. Download GraalVM from graalvm.org 2. Install manually 3. Add to DropOut as custom Java 4. May improve performance 5. Test thoroughly before use