Java 플랫폼 독립 언어인 이유는 무엇입니까?

게시 됨: 2021-02-08

목차

소개

Java는 탄생 이후 다른 모든 프로그래밍 언어들 사이에서 엄청난 인기를 얻었습니다. 그리고 이렇게 폭발적인 반응을 보이는 이유는 독특한 기능을 제공하는 능력 때문입니다. Java 구문은 C++와 거의 유사하지만 C++보다 훨씬 더 많은 기능을 제공합니다.

객체 지향 프로그래밍(OOP)의 가용성으로 인해 Java는 당시 다른 모든 언어와 차별화되었습니다. Java는 OOP를 핵심으로 사용하도록 개발되었으며 가장 많이 사용되는 언어 중 하나였습니다. 이 개념은 재사용성과 원활한 실행을 증가시킵니다. 이 순간 우리는 “왜 사물을 사용해야 합니까?”라는 질문이 머릿속에 떠오를 수 있습니다.

Java의 객체는 유사한 메소드와 변수를 함께 묶는 C 언어의 구조와 유사합니다. 이와 함께 Java는 사용자가 개체를 구현하도록 권장하는 추상화, 캡슐화, 상속 및 다형성도 제공합니다.

Java는 앱 개발, 웹 개발, 소프트웨어 도구 구축과 같은 많은 영역에서 지배적인 역할을 합니다. 또한 일을 더 쉽게 해주는 풍부한 수의 라이브러리가 있습니다. 또한 IDE의 가용성은 개발자의 관심을 얻는 데 중요한 역할을 합니다. Eclipse, IntelliJ, NetBeans와 같은 IDE는 많은 개발자가 자주 사용합니다.

자, 이제 토론을 시작하겠습니다.

그러나 먼저 플랫폼 독립성은 무엇을 의미합니까?. 이 질문에 대한 답을 얻으려면 코드를 컴파일할 때 어떤 일이 발생하는지 알아야 합니다.

코드 컴파일

우리는 코드를 작성할 때마다 상당한 가독성을 가질 수 있는 프로그래밍 언어의 구문을 따릅니다. 그리고 여기에는 단어, 구, 변수 이름, 메서드 이름 등이 거의 포함되어 있지 않습니다. 이 모든 것은 사람이 읽을 수 있고 사람이 이해할 수 있는 텍스트로 간주됩니다.

따라서 기계는 컴파일러를 사용하여 소스 코드를 기계 수준 언어라고도 하는 기계 판독 가능한 코드로 변환합니다. 컴파일러는 CPU가 쉽게 이해할 수 있도록 특정 프레젠테이션에서 기계 수준 코드를 빌드하여 원활하게 실행할 수 있습니다.

이 기계 수준 언어 구축은 프로그래밍 언어와 운영 체제마다 다릅니다. 예를 들어, c/c++는 다른 운영 체제에서 실행 중인 두 시스템에 대해 동일하지 않은 .exe 파일을 생성합니다.

그리고 여기서 문제가 발생합니다!

기계 수준 언어가 각 운영 체제마다 다를 때 두 시스템이 동일한 운영 체제에서 작동하지 않는 한 다른 기계에서 컴파일된 코드를 새 기계에서 실행할 수 없습니다. 이것은 많은 프로그래머와 개발자에게 쓰레기처럼 느껴집니다.

그러나 Java는 일을 더 쉽게 만들고 Java에는 이에 대한 솔루션이 있습니다. 시작하자.

Java는 플랫폼에 독립적입니다.

그렇다면 자바에서 코드를 컴파일하면 어떻게 될까요?

"javac filename.java" 문을 입력하거나 Java로 코드를 컴파일할 때마다 javac는 코드를 컴파일합니다. 그리고 Byte Code라는 중간 코드를 생성합니다.

이것은 자바가 모든 다른 프로그래밍 언어 사이에서 차이를 만드는 곳입니다. 바이트 코드로 간주되는 .class 파일을 생성합니다. 반면 c/c++와 같은 언어는 컴파일될 때 기본적으로 실행 가능한 코드를 생성하므로 플랫폼에 종속됩니다.

잠깐, 축하하기에는 너무 이르다. 이 바이트 코드는 실행할 수 없습니다. 이 바이트 코드를 실행하려면 변환기가 필요합니다. 그리고 JVM이 이 일을 합니다. 일반적으로 JVM은 컴퓨터의 주 메모리에 있습니다. Java Virtual Machine은 인터프리터 역할을 한 다음 javac에서 생성한 바이트 코드를 실행합니다.

이제 완료되었습니다. 코드가 성공적으로 실행됩니다.

그렇다면 자바는 어떻게 혼자서 모든 것을 관리할 것인가?

그리고 대답은 JVM 때문입니다. 소스 코드 컴파일에 의해 생성된 바이트 코드는 모든 운영 체제에서 실행되지만 시스템에 존재하는 JVM은 운영 체제마다 다릅니다. 이것이 자바가 플랫폼 독립적인 프로그래밍 언어로 간주되는 방식입니다.

제대로 이해하기 위해 JVM의 구조와 동작을 이해하자.

JVM 아키텍처

JVM은 Java 런타임 환경의 일부이며 .java 파일을 .class 파일로 변환하는 역할을 합니다. 자바 코드를 컴파일할 때 JVM은 소스 코드에서 메인 메소드를 호출합니다.

JVM 아키텍처

클래스로더

자바 가상 머신의 하위 시스템입니다. .class 파일을 로드하고 예외가 있는지 확인하며 이것이 런타임 예외가 거의 없는 이유입니다. 그리고 존재하는 변수와 메소드에 대한 메모리 할당을 확인한 후 변수와 배열에 기본값을 할당합니다. 또한 코드에 있는 정적 메서드나 변수를 실행합니다.

JVMm에는 3개의 내장 클래스 로더, 부트스트랩 클래스 로더, 확장 클래스 로더, 애플리케이션 클래스 로더가 있습니다.

JVM의 메모리 영역

메소드/클래스 영역

클래스 이름, 메서드 이름, 변수와 같은 정보를 저장합니다. 클래스의 모든 메서드와 변수에 대한 공유 리소스입니다.

더미

힙 영역에 저장된 모든 데이터의 정보를 저장합니다.

JVM 언어 스택

스택 프레임/프레임이라고도 하는 블록에 정보를 저장합니다. 이 블록은 함수 호출이 있을 때 현재 정보를 저장하고 지역 변수를 저장하며 스레드 관리에서도 지배적인 역할을 합니다.

PC 레지스터

현재 실행 중인 명령어의 주소를 저장합니다. 다중 스레드 실행 상황에서 유용합니다.

네이티브 메소드 스택

사용된 기본 메소드의 모든 정보를 저장합니다.

실행 엔진

실행 엔진은 바이트 코드를 실행하고 연결할 수 없거나 참조할 수 없는 개체에 할당된 메모리를 제거합니다. 실행 엔진의 인터프리터는 스트림에서 바이트 코드를 읽고 한 줄씩 해석하여 바이트 코드를 실행합니다.

또한 JIT 컴파일러(Just In Time Compiler)라는 흥미로운 부분이 있습니다. 여기에서 메서드에 대한 기본 실행 코드를 생성하므로 여러 함수 호출이 있는 경우 JVM이 이를 다시 해석할 필요가 없으며 오히려 기본 실행 코드를 직접 사용합니다. 따라서 실행 성능이 향상됩니다.

네이티브 메소드 인터페이스

이 인터페이스는 C/C++와 같은 다른 언어로 구현된 응용 프로그램과 상호 작용하기 위해 Java에서 사용됩니다. 상호 작용은 양방향이며 JVM이 해당 응용 프로그램을 호출하거나 해당 응용 프로그램에서 호출할 수 있습니다.

네이티브 메소드 라이브러리

실행 엔진에서 사용할 수 있는 모국어 라이브러리를 추적합니다.

이제 JVM의 아키텍처를 이해했으므로 다시 논의로 돌아가겠습니다. 따라서 이 JVM은 운영 체제마다 다르지만 해당 JVM에서 생성된 출력은 제공된 동일한 바이트 코드에 대해 동일합니다.

또한 읽기: Java 프로젝트 아이디어 및 주제

세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.

결론

우리는 Java의 몇 가지 고유한 기능을 살펴보고 C/C++와 같은 언어로 코드를 컴파일할 때 어떤 일이 발생하는지 이해하고 기본적으로 실행 가능한 코드와 바이트 코드의 차이점을 이해했습니다. Java가 플랫폼 독립적인 언어로 간주되는 이유에 대한 설명을 살펴보고 JVM이 Java의 플랫폼 독립성 뒤에 있는 이유를 이해했습니다. 더 나은 이해를 위해 JVM 아키텍처를 살펴보았습니다.

Java가 플랫폼에 독립적인 이유를 알았으므로 이제 Java의 다른 고유한 기능을 탐색하고 활용을 시작하십시오!

Java, 전체 스택 소프트웨어 개발에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 9+ 시간의 엄격한 교육을 제공하는 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 Executive PG 프로그램을 확인하십시오. 프로젝트 및 과제, IIIT-B 동문 상태, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

다른 언어에 비해 Java의 장점은 무엇입니까?

Java는 다른 언어에 비해 많은 장점이 있습니다. Java가 플랫폼에 독립적이라는 가장 큰 장점부터 시작하겠습니다. Java 코드는 모든 하드웨어 플랫폼, 운영 체제 및 브라우저에서 실행할 수 있습니다. 모든 장치에서 실행할 수 있습니다. 즉, Java로 애플리케이션을 작성하면 모든 장치에서 실행할 수 있습니다. 그것만큼 간단합니다! 또한 일단 코드를 작성하면 버그를 디버그하고 수정하기가 매우 쉽습니다. 마지막으로 Java는 객체 지향입니다. 즉, 더 작은 프로그램과 코드를 사용해야 합니다. 이렇게 하면 코드 작업이 더 쉬워집니다. 수정이 필요한 경우 코드에서 오류가 발생하기 쉽습니다. 멀티스레딩, 메모리 관리, 플랫폼 독립적, 보안, 가상 머신, 즉 바이트코드, 컬렉션 프레임워크, 가비지 수집기, 계층화된 아키텍처 등과 같은 기능이 있습니다.

Java가 플랫폼에 독립적인 이유는 무엇입니까?

Java는 가상 머신을 사용하기 때문에 플랫폼에 독립적입니다. Java 프로그래밍 언어와 모든 API는 바이트 코드로 컴파일됩니다. 바이트코드는 사실상 플랫폼 독립적입니다. 가상 머신은 다른 플랫폼에 대한 바이트 코드 간의 차이점을 처리합니다. 따라서 Java에 대한 런타임 요구 사항은 매우 적습니다. Java 가상 머신은 모든 하드웨어 관련 문제를 처리하므로 다른 하드웨어에 대해 코드를 컴파일할 필요가 없습니다.

Java에서 자동 가비지 수집이란 무엇입니까?

자동 가비지 수집은 프로그래머가 코드를 작성할 필요 없이 가비지 수집기가 자동으로 실행되는 가비지 수집 기술입니다. Java에서 가비지 수집은 Java Virtual Machine을 특수 모드로 설정하여 수행됩니다. 가비지 수집기는 기회가 있을 때 실행됩니다. 일부 가비지 수집기는 stop-world 접근 방식을 사용하며 Java Virtual Machine은 가비지 수집을 수행하기 위해 프로그램 실행을 중지해야 합니다. Garbage Collection은 쉬운 개념이 아니지만, 한 번 얻고 나면 뒤돌아보지 않습니다. 그리고 Java의 가비지 컬렉션은 가장 이해하기 쉬운 것 중 하나입니다.