Java의 프로그램 실행 메커니즘 및 오류 분석
이 글에서는 주로 JVM(Java Virtual Machine) 관련 내용과 Java 프로그램의 실행 메커니즘 및 오류 분석을 소개합니다.
JVM(Java Virtual Machine) 다양한 방식(소프트웨어 또는 하드웨어)으로 구현할 수 있는 컴퓨팅 장치에 대한 사양입니다. 가상 머신용 명령어 세트를 컴파일하는 것은 마이크로프로세서용 명령어 세트를 컴파일하는 것과 매우 유사합니다. JVM(Java Virtual Machine)에는 바이트코드 명령어 세트, 레지스터 세트, 스택, 가비지 수집 힙 및 저장 방법 필드가 포함되어 있습니다.
JVM(Java Virtual Machine)은 Java 코드를 실행할 수 있는 가상의 컴퓨터입니다. 인터프리터가 JVM 사양에 따라 특정 컴퓨터로 이식되는 한 컴파일된 모든 Java 코드는 해당 시스템에서 실행되도록 보장될 수 있습니다.
1. Java 가상 머신을 사용하는 이유
Java 언어의 매우 중요한 특징은 플랫폼으로부터의 독립성입니다. 이 기능을 달성하려면 Java 가상 머신을 사용하는 것이 핵심입니다. 일반적인 고급 언어를 다른 플랫폼에서 실행하려면 최소한 다른 타겟 코드로 컴파일해야 합니다. Java 언어 가상 머신이 도입된 이후에는 다른 플랫폼에서 실행될 때 Java 언어를 다시 컴파일할 필요가 없습니다. Java 언어 사용 모델 Java 가상 머신은 특정 플랫폼과 관련된 정보를 보호하므로 Java 언어 컴파일러는 Java 가상 머신에서 실행되는 대상 코드(바이트코드)만 생성하면 되며 수정 없이 여러 플랫폼에서 실행할 수 있습니다. JVM(Java Virtual Machine)은 바이트코드를 실행할 때 바이트코드를 특정 플랫폼에서 실행하기 위한 기계 명령어로 해석합니다.
Java 실행 메커니즘
Java 프로그램 실행은 쓰기, 컴파일, 실행의 세 단계를 거쳐야 합니다.
작성이란 Java 개발 환경에서 프로그램 코드를 입력하고 최종적으로 .java라는 접미사를 붙여 Java 소스 파일을 만드는 것을 의미합니다.
컴파일이란 소스 파일 문제를 해결하기 위해 Java 컴파일러를 사용하는 프로세스를 의미합니다. 컴파일 후에는 최종적으로 실행 파일을 생성하는 C 언어와 달리 접미사 .class가 붙은 바이트코드 파일이 생성됩니다.
실행이란 Java 인터프리터를 사용하여 바이트코드 파일을 기계어 코드로 변환하고 실행하여 결과를 표시하는 것을 의미합니다.
바이트코드 파일은 특정 기계 환경 및 운영 체제 환경과 관련이 없는 중간 코드입니다. 바이너리 파일은 자바 소스 파일이 자바 컴파일러에 의해 컴파일된 후 생성된 객체 코드 파일입니다. 프로그래머나 컴퓨터 모두 바이트코드 파일을 직접 읽을 수는 없으며 전용 자바 인터프리터에 의해 해석되고 실행되어야 합니다. 따라서 자바는 컴파일을 기반으로 해석되고 실행되는 언어입니다.
Java 인터프리터는 특정 하드웨어 환경 및 운영 체제 플랫폼에서 실행을 위해 바이트코드 파일을 기계어 코드로 변환하는 역할을 담당합니다. 따라서 Java 프로그램은 기존 운영 체제 플랫폼에서 직접 실행할 수 없으며 Java Virtual Machine이라는 소프트웨어 플랫폼에서 실행되어야 합니다.
JVM(Java Virtual Machine)은 Java 프로그램을 실행하기 위한 소프트웨어 환경이며 Java 인터프리터는 Java Virtual Machine의 일부입니다. Java 프로그램을 실행하면 JVM이 먼저 시작된 다음 Java 바이트코드를 해석하고 실행하는 역할을 담당하며 Java 바이트코드는 JVM에서만 실행할 수 있습니다. 이러한 방식으로 JVM을 사용하면 특정 하드웨어 플랫폼 및 운영 체제 환경에서 Java 바이트코드 프로그램을 분리할 수 있습니다. 하드웨어 플랫폼과 운영 체제 환경은 바이트코드 파일이 생성된 플랫폼을 고려할 필요가 없습니다. JVM은 서로 다른 소프트웨어와 하드웨어 플랫폼 사이의 특정 차이점을 숨겨 진정한 바이너리 코드 수준의 크로스 플랫폼 이식을 달성합니다. JVM은 Java의 플랫폼 독립적인 기반입니다. Java의 크로스 플랫폼 기능은 JVM에서 Java 프로그램을 실행하여 달성됩니다.
Java 언어의 "한 번 작성하면 어디서나 실행" 접근 방식은 대부분의 최신 고급 프로그래밍 언어가 서로 다른 시스템에 대해 서로 다른 기계어 코드를 생성하기 위해 컴파일해야 하는 문제, 즉 하드웨어의 이기종 문제를 효과적으로 해결합니다. 환경 및 운영 플랫폼을 통해 프로그램 개발, 유지 관리 및 관리에 따른 오버헤드를 크게 줄일 수 있습니다.
Java 프로그램은 JVM을 통해 크로스 플랫폼 기능을 구현할 수 있지만 JVM은 크로스 플랫폼이 아닙니다. 즉, 서로 다른 운영 체제의 JVM은 Windows 플랫폼의 JVM을 Linux에서 사용할 수 없으며 그 반대의 경우도 마찬가지입니다.
오류 분석을 실행하는 JAVA 프로그램
일반적으로 가동 중인 대규모 프로젝트에서는 기껏해야 다음과 같은 문제가 발생할 수 있습니다.
1. 비정상적인 CPU 사용량
1) 확인 CPU 사용량, 대상 프로세스의 사용량, 그리고 각 코어의 사용량을 살펴보세요. 단일 스레드 문제인지 스레드 풀 문제인지 찾는 데 도움이 될 수 있습니다.
2) 가끔 프로그램이 일정 시간 동안 정상적으로 실행되었다가 갑자기 CPU가 수직으로 올라가는 경우가 있는데, 이는 프로그램의 잠금 현상과 관련이 있을 수 있습니다(잠금 시간이 짧은 경우에는 더 좋습니다). cas+yield를 시도하여 스핀 잠금 구현)
3) 교착 상태가 발생하는 경우 호출 스택을 직접 내보내 문제에 대한 해결책을 찾습니다.
2. 비정상적인 메모리
1) 메모리 누수, 말할 것도 없이 스택을 덤프하여 문제를 찾아보세요
2) 잦은 GC도 성능 저하로 이어질 수 있습니다. 프로그램에서 GC가 자주 발생하는 경우, 새로운 세대의 크기를 늘려도 문제가 해결되지 않으면 주의해야 합니다. 임시 개체 생성(메모리의 반복 적용을 방지하기 위해 개체 풀 기술을 사용할 수 있음)
3. 특정 작업자 스레드의 예기치 않은 종료
4. 비정상적인 IO
1) 열린 파일 확인, IO 작업 점유, 디스크 사용량. df iostat 등의 명령어를 사용하면 됩니다.
2) 모니터링 및 네트워크 사용량을 점유하는 프로그램이 있는지 확인하려면 netstat 등의 명령어를 사용하면 됩니다.
도구를 사용하여 오류 분석
1 .jmap
jmap pid 기본적으로 JAVA 보기 프로세스 내 메모리 사용량 관련 정보
jmap -histo pid 메모리의 활성 인스턴스 수 확인
jmap -dump:format=b,file=(file 이름) pid 자바 프로그램 메모리를 완전히 내보냅니다. 전체 분석은 3가지 과정으로 나누어 프로그램 초기화 후 jmap -dump:format=b,file=a.bin을 1회 실행하고, 메모리 사용량이 늘어나기 시작하면 1회 실행하고, 최종적으로 도달한 후 다시 실행한다. JHat 또는 타사 도구를 사용하여 덤프 파일을 엽니다.
3.jstack 또는 JCONSOLE
기본적으로 프로세스 호출 스택 정보를 보고 IO 시간 초과, 교착 상태 또는 기타 상황을 분석할 수 있습니다. 프로그램에 이상이 발생할 때 분석해야 하는 정보는 문제를 찾아 해결하는 데 도움이 될 수 있습니다.
jstat -gc pid gaptime GC 관련 정보 보기
jstat -compiler pid 실시간 컴파일 정보 보기
4.kill -3
위와 동일, 개발 도구가 없는 서버에 적합 콜 스택 정보 및 일부 GC 정보를 출력할 수 있습니다.
5.iftop 네트워크 포트 보기
네트워크 인바운드 및 아웃바운드 트래픽과 대상 서버 간의 트래픽을 확인하여 공격에 의한 것인지 문제를 해결하는 데 도움이 됩니다.
pstack 가상 머신 스택
은 일반적으로 사용되는 gdb를 설치해야 합니다. 특정 가상 머신 수준 오류가 발생할 때 c/C++ 프로그램을 확인하는 데 사용됩니다.
요약
위 내용은 Java의 프로그램 실행 메커니즘 및 오류 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
