목차
(2) 수집 사용을 최적화하십시오
(3) 동시성 및 스레드 최적화
(4) JVM 매개 변수 튜닝
Java java지도 시간 Java 성능 최적화 및 프로파일 링 기술

Java 성능 최적화 및 프로파일 링 기술

Jul 31, 2025 am 03:58 AM
php java

성능 분석 도구를 사용하여 병목 현상을 찾고 개발 및 테스트 단계에서 VisualVM 또는 JProfiler를 사용하며 생산 환경에서 Async-Profiler에 우선 순위를 부여합니다. 2. 객체 생성을 줄이고, 개체를 재사용하고, StringBuilder를 사용하여 문자열 스 플라이 싱을 교체하고, 적절한 GC 전략을 선택하십시오. 3. 장면에 따라 수집 사용을 최적화하고 초기 용량을 선택하고 사전 설정합니다. 4. 동시성 최적화, 동시 컬렉션을 사용하고, 잠금 세분화를 줄이고, 스레드 풀을 합리적으로 설정하십시오. 5. JVM 매개 변수 조정, 합리적인 힙 크기 및 저도 가비지 수집기를 설정하고 GC 로그를 활성화합니다. 6. 코드 레벨에서 반사를 피하고, 래퍼 클래스를 기본 유형으로 바꾸고, 초기화를 지연시키고, 최종 및 정적을 사용하십시오. 7. JMH MicroBenchmark 테스트 및 APM 도구와 결합 된 지속적인 성능 테스트 및 모니터링, 로그 및 덤프 파일을 정기적으로 분석합니다. Java 성능 최적화를 먼저 측정 한 다음 최적화해야하며 시스템 성능을 효과적으로 향상시키기 위해 도구와 방법이 정확합니다.

Java 성능 최적화 및 프로파일 링 기술

Java 성능 최적화 및 성능 분석은 응용 프로그램 응답 속도를 개선하고 자원 소비를 줄이며 시스템 안정성을 보장하기위한 핵심 링크입니다. 특히 동시성이 높고 데이터 볼륨이 큰 시나리오에서 합리적인 최적화 전략은 시스템 성능을 크게 향상시킬 수 있습니다. 다음은 몇 가지 핵심 Java 성능 최적화 방향과 일반적으로 사용되는 성능 분석 기술입니다.

Java 성능 최적화 및 프로파일 링 기술

1. Positioning Posiparing Performance 병목 현상 : 성능 분석 도구 (프로파일 링 도구) 사용

최적화하기 전에 병목 현상을 먼저 배치해야합니다. 맹인 최적화는 종종 두 배의 노력으로 절반이 발생합니다. 일반적으로 사용되는 Java 성능 분석 도구는 다음과 같습니다.

  • jvisualvm / visualvm
    무료, 경량, JDK에 통합. CPU 및 메모리 사용을 모니터링하고 스레드 분석 및 힙 덤프 분석을 수행 할 수 있으며, 이는 예비 조사에 적합합니다.

    Java 성능 최적화 및 프로파일 링 기술
  • Jprofiler
    상업용 도구, 강력한 기능, 지원 CPU 샘플링, 메모리 분석, 스레드 교착 상태 감지, I/O 모니터링 등은 우호적 인 그래픽 인터페이스를 가지고 있습니다.

  • Yourkit
    또 다른 상용 성능 분석기는 생산 환경 샘플링에 적합한 원격 모니터링 및 메소드 수준 성능 추적을 지원합니다.

    Java 성능 최적화 및 프로파일 링 기술
  • 비동기 프로파일러
    샘플링을 기반으로 한 오픈 소스, 저지대 Linux 성능 분석 도구는 CPU, 메모리 할당 및 잠금 경쟁 분석을 지원하며, 이는 생산 환경에서 특히 사용하기에 적합합니다.

권장 사항 : 개발 및 테스트 단계에서 VisualVM 또는 JProfiler를 사용합니다. 시스템에 과도한 부담을 피하기 위해 생산 환경에서 비동기 프로파일러를 우선 순위를 정하십시오.


2. 주요 최적화 방향

(1) 객체 생성 및 GC 압력을 줄입니다

자주 객체 생성은 쓰레기 수거 (GC)의 부담을 증가시켜 일시 중지 시간이 증가합니다.

최적화 제안 :

  • 객체 풀 (예 : ThreadLocal Cache, Custom Pool)을 사용하여 개체를 재사용합니다 (짧은 수명주기 및 빈번한 생성이있는 개체에 적합).
  • 루프에서 임시 객체를 만드는 것을 피하십시오.
  • 문자열 스티칭 대신 StringBuilder 사용하십시오 (특히 루프에서).
  • 일시 중지 시간을 줄이려면 적절한 GC 전략 (예 : G1, ZGC, Shenandoah)을 선택하십시오.
 // 문자열 쓰기를 피하십시오. 결과 = "";
for (문자열 s : list) {
    결과 = s; // 매번 새 문자열 객체 생성}

// StringBuilder SB = New StringBuilder ()로 변경합니다.
for (문자열 s : list) {
    sb.append (들);
}

(2) 수집 사용을 최적화하십시오

컬렉션은 Java에서 가장 일반적으로 사용되는 구조이며 부적절한 사용으로 인해 성능 문제가 발생할 수 있습니다.

제안:

  • 장면에 따라 적절한 수집 유형을 선택하십시오.
    • ArrayList 임의의 액세스에 적합하며 LinkedList 중간 요소를 자주 개입/삭제할 때만 사용됩니다.
    • HashMap 빠르게 보이지만 용량 확장을 자주 피하기 위해 초기 용량 및로드 계수에주의를 기울입니다.
  • 동적 확장의 오버 헤드를 줄이기 위해 세트의 초기 용량을 사전 설정하십시오.
     List <string> list = new ArrayList <> (1000);
    지도 <문자열, 정수>지도 = New Hashmap <> (512);

(3) 동시성 및 스레드 최적화

멀티 스레드 프로그래밍에서 잠금 경쟁 및 컨텍스트 스위칭은 일반적인 성능 킬러입니다.

최적화 제안 :

  • 동시 래퍼 클래스 대신 Concurrent Collection ( ConcurrentHashMap , CopyOnWriteArrayList 등)을 사용하십시오.
  • 잠금 과립성을 줄이고 잠금 내에서 시간이 많이 걸리는 작업 (예 : I/O)을 피하십시오.
  • 자물쇠가없는 구조 (예 : AtomicInteger , LongAdder ) 사용을 고려하십시오.
  • 너무 많은 스레드로 인한 컨텍스트 전환의 오버 헤드를 피하기 위해 스레드 풀 크기를 합리적으로 설정하십시오.
     // CPU 집약적 : 스레드 수 ≈ CPU 코어 수 // I/O 집약적 : 실의 수는 적절하게 증가 할 수 있습니다. ExecutorService Executor = Executors.NewFixedThreadPool (runtime.getRuntime ().

(4) JVM 매개 변수 튜닝

합리적인 JVM 매개 변수 설정은 성능에 중요합니다.

주요 매개 변수 제안 :

  • 힙 크기 : -Xms-Xmx 동적 확장을 피하기 위해 동일한 값으로 설정됩니다.
  • 오른쪽 쓰레기 수집가를 선택하십시오.
    • G1GC : 낮은 대기 시간을 추구하는 큰 더미 (4G 이상)에 적합합니다.
    • ZGC/SHENANDOAH : 지연에 민감한 응용 분야 (JDK 11/12)에 적합한 초경량 일시 정지 (<10ms).
  • 쉬운 분석을 위해 GC 로그를 활성화하십시오.
     -xlog : gc*, gc heap = debug, gc compaction = info : file = gc.log : 시간, 태그

    3. 코드 레벨 성능 기술

    • 반사의 과도한 사용
      반사 성능이 낮고 최적화하기 어렵습니다. 필요한 경우 Method 개체를 캐시하거나 MethodHandle 사용할 수 있습니다.

    • 기본 유형을 사용하여 포장 클래스
      를 대체하십시오
      컬렉션에서 int 사용하는 것이 Integer 보다 낫고 IntStream 또는 fastutil 과 같은 타사 라이브러리를 통해 지원할 수 있습니다.

    • 초기화 및 게으른 하중이 지연
      대형 물체 또는 시간 소모적 인 작업의 경우 Supplier 또는 이중 점검 잠금 장치를 사용하여 게으른 하중을 달성하십시오.

    • finalstatic 사용한 최적화
      JVM은 final 필드 및 정적 방법에 대한 인라인 최적화 기회가 더 좋습니다.


    4. 성능 테스트 및 모니터링

    최적화는 일회성이 아니며 지속적인 모니터링 및 검증이 필요합니다.

    • JMH (Java MicroBenchmark 하네스)를 사용하여 잘못된 성능 측정을 피하기 위해 MicroBenchmark 테스트를 수행하십시오.
    • 생산 환경에서 실시간 모니터링을 위해 APM 도구 (예 : Skywalking, Pinpoint, New Relic)를 통합합니다.
    • GC 로그, 스레드 덤프 및 힙 덤프를 정기적으로 분석하십시오.

    기본적으로 그게 다야. Java 성능 최적화는 "마법"이 아니라 "과학": 먼저 측정 한 다음 최적화하십시오. 병목 현상을 먼저 한 다음 세부 사항 . 도구가 올바르게 사용되면 방향은 반으로됩니다.

    위 내용은 Java 성능 최적화 및 프로파일 링 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

키보드의 볼륨 키가 작동하지 않습니다 키보드의 볼륨 키가 작동하지 않습니다 Aug 05, 2025 pm 01:54 PM

먼저, CheckifTefnKeysettingISTINGINTERINGITERINGBOTHOLMEKEYALONEANDFN VOLUMEKEY, thentogglefnlockwithfn escifavailable.2. enterbios/uefiduringbootandenablefunctekysordisordablehotkeymodetoensurevolumeysarerecognized.3.updateOrreeinstalliodriv

Edge PDF 뷰어가 작동하지 않습니다 Edge PDF 뷰어가 작동하지 않습니다 Aug 07, 2025 pm 04:36 PM

TestHepdFinanotherAppTodeMineifTheissueiswithTheFileoredge.2

Break, 계속 및 Goto를 사용하여 Foreach 내에서 유량 제어를 마스터 링 Break, 계속 및 Goto를 사용하여 Foreach 내에서 유량 제어를 마스터 링 Aug 06, 2025 pm 02:14 PM

BreakexitsTheloopimmed SeeforFindingAtArget, 이상적으로 THEFIRSTMATCH.2.ContInuesKIPSTheCurrentitation, 유용한 ortipilteringItemSliketemporaryFiles.3.gotoJumpStoalabeledStatement, 허용 가능한 원형 곡물 류 횡단 부산물

하위 프로세스를 실행하는 예제로 이동하십시오 하위 프로세스를 실행하는 예제로 이동하십시오 Aug 06, 2025 am 09:05 AM

OS/EXEC 패키지를 사용하여 하위 프로세스를 실행하고 Exec.Command를 통해 명령을 작성하되 즉시 실행하지 마십시오. 2. .output ()로 명령을 실행하고 stdout을 잡으십시오. 종료 코드가 0이 아닌 경우 exec.exiterror를 반환하십시오. 3. .start ()를 사용하여 차단하지 않고 프로세스를 시작하고 .stdoutpipe ()와 결합하여 출력을 실시간으로 스트리밍하십시오. . 5. exec.exiterror는 좀비 프로세스를 피하기 위해 실패한 명령의 종료 코드와 STDERR을 얻으려면 처리되어야합니다.

자바에서 방법 과부하 및 메소드를 대체하는 방법을 설명 할 수 있습니까? 자바에서 방법 과부하 및 메소드를 대체하는 방법을 설명 할 수 있습니까? Aug 06, 2025 am 07:41 AM

방법 과부하 및 메소드 과부하는 Java에서 다형성을 구현하기위한 두 가지 메커니즘입니다. 1. 메소드 과부하는 같은 클래스에서 발생합니다. 컴파일 타임 다형성에 속하는 동일한 메소드 이름이지만 매개 변수 목록 (숫자, 유형 또는 순서)이 필요합니다. 리턴 유형은 다를 수 있지만 반환 유형만으로는 과부하 할 수 없습니다. 다른 액세스 수정 자 및 예외 선언이있을 수 있습니다. 2. 방법 재 작성은 상속 관계에서 발생합니다. 서브 클래스는 부모 클래스의 기존 메소드의 특정 구현을 제공합니다. 동일한 방법 서명이 필요하며 리턴 유형은 호환됩니다. 액세스 수정자는 더 엄격 할 수 없습니다. 그것은 런타임 다형성에 속합니다. 인스턴스 방법을 사용해야하며 @override 주석을 통해 올바른 다시 쓰기를 보장 할 수 있습니다. 두 사람은 함께 코드 가독성과 확장 성을 향상시킵니다.

복잡한 데이터 구조에 대한 중첩 Foreach 루프 최적화 복잡한 데이터 구조에 대한 중첩 Foreach 루프 최적화 Aug 06, 2025 pm 12:53 PM

중첩 된 Foreach 루프를 최적화하려면 먼저 중복 반복을 피해야하며 시간 복잡성을 O (n × M)에서 O (N M)로 감소시킬 수 있습니다. 둘째, 구조가 진정으로 계층 적이 아닌 경우 SelectMany와 같은 방법을 사용하여 데이터를 평평하게해야합니다. 셋째, 조건부 판단을 통해 미리 뛰어 다니거나 불필요한 처리를 건너 뛰십시오. 넷째, 검색 효율을 향상시키기 위해 사전 또는 해시 세트와 같은 적절한 데이터 구조를 선택하십시오. 다섯째, 작업이 독립적이고 시간이 많이 걸릴 때 평행을 사용하여 사용할 수 있습니다. 여섯째, 복잡한 논리를 독립적 인 방법 또는 쿼리로 추출하여 가독성과 유지 가능성을 향상시킵니다. 최적화의 핵심은 복잡성을 줄이고 데이터를 합리적으로 구성하며 항상 중첩의 필요성을 평가하고 궁극적으로 효율적이고 명확하며 확장 가능한 코드를 달성하는 것입니다.

효과적인 Java 예외 처리 전략 효과적인 Java 예외 처리 전략 Aug 05, 2025 pm 02:44 PM

usespecificexceptionsinsteadofgenericonesto handledifferenterRorconditionspreproprepressandavoidmaskingUnintenderDerrors.2.neverignoreCaughtexceptions; AlwaysLogorre-throwthem, andDocumentIntintentionalIngoreswithcomments.3.validateinputsearlyAndfailSfastByth

Docker와 함께 Kubernetes에 Java 응용 프로그램을 배포합니다 Docker와 함께 Kubernetes에 Java 응용 프로그램을 배포합니다 Aug 08, 2025 pm 02:45 PM

컨테이너화 된 Java 응용 프로그램 : Dockerfile 생성, Eclipse-Temurin : 17-Jre-Alpine과 같은 기본 이미지를 사용하고 JAR 파일을 복사하고 시작 명령을 정의하고 DockerBuild를 통해 이미지를 빌드하고 Dockerrun과 함께 로컬로 실행하십시오. 2. 이미지를 컨테이너 레지스트리로 푸시하십시오. Dockertag를 사용하여 이미지를 표시하고 DockerHub 및 기타 레지스트리로 푸시하십시오. 먼저 dockerlogin에 로그인해야합니다. 3. Kubernetes에 배포 : 쓰기 배포 .yaml 배포를 정의하려면 복제본, 컨테이너 이미지 및 리소스 제한 수를 설정하고 Service.yaml을 작성하여 작성하십시오.

See all articles