Java의 쓰레기 수집은 어떻게 작동하고 어떻게 최적화 할 수 있습니까?
Java의 쓰레기 수집 이해
Java의 쓰레기 수집 (GC)은 더 이상 프로그램에서 도달 할 수없는 객체가 추천하는 자동 메모리 관리 시스템입니다. 그것은 수동 메모리 할당 및 거래의 부담으로부터 개발자를 완화시켜 메모리 누출과 매달려 포인터를 방지합니다. 이 과정에는 일반적으로 세 단계가 포함됩니다.
- 마킹 : GC는 여전히 도달 할 수있는 객체를 식별합니다. 루트 객체 세트 (로컬 변수, 정적 변수 및 레지스터)에서 시작하여 객체 그래프를 가로 지르고 각각 도달 할 수있는 객체를 표시합니다.
- 스윕 : GC는 객체 (
- intrict)를 식별합니다. 물체가 더 가까워지면서 메모리 조각화를 줄입니다. 이것은 메모리 할당 성능을 향상시킵니다.
쓰레기 수집 최적화
GC 최적화는 그것을 완전히 제거하는 것이 아닙니다. 불가능하고 바람직하지 않습니다. 대신 최적화는 GC를 조정하여 일시 정지 및 전반적인 오버 헤드를 최소화하는 데 중점을 둡니다. 이것은 다양한 전략을 통해 달성 될 수 있습니다.
- 올바른 쓰레기 수집기 선택 : Java는 다양한 GC 알고리즘을 제공합니다 (아래에서 논의 됨). 최적의 선택은 응용 프로그램의 특성 (예 : 처리량 대 낮은 대기 시간)에 따라 다릅니다.
-xx : useg1gc
(Garbage-First Garbage Collector)는 종종 많은 응용 분야에서 좋은 출발점입니다. - 힙 크기 튜닝 : 적절한 힙 크기를 설정하고 (
-xms
를 사용하여-xmx
). 힙이 너무 작아 GC주기가 자주 발생할 수 있지만 힙이 너무 커지면 메모리를 낭비하고 GC 일시 정지 시간을 증가시킬 수 있습니다. 힙 사용 모니터링은 올바른 균형을 찾는 데 중요합니다. - 개체 생성 최소화 : 생성 된 객체 수를 줄입니다. 가능할 때마다 객체를 재사용하면 (예 : 객체 풀 사용) GC 부하가 크게 줄어 듭니다.
- 메모리 누출 방지 : 메모리 누출을 식별하고 수정합니다. 정적 참조와 청취자의 정적 참조 및 불안한 사용은 일반적인 범인입니다.
- 약한 참조 사용 : 쓰레기 수집을 방지하지 않고 객체에 대한 참조를 유지 해야하는 상황에 대해
-
java.lang.ref를 사용하지 않고 객체에 대한 참조를 유지 해야하는 상황에 대해
- gueptring 및 모니터링을 정규적으로 프로세스하고 모니터링합니다. 병목 현상과 개선을위한 영역 (아래에서 더 자세히 설명).
Java에 사용되는 다른 쓰레기 수집 알고리즘은 무엇이며 각각의 강점과 약점은 무엇입니까?
다양한 가비지 컬렉션 알고리즘
Java는 각각 여러 GC Algorithms를 제공합니다. 트레이드 오프 :
- Serial GC : 간단한 단일 스레드 GC. 단일 코어 프로세서에서 실행되는 소규모 애플리케이션에만 적합합니다. 강점 : 단순하고 낮은 오버 헤드. 약점 : 멀티 코어 시스템 및 대규모 응용 프로그램에는 긴 일시 중지를 유발할 수 있습니다.
- 병렬 GC (처리량 수집기) : 는 여러 스레드를 사용하여 응용 프로그램 스레드와 동시에 쓰레기 수집을 수행합니다. 높은 처리량을 목표로합니다. 강점 : 높은 처리량. 약점 : 주요 컬렉션 중에 긴 일시 중지를 유발할 수 있습니다 (세계 정지 정지). 강점 : 낮은 일시 중지 시간. 약점 : 처리량을 줄이고 복잡해지면 단편화로 인해 메모리 소비가 증가 할 수 있습니다. Java 9 이후 감가 상각되었습니다.
- G1 GC (Garbage-First GC) : 큰 힙을 위해 설계된 서버 스타일 쓰레기 수집기. 힙을 지역으로 나누고 쓰레기가 가장 많은 지역의 쓰레기 수집을 우선시합니다. 강점 : 처리량과 일시 중지 시간 사이의 균형이 우수하며 큰 힙을 효율적으로 처리합니다. 약점 : 더 간단한 수집가보다 조정하기에 더 복잡 할 수 있습니다.
- z GC : 큰 힙을 위해 설계된 저속 시간 가비지 수집기. 일시 정지 시간을 최소화하기 위해 동시 마킹 및 복사 기술을 사용합니다. 강점 : 매우 낮은 일시 중지 시간, 큰 힙에 적합합니다. 약점 : 상대적으로 새롭고 성숙한 수집가에 비해 성능 제한이있을 수 있습니다.
- Shenandoah GC : 고유 한 동시 압축 알고리즘을 사용하는 저의 제한 시간 가비지 수집기. 강점 : 큰 힙이있는 경우에도 매우 낮은 일시 중지 시간. 약점 : 상대적으로 새롭고 성숙한 수집기에 비해 성능 제한이있을 수 있습니다.
GC 알고리즘의 선택은 응용 프로그램 성능에 크게 영향을 미칩니다. 실험 및 신중한 모니터링은 응용 프로그램에 가장 적합한 것을 찾는 데 필수적입니다.
Java 응용 프로그램에서 가비지 수집 성능 문제를 효과적으로 모니터링하고 문제 해결하는 방법은 무엇입니까?
가비지 컬렉션 모니터링 및 문제 해결
효과적인 모니터링 및 문제 해결은 GC 성능 문제를 식별하고 재조정하는 데 결정적입니다.
-
jstat
명령 줄 도구 :jstat
를 사용하는 몇 가지 도구와 기술은 도움이 될 수 있습니다. 활동 및 기타 JVM 메트릭. 힙 사용, GC 일시 중지 및 기타 성능 지표의 시각적 표현을 제공합니다. - JFF (Java Flight Recorder) 사용 : JFR은 적용 할 수있는 프로파일 링 기능을 제공하여 응용 프로그램 성능에 상당히 영향을 미치지 않으면 서 GC 활동에 대한 자세한 정보를 캡처 할 수 있습니다.
- GC 로그 분석 : 각 GC주기에 대한 자세한 정보를 제공하는 GC 로그를 생성하도록 JVM을 구성하는 것은 드물지만 영향력있는 GC 일시 정지를 식별하는 데 특히 유용합니다. 이러한 로그를 분석하면 성능 문제의 근본 원인을 정확히 찾아 낼 수 있습니다. gcviewer와 같은 도구는 이러한 로그를 시각화하고 분석하는 데 도움이 될 수 있습니다.
- 힙 덤프 : 힙 덤프 (
jmap
와 같은 도구 사용)를 사용하면 특정 시점에서 힙 상태를 분석 할 수 있습니다. 이것은 메모리 누출 및 기타 문제를 식별하는 데 도움이 될 수 있습니다. - 프로파일 링 도구 : 프로파일 링 도구 (YourKit 또는 Jprofiler와 같은 프로파일 링 도구)는 메모리 사용 및 GC 활동에 대한보다 심층적 인 분석을 제공 할 수 있으며, 과도한 메모리 소비하는 물체를 식별하거나 빈번한 GC주기에 기여하는
- 개체 재사용 : 새로운 것을 반복적으로 만들지 않고 가능할 때마다 재사용합니다. 물체 풀은 물체를 재사용하는 일반적인 기술입니다.
- 문자열 조작 : 문자열 연결을 염두에 두십시오.
stringbuilder
또는stringbuffer
를 사용하여 여러 문자열 연결에 대한 - 불필요한 객체 생성을 피하십시오 : 비정상적인 객체가 생성되는 영역에주의 깊게 검사하십시오.
- 효율적인 데이터 구조 : 응용 프로그램의 요구에 따라 적절한 데이터 구조를 선택하십시오. 올바른 데이터 구조를 사용하면 메모리 사용 및 성능에 큰 영향을 줄 수 있습니다.
- 리소스 관리 : 메모리 누출을 방지하기 위해 리소스 (스트림 및 연결과 같은) 올바르게 닫힙니다.
- 약한 참조 : 참조가 참조하더라도 물체를 수집 할 수 있도록 약한 참조를 사용합니다.
- 캐싱 : 캐시를 자주 액세스하기 위해 자주 액세스하는 데 필요한 숫자를 줄이기 위해 객체를 수집 할 수 있도록 약한 참조를 사용합니다. 리뷰 : 정기 코드 검토는 메모리 관리 및 객체 생성의 개선을위한 영역을 식별하는 데 도움이 될 수 있습니다.
를 결합하여, 기술을 결합하여, 기술을 조합하여, 기술을 동일하게 수행 할 수 있습니다. 병목 현상 및 문제 해결 문제를 효율적으로 해결합니다.
효율적인 Java 코드를 최소화하는 효율적인 Java 코드를 작성하는 데 가장 모범 사례는 무엇입니까?
효율적인 Java 코드를위한 모범 사례
GC 오버 헤드를 최소화하는 효율적인 Java 코드 작성에 대한 유효한 Java 코드 작성 사용법 :
이러한 모범 사례를 따르면 응용 프로그램에서 생성 된 쓰레기의 양을 크게 줄이고 GC 오버 헤드를 최소화하고 전반적인 성능을 향상시킬 수 있습니다. 일관된 모니터링 및 프로파일 링은 나머지 성능 병목 현상을 식별하고 해결하는 데 중요합니다.
위 내용은 Java의 쓰레기 수거는 어떻게 작동하며 어떻게 최적화 할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.
