ಜಾವಾ ವರ್ಚುವಲ್ ಮೆಷಿನ್ (JVM) ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಟ್ಯೂನಿಂಗ್ನ ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯೊಂದಿಗೆ ನಿಮ್ಮ ಜಾವಾ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸಂಪನ್ಮೂಲ ಬಳಕೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಿ.
ಜಾವಾ ವರ್ಚುವಲ್ ಮೆಷಿನ್: ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಟ್ಯೂನಿಂಗ್ನ ಆಳವಾದ ನೋಟ
ಜಾವಾದ ಶಕ್ತಿಯು ಅದರ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಸ್ವಾತಂತ್ರ್ಯದಲ್ಲಿದೆ, ಇದನ್ನು ಜಾವಾ ವರ್ಚುವಲ್ ಮೆಷಿನ್ (JVM) ಮೂಲಕ ಸಾಧಿಸಲಾಗುತ್ತದೆ. JVMನ ಒಂದು ನಿರ್ಣಾಯಕ ಅಂಶವೆಂದರೆ ಅದರ ಸ್ವಯಂಚಾಲಿತ ಮೆಮೊರಿ ನಿರ್ವಹಣೆ, ಇದನ್ನು ಮುಖ್ಯವಾಗಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ (GC) ನಿಭಾಯಿಸುತ್ತದೆ. ಅಪ್ಲಿಕೇಶನ್ನ ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ, ವಿಶೇಷವಾಗಿ ವೈವಿಧ್ಯಮಯ ಕೆಲಸದ ಹೊರೆಗಳು ಮತ್ತು ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳನ್ನು ನಿಭಾಯಿಸುವ ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ GC ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಟ್ಯೂನ್ ಮಾಡುವುದು ಬಹಳ ಮುಖ್ಯ. ಈ ಮಾರ್ಗದರ್ಶಿಯು GC ಟ್ಯೂನಿಂಗ್ನ ಸಮಗ್ರ ಅವಲೋಕನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ ವಿವಿಧ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ಗಳು, ಟ್ಯೂನಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳು ಮತ್ತು ನಿಮ್ಮ ಜಾವಾ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುವ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು ಸೇರಿವೆ.
ಜಾವಾದಲ್ಲಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಎಂದರೆ ಒಂದು ಪ್ರೋಗ್ರಾಂನಿಂದ ಇನ್ನು ಮುಂದೆ ಬಳಕೆಯಲ್ಲಿಲ್ಲದ ಆಬ್ಜೆಕ್ಟ್ಗಳು ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವ ಮೆಮೊರಿಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಿಂಪಡೆಯುವ ಪ್ರಕ್ರಿಯೆ. ಇದು ಮೆಮೊರಿ ಲೀಕ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ಡೆವಲಪರ್ಗಳನ್ನು ಮ್ಯಾನುಯಲ್ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯಿಂದ ಮುಕ್ತಗೊಳಿಸುವ ಮೂಲಕ ಅಭಿವೃದ್ಧಿಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ, ಇದು C ಮತ್ತು C++ ನಂತಹ ಭಾಷೆಗಳಿಗೆ ಹೋಲಿಸಿದರೆ ಒಂದು ಗಮನಾರ್ಹ ಪ್ರಯೋಜನವಾಗಿದೆ. JVM ನ GC ಈ ಬಳಕೆಯಾಗದ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ಗುರುತಿಸಿ ತೆಗೆದುಹಾಕುತ್ತದೆ, ಭವಿಷ್ಯದ ಆಬ್ಜೆಕ್ಟ್ ರಚನೆಗೆ ಮೆಮೊರಿಯನ್ನು ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುತ್ತದೆ. ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ನ ಆಯ್ಕೆ ಮತ್ತು ಅದರ ಟ್ಯೂನಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳು ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಆಳವಾದ ಪರಿಣಾಮ ಬೀರುತ್ತವೆ, ಅವುಗಳೆಂದರೆ:
- ಅಪ್ಲಿಕೇಶನ್ ವಿರಾಮಗಳು: GC ವಿರಾಮಗಳು, 'ಸ್ಟಾಪ್-ದಿ-ವರ್ಲ್ಡ್' ಈವೆಂಟ್ಗಳು ಎಂದೂ ಕರೆಯಲ್ಪಡುತ್ತವೆ, ಇಲ್ಲಿ GC ಚಾಲನೆಯಲ್ಲಿರುವಾಗ ಅಪ್ಲಿಕೇಶನ್ ಥ್ರೆಡ್ಗಳನ್ನು ಅಮಾನತುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆಗಾಗ್ಗೆ ಅಥವಾ ದೀರ್ಘ ವಿರಾಮಗಳು ಬಳಕೆದಾರರ ಅನುಭವದ ಮೇಲೆ ಗಮನಾರ್ಹವಾಗಿ ಪರಿಣಾಮ ಬೀರಬಹುದು.
- ಥ್ರೂಪುಟ್: ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದಾದ ದರ. GCಯು CPU ಸಂಪನ್ಮೂಲಗಳ ಒಂದು ಭಾಗವನ್ನು ಬಳಸಿಕೊಳ್ಳಬಹುದು, ಅದನ್ನು ನಿಜವಾದ ಅಪ್ಲಿಕೇಶನ್ ಕೆಲಸಕ್ಕಾಗಿ ಬಳಸಬಹುದಾಗಿತ್ತು, ಹೀಗಾಗಿ ಥ್ರೂಪುಟ್ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ.
- ಮೆಮೊರಿ ಬಳಕೆ: ಅಪ್ಲಿಕೇಶನ್ ಲಭ್ಯವಿರುವ ಮೆಮೊರಿಯನ್ನು ಎಷ್ಟು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸುತ್ತದೆ. ಕಳಪೆಯಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ GCಯು ಅತಿಯಾದ ಮೆಮೊರಿ ಬಳಕೆಗೆ ಮತ್ತು ಔಟ್-ಆಫ್-ಮೆಮೊರಿ ದೋಷಗಳಿಗೂ ಕಾರಣವಾಗಬಹುದು.
- ಲೇಟೆನ್ಸಿ: ಅಪ್ಲಿಕೇಶನ್ ಒಂದು ವಿನಂತಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲು ತೆಗೆದುಕೊಳ್ಳುವ ಸಮಯ. GC ವಿರಾಮಗಳು ನೇರವಾಗಿ ಲೇಟೆನ್ಸಿಗೆ ಕಾರಣವಾಗುತ್ತವೆ.
JVM ನಲ್ಲಿರುವ ವಿವಿಧ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ಗಳು
JVM ವಿವಿಧ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ಗಳನ್ನು ನೀಡುತ್ತದೆ, ಪ್ರತಿಯೊಂದೂ ತನ್ನದೇ ಆದ ಸಾಮರ್ಥ್ಯ ಮತ್ತು ದೌರ್ಬಲ್ಯಗಳನ್ನು ಹೊಂದಿದೆ. ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ನ ಆಯ್ಕೆಯು ಅಪ್ಲಿಕೇಶನ್ನ ಅವಶ್ಯಕತೆಗಳು ಮತ್ತು ಕೆಲಸದ ಹೊರೆಯ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ. ಕೆಲವು ಪ್ರಮುಖವಾದವುಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ:
1. ಸೀರಿಯಲ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್
ಸೀರಿಯಲ್ ಜಿಸಿ ಒಂದು ಸಿಂಗಲ್-ಥ್ರೆಡ್ ಕಲೆಕ್ಟರ್ ಆಗಿದ್ದು, ಮುಖ್ಯವಾಗಿ ಸಿಂಗಲ್-ಕೋರ್ ಮೆಷಿನ್ಗಳಲ್ಲಿ ಚಲಿಸುವ ಅಥವಾ ಅತಿ ಸಣ್ಣ ಹೀಪ್ಗಳನ್ನು ಹೊಂದಿರುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಸೂಕ್ತವಾಗಿದೆ. ಇದು ಸರಳವಾದ ಕಲೆಕ್ಟರ್ ಮತ್ತು ಪೂರ್ಣ ಜಿಸಿ ಸೈಕಲ್ಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದರ ಮುಖ್ಯ ಅನಾನುಕೂಲವೆಂದರೆ ದೀರ್ಘ 'ಸ್ಟಾಪ್-ದಿ-ವರ್ಲ್ಡ್' ವಿರಾಮಗಳು, ಇದು ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ ಅಗತ್ಯವಿರುವ ಪ್ರೊಡಕ್ಷನ್ ಪರಿಸರಗಳಿಗೆ ಸೂಕ್ತವಲ್ಲದಂತೆ ಮಾಡುತ್ತದೆ.
2. ಪ್ಯಾರಲಲ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ (ಥ್ರೂಪುಟ್ ಕಲೆಕ್ಟರ್)
ಪ್ಯಾರಲಲ್ ಜಿಸಿ, ಥ್ರೂಪುಟ್ ಕಲೆಕ್ಟರ್ ಎಂದೂ ಕರೆಯಲ್ಪಡುತ್ತದೆ, ಅಪ್ಲಿಕೇಶನ್ ಥ್ರೂಪುಟ್ ಅನ್ನು ಗರಿಷ್ಠಗೊಳಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ. ಇದು ಮೈನರ್ ಮತ್ತು ಮೇಜರ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಬಹು ಥ್ರೆಡ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ, ಪ್ರತ್ಯೇಕ ಜಿಸಿ ಸೈಕಲ್ಗಳ ಅವಧಿಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಬ್ಯಾಚ್ ಪ್ರೊಸೆಸಿಂಗ್ ಜಾಬ್ಗಳಂತಹ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿಗಿಂತ ಥ್ರೂಪುಟ್ ಅನ್ನು ಗರಿಷ್ಠಗೊಳಿಸುವುದು ಹೆಚ್ಚು ಮುಖ್ಯವಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇದು ಉತ್ತಮ ಆಯ್ಕೆಯಾಗಿದೆ.
3. CMS (Concurrent Mark Sweep) ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ (ಬಳಕೆಯಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ)
ಅಪ್ಲಿಕೇಶನ್ ಥ್ರೆಡ್ಗಳೊಂದಿಗೆ ಏಕಕಾಲದಲ್ಲಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ನ ಹೆಚ್ಚಿನ ಭಾಗವನ್ನು ನಿರ್ವಹಿಸುವ ಮೂಲಕ ವಿರಾಮ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಲು CMS ಅನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಇದು ಕನ್ಕರೆಂಟ್ ಮಾರ್ಕ್-ಸ್ವೀಪ್ ವಿಧಾನವನ್ನು ಬಳಸಿದೆ. ಪ್ಯಾರಲಲ್ ಜಿಸಿಗಿಂತ CMS ಕಡಿಮೆ ವಿರಾಮಗಳನ್ನು ಒದಗಿಸಿದರೂ, ಇದು ಫ್ರಾಗ್ಮೆಂಟೇಶನ್ನಿಂದ ಬಳಲುತ್ತಿತ್ತು ಮತ್ತು ಹೆಚ್ಚಿನ ಸಿಪಿಯು ಓವರ್ಹೆಡ್ ಹೊಂದಿತ್ತು. ಜಾವಾ 9 ರಿಂದ CMS ಅನ್ನು ಬಳಕೆಯಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ ಮತ್ತು ಹೊಸ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇನ್ನು ಮುಂದೆ ಶಿಫಾರಸು ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಇದನ್ನು G1GC ಯಿಂದ ಬದಲಾಯಿಸಲಾಗಿದೆ.
4. G1GC (ಗಾರ್ಬೇಜ್-ಫಸ್ಟ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್)
G1GC ಜಾವಾ 9 ರಿಂದ ಡೀಫಾಲ್ಟ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆಗಿದೆ ಮತ್ತು ಇದನ್ನು ದೊಡ್ಡ ಹೀಪ್ ಗಾತ್ರಗಳು ಮತ್ತು ಕಡಿಮೆ ವಿರಾಮ ಸಮಯಗಳಿಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಇದು ಹೀಪ್ ಅನ್ನು ಪ್ರದೇಶಗಳಾಗಿ ವಿಂಗಡಿಸುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚು ಕಸದಿಂದ ತುಂಬಿರುವ ಪ್ರದೇಶಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಆದ್ಯತೆ ನೀಡುತ್ತದೆ, ಆದ್ದರಿಂದ 'ಗಾರ್ಬೇಜ್-ಫಸ್ಟ್' ಎಂಬ ಹೆಸರು ಬಂದಿದೆ. G1GC ಥ್ರೂಪುಟ್ ಮತ್ತು ಲೇಟೆನ್ಸಿ ನಡುವೆ ಉತ್ತಮ ಸಮತೋಲನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಬಹುಮುಖ ಆಯ್ಕೆಯಾಗಿದೆ. ಇದು ನಿರ್ದಿಷ್ಟ ಗುರಿಯ (ಉದಾಹರಣೆಗೆ, 200 ಮಿಲಿಸೆಕೆಂಡುಗಳು) ಅಡಿಯಲ್ಲಿ ವಿರಾಮ ಸಮಯವನ್ನು ಇರಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ.
5. ZGC (Z ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್)
ZGC ಜಾವಾ 11 ರಲ್ಲಿ ಪರಿಚಯಿಸಲಾದ ಕಡಿಮೆ-ಲೇಟೆನ್ಸಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆಗಿದೆ (ಜಾವಾ 11 ರಲ್ಲಿ ಪ್ರಾಯೋಗಿಕ, ಜಾವಾ 15 ರಿಂದ ಪ್ರೊಡಕ್ಷನ್-ರೆಡಿ). ಇದು ಹೀಪ್ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಿಸದೆ, ಜಿಸಿ ವಿರಾಮ ಸಮಯವನ್ನು 10 ಮಿಲಿಸೆಕೆಂಡುಗಳಷ್ಟು ಕಡಿಮೆ ಮಾಡುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ. ZGC ಏಕಕಾಲದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಅಪ್ಲಿಕೇಶನ್ ಬಹುತೇಕ ಅಡೆತಡೆಯಿಲ್ಲದೆ ಚಾಲನೆಯಲ್ಲಿರುತ್ತದೆ. ಹೆಚ್ಚಿನ ಆವರ್ತನದ ಟ್ರೇಡಿಂಗ್ ಸಿಸ್ಟಮ್ಗಳು ಅಥವಾ ಆನ್ಲೈನ್ ಗೇಮಿಂಗ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳಂತಹ ಅತ್ಯಂತ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ ಅಗತ್ಯವಿರುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇದು ಸೂಕ್ತವಾಗಿದೆ. ಆಬ್ಜೆಕ್ಟ್ ರೆಫರೆನ್ಸ್ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ZGC ಕಲರ್ಡ್ ಪಾಯಿಂಟರ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ.
6. ಶೆನನ್ಡೋವಾ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್
ಶೆನನ್ಡೋವಾ ರೆಡ್ ಹ್ಯಾಟ್ನಿಂದ ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾದ ಕಡಿಮೆ-ವಿರಾಮ-ಸಮಯದ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆಗಿದೆ ಮತ್ತು ZGC ಗೆ ಸಂಭಾವ್ಯ ಪರ್ಯಾಯವಾಗಿದೆ. ಇದು ಏಕಕಾಲೀನ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಮಾಡುವ ಮೂಲಕ ಅತಿ ಕಡಿಮೆ ವಿರಾಮ ಸಮಯವನ್ನು ಗುರಿಯಾಗಿಸಿಕೊಂಡಿದೆ. ಶೆನನ್ಡೋವಾದ ಪ್ರಮುಖ ವ್ಯತ್ಯಾಸವೆಂದರೆ ಅದು ಏಕಕಾಲದಲ್ಲಿ ಹೀಪ್ ಅನ್ನು ಕಾಂಪ್ಯಾಕ್ಟ್ ಮಾಡಬಹುದು, ಇದು ಫ್ರಾಗ್ಮೆಂಟೇಶನ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಶೆನನ್ಡೋವಾ OpenJDK ಮತ್ತು ರೆಡ್ ಹ್ಯಾಟ್ನ ಜಾವಾ ವಿತರಣೆಗಳಲ್ಲಿ ಪ್ರೊಡಕ್ಷನ್-ರೆಡಿಯಾಗಿದೆ. ಇದು ಕಡಿಮೆ ವಿರಾಮ ಸಮಯ ಮತ್ತು ಥ್ರೂಪುಟ್ ಗುಣಲಕ್ಷಣಗಳಿಗೆ ಹೆಸರುವಾಸಿಯಾಗಿದೆ. ಶೆನನ್ಡೋವಾ ಅಪ್ಲಿಕೇಶನ್ನೊಂದಿಗೆ ಸಂಪೂರ್ಣವಾಗಿ ಏಕಕಾಲದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಇದು ಯಾವುದೇ ಕ್ಷಣದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಲ್ಲಿಸದ ಪ್ರಯೋಜನವನ್ನು ಹೊಂದಿದೆ. ಹೆಚ್ಚುವರಿ ಥ್ರೆಡ್ ಮೂಲಕ ಕೆಲಸವನ್ನು ಮಾಡಲಾಗುತ್ತದೆ.
ಪ್ರಮುಖ GC ಟ್ಯೂನಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳು
ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಅನ್ನು ಟ್ಯೂನ್ ಮಾಡುವುದು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ವಿವಿಧ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಸರಿಹೊಂದಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಸ್ಪಷ್ಟತೆಗಾಗಿ ವರ್ಗೀಕರಿಸಲಾದ ಕೆಲವು ನಿರ್ಣಾಯಕ ಪ್ಯಾರಾಮೀಟರ್ಗಳು ಇಲ್ಲಿವೆ:
1. ಹೀಪ್ ಗಾತ್ರದ ಕಾನ್ಫಿಗರೇಶನ್
-Xms
(ಕನಿಷ್ಠ ಹೀಪ್ ಗಾತ್ರ): ಆರಂಭಿಕ ಹೀಪ್ ಗಾತ್ರವನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ರನ್ಟೈಮ್ ಸಮಯದಲ್ಲಿ JVM ಹೀಪ್ ಅನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸುವುದನ್ನು ತಡೆಯಲು ಇದನ್ನು-Xmx
ನಂತೆಯೇ ಅದೇ ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸವಾಗಿದೆ.-Xmx
(ಗರಿಷ್ಠ ಹೀಪ್ ಗಾತ್ರ): ಗರಿಷ್ಠ ಹೀಪ್ ಗಾತ್ರವನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ಇದು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಅತ್ಯಂತ ನಿರ್ಣಾಯಕ ಪ್ಯಾರಾಮೀಟರ್ ಆಗಿದೆ. ಸರಿಯಾದ ಮೌಲ್ಯವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಪ್ರಯೋಗ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ದೊಡ್ಡ ಹೀಪ್ ಥ್ರೂಪುಟ್ ಅನ್ನು ಸುಧಾರಿಸಬಹುದು ಆದರೆ GC ಹೆಚ್ಚು ಶ್ರಮಿಸಬೇಕಾದರೆ ವಿರಾಮ ಸಮಯವನ್ನು ಹೆಚ್ಚಿಸಬಹುದು.-Xmn
(ಯಂಗ್ ಜನರೇಶನ್ ಗಾತ್ರ): ಯಂಗ್ ಜನರೇಶನ್ನ ಗಾತ್ರವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಯಂಗ್ ಜನರೇಶನ್ ಎಂದರೆ ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ಆರಂಭದಲ್ಲಿ ಹಂಚಿಕೆ ಮಾಡುವ ಸ್ಥಳ. ದೊಡ್ಡ ಯಂಗ್ ಜನರೇಶನ್ ಮೈನರ್ ಜಿಸಿಗಳ ಆವರ್ತನವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು. G1GC ಗಾಗಿ, ಯಂಗ್ ಜನರೇಶನ್ ಗಾತ್ರವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ ಆದರೆ-XX:G1NewSizePercent
ಮತ್ತು-XX:G1MaxNewSizePercent
ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಬಳಸಿ ಸರಿಹೊಂದಿಸಬಹುದು.
2. ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆಯ್ಕೆ
-XX:+UseSerialGC
: ಸೀರಿಯಲ್ ಜಿಸಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.-XX:+UseParallelGC
: ಪ್ಯಾರಲಲ್ ಜಿಸಿಯನ್ನು (ಥ್ರೂಪುಟ್ ಕಲೆಕ್ಟರ್) ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.-XX:+UseG1GC
: G1GC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಇದು ಜಾವಾ 9 ಮತ್ತು ನಂತರದ ಆವೃತ್ತಿಗಳಿಗೆ ಡೀಫಾಲ್ಟ್ ಆಗಿದೆ.-XX:+UseZGC
: ZGC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.-XX:+UseShenandoahGC
: ಶೆನನ್ಡೋವಾ ಜಿಸಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
3. G1GC-ನಿರ್ದಿಷ್ಟ ಪ್ಯಾರಾಮೀಟರ್ಗಳು
-XX:MaxGCPauseMillis=
: G1GC ಗಾಗಿ ಗರಿಷ್ಠ ವಿರಾಮ ಸಮಯದ ಗುರಿಯನ್ನು ಮಿಲಿಸೆಕೆಂಡುಗಳಲ್ಲಿ ಹೊಂದಿಸುತ್ತದೆ. ಜಿಸಿ ಈ ಗುರಿಯನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ, ಆದರೆ ಇದು ಖಾತರಿಯಲ್ಲ.-XX:G1HeapRegionSize=
: G1GC ಗಾಗಿ ಹೀಪ್ನೊಳಗಿನ ಪ್ರದೇಶಗಳ ಗಾತ್ರವನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ಪ್ರದೇಶದ ಗಾತ್ರವನ್ನು ಹೆಚ್ಚಿಸುವುದು ಸಂಭಾವ್ಯವಾಗಿ ಜಿಸಿ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು.-XX:G1NewSizePercent=
: G1GC ಯಲ್ಲಿ ಯಂಗ್ ಜನರೇಶನ್ಗಾಗಿ ಬಳಸಲಾಗುವ ಹೀಪ್ನ ಕನಿಷ್ಠ ಶೇಕಡಾವಾರು ಪ್ರಮಾಣವನ್ನು ಹೊಂದಿಸುತ್ತದೆ.-XX:G1MaxNewSizePercent=
: G1GC ಯಲ್ಲಿ ಯಂಗ್ ಜನರೇಶನ್ಗಾಗಿ ಬಳಸಲಾಗುವ ಹೀಪ್ನ ಗರಿಷ್ಠ ಶೇಕಡಾವಾರು ಪ್ರಮಾಣವನ್ನು ಹೊಂದಿಸುತ್ತದೆ.-XX:G1ReservePercent=
: ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ಗಳ ಹಂಚಿಕೆಗಾಗಿ ಮೀಸಲಿಡಲಾದ ಮೆಮೊರಿಯ ಪ್ರಮಾಣ. ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ 10% ಆಗಿದೆ.-XX:G1MixedGCCountTarget=
: ಒಂದು ಸೈಕಲ್ನಲ್ಲಿ ಮಿಶ್ರ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ಗಳ ಗುರಿ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
4. ZGC-ನಿರ್ದಿಷ್ಟ ಪ್ಯಾರಾಮೀಟರ್ಗಳು
-XX:ZUncommitDelay=
: ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ಗೆ ಮೆಮೊರಿಯನ್ನು ಅನ್ಕಮಿಟ್ ಮಾಡುವ ಮೊದಲು ZGC ಕಾಯುವ ಸಮಯ, ಸೆಕೆಂಡುಗಳಲ್ಲಿ.-XX:ZAllocationSpikeFactor=
: ಹಂಚಿಕೆ ದರಕ್ಕೆ ಸ್ಪೈಕ್ ಫ್ಯಾಕ್ಟರ್. ಹೆಚ್ಚಿನ ಮೌಲ್ಯವು ಜಿಸಿಗೆ ಕಸವನ್ನು ಸಂಗ್ರಹಿಸಲು ಹೆಚ್ಚು ಆಕ್ರಮಣಕಾರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು ಅನುಮತಿಸಲಾಗಿದೆ ಮತ್ತು ಹೆಚ್ಚು ಸಿಪಿಯು ಸೈಕಲ್ಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳಬಹುದು ಎಂದು ಸೂಚಿಸುತ್ತದೆ.
5. ಇತರ ಪ್ರಮುಖ ಪ್ಯಾರಾಮೀಟರ್ಗಳು
-XX:+PrintGCDetails
: ವಿವರವಾದ ಜಿಸಿ ಲಾಗಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ಜಿಸಿ ಸೈಕಲ್ಗಳು, ವಿರಾಮ ಸಮಯಗಳು ಮತ್ತು ಮೆಮೊರಿ ಬಳಕೆಯ ಬಗ್ಗೆ ಅಮೂಲ್ಯವಾದ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಜಿಸಿ ನಡವಳಿಕೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.-XX:+PrintGCTimeStamps
: ಜಿಸಿ ಲಾಗ್ ಔಟ್ಪುಟ್ನಲ್ಲಿ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ.-XX:+UseStringDeduplication
(Java 8u20 ಮತ್ತು ನಂತರ, G1GC): ಹೀಪ್ನಲ್ಲಿ ಒಂದೇ ರೀತಿಯ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಡಿ-ಡ್ಯೂಪ್ಲಿಕೇಟ್ ಮಾಡುವ ಮೂಲಕ ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
: ಪ್ರಸ್ತುತ JDK ಯಲ್ಲಿ ಸ್ಪಷ್ಟವಾದ ಜಿಸಿ ಆಹ್ವಾನಗಳ ಬಳಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ. ಪ್ರೊಡಕ್ಷನ್ ಪರಿಸರದಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಕುಸಿತವನ್ನು ತಡೆಯಲು ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.-XX:+HeapDumpOnOutOfMemoryError
: OutOfMemoryError ಸಂಭವಿಸಿದಾಗ ಹೀಪ್ ಡಂಪ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ, ಇದು ಮೆಮೊರಿ ಬಳಕೆಯ ವಿವರವಾದ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಮೆಮೊರಿ ಲೀಕ್ಗಳನ್ನು ಗುರುತಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.-XX:HeapDumpPath=
: ಹೀಪ್ ಡಂಪ್ ಫೈಲ್ ಅನ್ನು ಎಲ್ಲಿ ಬರೆಯಬೇಕು ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
ಪ್ರಾಯೋಗಿಕ GC ಟ್ಯೂನಿಂಗ್ ಉದಾಹರಣೆಗಳು
ವಿವಿಧ ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ ಕೆಲವು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ನೋಡೋಣ. ಇವುಗಳು ಆರಂಭಿಕ ಬಿಂದುಗಳಾಗಿವೆ ಮತ್ತು ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಅಪ್ಲಿಕೇಶನ್ನ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಆಧರಿಸಿ ಪ್ರಯೋಗ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆ ಅಗತ್ಯವಿರುತ್ತದೆ ಎಂಬುದನ್ನು ನೆನಪಿಡಿ. ಸೂಕ್ತವಾದ ಬೇಸ್ಲೈನ್ ಹೊಂದಲು ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವುದು ಮುಖ್ಯ. ಅಲ್ಲದೆ, ಹಾರ್ಡ್ವೇರ್ಗೆ ಅನುಗುಣವಾಗಿ ಫಲಿತಾಂಶಗಳು ಬದಲಾಗಬಹುದು.
1. ಬ್ಯಾಚ್ ಪ್ರೊಸೆಸಿಂಗ್ ಅಪ್ಲಿಕೇಶನ್ (ಥ್ರೂಪುಟ್ ಕೇಂದ್ರೀಕೃತ)
ಬ್ಯಾಚ್ ಪ್ರೊಸೆಸಿಂಗ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ, ಪ್ರಾಥಮಿಕ ಗುರಿಯು ಸಾಮಾನ್ಯವಾಗಿ ಥ್ರೂಪುಟ್ ಅನ್ನು ಗರಿಷ್ಠಗೊಳಿಸುವುದಾಗಿದೆ. ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ ಅಷ್ಟು ನಿರ್ಣಾಯಕವಲ್ಲ. ಪ್ಯಾರಲಲ್ ಜಿಸಿ ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮ ಆಯ್ಕೆಯಾಗಿದೆ.
java -Xms4g -Xmx4g -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mybatchapp.jar
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು ಕನಿಷ್ಠ ಮತ್ತು ಗರಿಷ್ಠ ಹೀಪ್ ಗಾತ್ರವನ್ನು 4GB ಗೆ ಹೊಂದಿಸಿದ್ದೇವೆ, ಪ್ಯಾರಲಲ್ ಜಿಸಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದೇವೆ ಮತ್ತು ವಿವರವಾದ ಜಿಸಿ ಲಾಗಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದೇವೆ.
2. ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ (ಲೇಟೆನ್ಸಿ ಸೆನ್ಸಿಟಿವ್)
ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ, ಉತ್ತಮ ಬಳಕೆದಾರರ ಅನುಭವಕ್ಕಾಗಿ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ ನಿರ್ಣಾಯಕವಾಗಿದೆ. G1GC ಅಥವಾ ZGC (ಅಥವಾ ಶೆನನ್ಡೋವಾ) ಅನ್ನು ಹೆಚ್ಚಾಗಿ ಆದ್ಯತೆ ನೀಡಲಾಗುತ್ತದೆ.
G1GC ಬಳಸುವುದು:
java -Xms8g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar
ಈ ಕಾನ್ಫಿಗರೇಶನ್ ಕನಿಷ್ಠ ಮತ್ತು ಗರಿಷ್ಠ ಹೀಪ್ ಗಾತ್ರವನ್ನು 8GB ಗೆ ಹೊಂದಿಸುತ್ತದೆ, G1GC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಗರಿಷ್ಠ ವಿರಾಮ ಸಮಯದ ಗುರಿಯನ್ನು 200 ಮಿಲಿಸೆಕೆಂಡುಗಳಿಗೆ ಹೊಂದಿಸುತ್ತದೆ. ನಿಮ್ಮ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವಶ್ಯಕತೆಗಳಿಗೆ ಅನುಗುಣವಾಗಿ MaxGCPauseMillis
ಮೌಲ್ಯವನ್ನು ಸರಿಹೊಂದಿಸಿ.
ZGC ಬಳಸುವುದು (Java 11+ ಅಗತ್ಯವಿದೆ):
java -Xms8g -Xmx8g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar
ಈ ಉದಾಹರಣೆಯು ಇದೇ ರೀತಿಯ ಹೀಪ್ ಕಾನ್ಫಿಗರೇಶನ್ನೊಂದಿಗೆ ZGC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ZGC ಅನ್ನು ಅತಿ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿರುವುದರಿಂದ, ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ವಿರಾಮ ಸಮಯದ ಗುರಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುವ ಅಗತ್ಯವಿಲ್ಲ. ನೀವು ನಿರ್ದಿಷ್ಟ ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಸೇರಿಸಬಹುದು; ಉದಾಹರಣೆಗೆ, ನಿಮಗೆ ಹಂಚಿಕೆ ದರದ ಸಮಸ್ಯೆಗಳಿದ್ದರೆ, ನೀವು -XX:ZAllocationSpikeFactor=2
ಅನ್ನು ಪ್ರಯತ್ನಿಸಬಹುದು.
3. ಹೈ-ಫ್ರೀಕ್ವೆನ್ಸಿ ಟ್ರೇಡಿಂಗ್ ಸಿಸ್ಟಮ್ (ಅತ್ಯಂತ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ)
ಹೈ-ಫ್ರೀಕ್ವೆನ್ಸಿ ಟ್ರೇಡಿಂಗ್ ಸಿಸ್ಟಮ್ಗಳಿಗೆ, ಅತ್ಯಂತ ಕಡಿಮೆ ಲೇಟೆನ್ಸಿ ಅತಿ ಮುಖ್ಯ. ZGC ಒಂದು ಆದರ್ಶ ಆಯ್ಕೆಯಾಗಿದೆ, ಅಪ್ಲಿಕೇಶನ್ ಅದರೊಂದಿಗೆ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ ಎಂದು ಭಾವಿಸಿದರೆ. ನೀವು ಜಾವಾ 8 ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ ಅಥವಾ ಹೊಂದಾಣಿಕೆಯ ಸಮಸ್ಯೆಗಳಿದ್ದರೆ, ಶೆನನ್ಡೋವಾವನ್ನು ಪರಿಗಣಿಸಿ.
java -Xms16g -Xmx16g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mytradingapp.jar
ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಉದಾಹರಣೆಯಂತೆಯೇ, ನಾವು ಹೀಪ್ ಗಾತ್ರವನ್ನು ಹೊಂದಿಸಿ ZGC ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತೇವೆ. ಕೆಲಸದ ಹೊರೆಯನ್ನು ಆಧರಿಸಿ ZGC ನಿರ್ದಿಷ್ಟ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಮತ್ತಷ್ಟು ಟ್ಯೂನ್ ಮಾಡುವುದನ್ನು ಪರಿಗಣಿಸಿ.
4. ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳನ್ನು ಹೊಂದಿರುವ ಅಪ್ಲಿಕೇಶನ್ಗಳು
ಅತಿ ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ, ಎಚ್ಚರಿಕೆಯ ಪರಿಗಣನೆ ಅಗತ್ಯ. ದೊಡ್ಡ ಹೀಪ್ ಗಾತ್ರವನ್ನು ಬಳಸುವುದು ಅಗತ್ಯವಾಗಬಹುದು, ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆ ಇನ್ನಷ್ಟು ಮುಖ್ಯವಾಗುತ್ತದೆ. ಡೇಟಾಸೆಟ್ ಚಿಕ್ಕದಾಗಿದ್ದರೆ ಮತ್ತು ಗಾತ್ರವು ಯಂಗ್ ಜನರೇಶನ್ಗೆ ಹತ್ತಿರವಾಗಿದ್ದರೆ ಡೇಟಾವನ್ನು ಯಂಗ್ ಜನರೇಶನ್ನಲ್ಲಿ ಕ್ಯಾಶ್ ಮಾಡಬಹುದು.
ಕೆಳಗಿನ ಅಂಶಗಳನ್ನು ಪರಿಗಣಿಸಿ:
- ಆಬ್ಜೆಕ್ಟ್ ಹಂಚಿಕೆ ದರ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಅಲ್ಪಾವಧಿಯ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ರಚಿಸಿದರೆ, ಯಂಗ್ ಜನರೇಶನ್ ಸಾಕಾಗಬಹುದು.
- ಆಬ್ಜೆಕ್ಟ್ ಜೀವಿತಾವಧಿ: ಆಬ್ಜೆಕ್ಟ್ಗಳು ಹೆಚ್ಚು ಕಾಲ ಬದುಕುವ ಪ್ರವೃತ್ತಿ ಹೊಂದಿದ್ದರೆ, ನೀವು ಯಂಗ್ ಜನರೇಶನ್ನಿಂದ ಓಲ್ಡ್ ಜನರೇಶನ್ಗೆ ಪ್ರಚಾರದ ದರವನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ.
- ಮೆಮೊರಿ ಫುಟ್ಪ್ರಿಂಟ್: ಅಪ್ಲಿಕೇಶನ್ ಮೆಮೊರಿ-ಬೌಂಡ್ ಆಗಿದ್ದರೆ ಮತ್ತು ನೀವು OutOfMemoryError ವಿನಾಯಿತಿಗಳನ್ನು ಎದುರಿಸುತ್ತಿದ್ದರೆ, ಆಬ್ಜೆಕ್ಟ್ನ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ಅಥವಾ ಅವುಗಳನ್ನು ಅಲ್ಪಾವಧಿಯನ್ನಾಗಿ ಮಾಡುವುದು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಬಹುದು.
ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಾಗಿ, ಯಂಗ್ ಜನರೇಶನ್ ಮತ್ತು ಓಲ್ಡ್ ಜನರೇಶನ್ ಅನುಪಾತವು ಮುಖ್ಯವಾಗಿದೆ. ಕಡಿಮೆ-ವಿರಾಮ ಸಮಯವನ್ನು ಸಾಧಿಸಲು ಕೆಳಗಿನ ಉದಾಹರಣೆಯನ್ನು ಪರಿಗಣಿಸಿ:
java -Xms32g -Xmx32g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=30 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mydatasetapp.jar
ಈ ಉದಾಹರಣೆಯು ದೊಡ್ಡ ಹೀಪ್ ಅನ್ನು (32GB) ಹೊಂದಿಸುತ್ತದೆ, ಮತ್ತು G1GC ಅನ್ನು ಕಡಿಮೆ ಗುರಿ ವಿರಾಮ ಸಮಯ ಮತ್ತು ಸರಿಹೊಂದಿಸಲಾದ ಯಂಗ್ ಜನರೇಶನ್ ಗಾತ್ರದೊಂದಿಗೆ ಉತ್ತಮಗೊಳಿಸುತ್ತದೆ. ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಸರಿಹೊಂದಿಸಿ.
ಮೇಲ್ವಿಚಾರಣೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆ
GC ಟ್ಯೂನಿಂಗ್ ಒಂದು-ಬಾರಿಯ ಪ್ರಯತ್ನವಲ್ಲ; ಇದು ಎಚ್ಚರಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆ ಅಗತ್ಯವಿರುವ ಪುನರಾವರ್ತಿತ ಪ್ರಕ್ರಿಯೆ. ಮೇಲ್ವಿಚಾರಣೆಯನ್ನು ಹೇಗೆ ಸಂಪರ್ಕಿಸುವುದು ಎಂಬುದು ಇಲ್ಲಿದೆ:
1. ಜಿಸಿ ಲಾಗಿಂಗ್
-XX:+PrintGCDetails
, -XX:+PrintGCTimeStamps
, ಮತ್ತು -Xloggc:
ನಂತಹ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವಿವರವಾದ ಜಿಸಿ ಲಾಗಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ವಿರಾಮ ಸಮಯಗಳು, ಜಿಸಿ ಸೈಕಲ್ಗಳ ಆವರ್ತನ, ಮತ್ತು ಮೆಮೊರಿ ಬಳಕೆಯ ಮಾದರಿಗಳು ಸೇರಿದಂತೆ ಜಿಸಿ ನಡವಳಿಕೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಲಾಗ್ ಫೈಲ್ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ. ಜಿಸಿ ಲಾಗ್ಗಳನ್ನು ದೃಶ್ಯೀಕರಿಸಲು ಮತ್ತು ವಿಶ್ಲೇಷಿಸಲು GCViewer ಅಥವಾ GCeasy ನಂತಹ ಸಾಧನಗಳನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ.
2. ಅಪ್ಲಿಕೇಶನ್ ಪರ್ಫಾರ್ಮೆನ್ಸ್ ಮಾನಿಟರಿಂಗ್ (APM) ಪರಿಕರಗಳು
ಸಿಪಿಯು ಬಳಕೆ, ಮೆಮೊರಿ ಬಳಕೆ, ಪ್ರತಿಕ್ರಿಯೆ ಸಮಯಗಳು, ಮತ್ತು ದೋಷ ದರಗಳು ಸೇರಿದಂತೆ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು APM ಪರಿಕರಗಳನ್ನು (ಉದಾ., Datadog, New Relic, AppDynamics) ಬಳಸಿ. ಈ ಪರಿಕರಗಳು ಜಿಸಿಗೆ ಸಂಬಂಧಿಸಿದ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ಸಹಾಯ ಮಾಡಬಹುದು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ನಡವಳಿಕೆಯ ಬಗ್ಗೆ ಒಳನೋಟಗಳನ್ನು ಒದಗಿಸಬಹುದು. ಮಾರುಕಟ್ಟೆಯಲ್ಲಿರುವ Prometheus ಮತ್ತು Grafana ನಂತಹ ಪರಿಕರಗಳನ್ನು ನೈಜ-ಸಮಯದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಒಳನೋಟಗಳನ್ನು ನೋಡಲು ಸಹ ಬಳಸಬಹುದು.
3. ಹೀಪ್ ಡಂಪ್ಗಳು
OutOfMemoryErrors ಸಂಭವಿಸಿದಾಗ ಹೀಪ್ ಡಂಪ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ (-XX:+HeapDumpOnOutOfMemoryError
ಮತ್ತು -XX:HeapDumpPath=
ಬಳಸಿ). ಮೆಮೊರಿ ಲೀಕ್ಗಳನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ ಹಂಚಿಕೆ ಮಾದರಿಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಎಕ್ಲಿಪ್ಸ್ MAT (ಮೆಮೊರಿ ಅನಾಲೈಜರ್ ಟೂಲ್) ನಂತಹ ಪರಿಕರಗಳನ್ನು ಬಳಸಿ ಹೀಪ್ ಡಂಪ್ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಿ. ಹೀಪ್ ಡಂಪ್ಗಳು ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ನ ಮೆಮೊರಿ ಬಳಕೆಯ ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಒದಗಿಸುತ್ತವೆ.
4. ಪ್ರೊಫೈಲಿಂಗ್
ನಿಮ್ಮ ಕೋಡ್ನಲ್ಲಿನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ಜಾವಾ ಪ್ರೊಫೈಲಿಂಗ್ ಪರಿಕರಗಳನ್ನು (ಉದಾ., JProfiler, YourKit) ಬಳಸಿ. ಈ ಪರಿಕರಗಳು ಆಬ್ಜೆಕ್ಟ್ ರಚನೆ, ಮೆಥಡ್ ಕಾಲ್ಗಳು, ಮತ್ತು ಸಿಪಿಯು ಬಳಕೆಯ ಬಗ್ಗೆ ಒಳನೋಟಗಳನ್ನು ಒದಗಿಸಬಹುದು, ಇದು ಅಪ್ಲಿಕೇಶನ್ನ ಕೋಡ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವ ಮೂಲಕ ಪರೋಕ್ಷವಾಗಿ ಜಿಸಿಯನ್ನು ಟ್ಯೂನ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
GC ಟ್ಯೂನಿಂಗ್ಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
- ಡೀಫಾಲ್ಟ್ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ: JVM ಡೀಫಾಲ್ಟ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಉತ್ತಮ ಆರಂಭಿಕ ಬಿಂದುಗಳಾಗಿವೆ. ಅಕಾಲಿಕವಾಗಿ ಅತಿಯಾಗಿ-ಟ್ಯೂನ್ ಮಾಡಬೇಡಿ.
- ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಕೆಲಸದ ಹೊರೆ, ಆಬ್ಜೆಕ್ಟ್ ಹಂಚಿಕೆ ಮಾದರಿಗಳು ಮತ್ತು ಮೆಮೊರಿ ಬಳಕೆಯ ಗುಣಲಕ್ಷಣಗಳನ್ನು ತಿಳಿದುಕೊಳ್ಳಿ.
- ಪ್ರೊಡಕ್ಷನ್-ರೀತಿಯ ಪರಿಸರದಲ್ಲಿ ಪರೀಕ್ಷಿಸಿ: ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಣಾಮವನ್ನು ನಿಖರವಾಗಿ ನಿರ್ಣಯಿಸಲು ನಿಮ್ಮ ಪ್ರೊಡಕ್ಷನ್ ಪರಿಸರವನ್ನು ನಿಕಟವಾಗಿ ಹೋಲುವ ಪರಿಸರದಲ್ಲಿ ಜಿಸಿ ಕಾನ್ಫಿಗರೇಶನ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ.
- ನಿರಂತರವಾಗಿ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ: ಜಿಸಿ ನಡವಳಿಕೆ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ನಿರಂತರವಾಗಿ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ. ಗಮನಿಸಿದ ಫಲಿತಾಂಶಗಳ ಆಧಾರದ ಮೇಲೆ ಅಗತ್ಯವಿರುವಂತೆ ಟ್ಯೂನಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳನ್ನು ಸರಿಹೊಂದಿಸಿ.
- ವೇರಿಯೇಬಲ್ಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸಿ: ಟ್ಯೂನ್ ಮಾಡುವಾಗ, ಪ್ರತಿ ಬದಲಾವಣೆಯ ಪರಿಣಾಮವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಒಂದು ಸಮಯದಲ್ಲಿ ಕೇವಲ ಒಂದು ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಬದಲಾಯಿಸಿ.
- ಅಕಾಲಿಕ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ತಪ್ಪಿಸಿ: ದೃಢವಾದ ಡೇಟಾ ಮತ್ತು ವಿಶ್ಲೇಷಣೆಯಿಲ್ಲದೆ ಗ್ರಹಿಸಿದ ಸಮಸ್ಯೆಗೆ ಆಪ್ಟಿಮೈಜ್ ಮಾಡಬೇಡಿ.
- ಕೋಡ್ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಪರಿಗಣಿಸಿ: ಆಬ್ಜೆಕ್ಟ್ ರಚನೆ ಮತ್ತು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ. ಉದಾಹರಣೆಗೆ, ಸಾಧ್ಯವಾದಾಗಲೆಲ್ಲಾ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ಮರುಬಳಕೆ ಮಾಡಿ.
- ನವೀಕೃತವಾಗಿರಿ: ಜಿಸಿ ತಂತ್ರಜ್ಞಾನ ಮತ್ತು JVM ನವೀಕರಣಗಳಲ್ಲಿನ ಇತ್ತೀಚಿನ ಪ್ರಗತಿಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿ ಇಟ್ಟುಕೊಳ್ಳಿ. ಹೊಸ JVM ಆವೃತ್ತಿಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ನಲ್ಲಿ ಸುಧಾರಣೆಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ.
- ನಿಮ್ಮ ಟ್ಯೂನಿಂಗ್ ಅನ್ನು ದಾಖಲಿಸಿ: ಜಿಸಿ ಕಾನ್ಫಿಗರೇಶನ್, ನಿಮ್ಮ ಆಯ್ಕೆಗಳ ಹಿಂದಿನ ತರ್ಕ, ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ದಾಖಲಿಸಿ. ಇದು ಭವಿಷ್ಯದ ನಿರ್ವಹಣೆ ಮತ್ತು ದೋಷನಿವಾರಣೆಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ತೀರ್ಮಾನ
ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಟ್ಯೂನಿಂಗ್ ಜಾವಾ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆ ಆಪ್ಟಿಮೈಸೇಶನ್ನ ಒಂದು ನಿರ್ಣಾಯಕ ಅಂಶವಾಗಿದೆ. ವಿವಿಧ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ಗಳು, ಟ್ಯೂನಿಂಗ್ ಪ್ಯಾರಾಮೀಟರ್ಗಳು ಮತ್ತು ಮೇಲ್ವಿಚಾರಣಾ ತಂತ್ರಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಲು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನೀವು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಉತ್ತಮಗೊಳಿಸಬಹುದು. ಜಿಸಿ ಟ್ಯೂನಿಂಗ್ ಒಂದು ಪುನರಾವರ್ತಿತ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ ಮತ್ತು ಅತ್ಯುತ್ತಮ ಫಲಿತಾಂಶಗಳನ್ನು ಸಾಧಿಸಲು ನಿರಂತರ ಮೇಲ್ವಿಚಾರಣೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆ ಅಗತ್ಯವಿರುತ್ತದೆ ಎಂಬುದನ್ನು ನೆನಪಿಡಿ. ಡೀಫಾಲ್ಟ್ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ, ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ, ಮತ್ತು ನಿಮ್ಮ ಅಗತ್ಯಗಳಿಗೆ ಉತ್ತಮವಾಗಿ ಸರಿಹೊಂದುವದನ್ನು ಕಂಡುಹಿಡಿಯಲು ವಿವಿಧ ಕಾನ್ಫಿಗರೇಶನ್ಗಳೊಂದಿಗೆ ಪ್ರಯೋಗ ಮಾಡಿ. ಸರಿಯಾದ ಕಾನ್ಫಿಗರೇಶನ್ ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆಯೊಂದಿಗೆ, ನಿಮ್ಮ ಜಾಗತಿಕ ವ್ಯಾಪ್ತಿಯನ್ನು ಲೆಕ್ಕಿಸದೆ, ನಿಮ್ಮ ಜಾವಾ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸಮರ್ಥವಾಗಿ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.