JVM (Java Virtual Machine) 및 크로스 플랫폼 원리 <br /> 나는 모든 사람들이 교차 플랫폼 기능을 가지고 있으며 "한 번에 편집하고 모든 곳에서 실행될 수 있다는 것을 알게되었습니다. 수정. 실행. 이것은 C 및 C ++와 관련이 있습니다.
그렇다면 크로스 플랫폼은 어떻게 구현됩니까? 여기에는 JVM (Java Virtual Machine)에 대해 이야기하는 것이 포함됩니다.
JVM은 소프트웨어이며 다른 플랫폼마다 버전이 다릅니다. 우리가 쓴 Java 소스 코드는 컴파일 후 Bytecode 파일이라는 .class 파일을 생성합니다. Java Virtual Machine은 바이트 코드 파일을 특정 플랫폼에서 기계 코드로 변환 한 다음 실행해야합니다. 다시 말해, 해당 JVM이 다른 플랫폼에 설치되는 한 바이트 코드 파일을 실행하고 우리가 쓴 Java 프로그램을 실행할 수 있습니다.
이 과정에서 우리가 쓴 Java 프로그램은 JVM의 "중간 계층"을 통해 다른 플랫폼에서 실행할 수 없었으며, 이는 "한 번에 컴파일하고 어디서나 실행하는"목적을 달성 할 수 있습니다.
JVM은 "브리지"및 "미들웨어"로 Java 코드가 먼저 바이트 코드 파일로 컴파일 된 다음 바이트 코드 파일을 기계 언어로 변환하여 Java 프로그램의 실행을 달성합니다. 목적.
참고 : 컴파일 결과는 기계 코드를 생성하는 것이 아니라 바이트 코드를 생성하는 것입니다. 다른 플랫폼에서 컴파일 및 생성에 의해 생성 된 바이트 코드는 동일하지만 JVM으로 번역 된 기계 코드는 다릅니다.
따라서 편집 결과는 기계 코드가 아니기 때문에 Java 프로그램을 실행하려면 JVM 지원이 있어야하며 실행 전에 JVM에 의해 다시 번역되어야합니다. Java 프로그램을 실행 파일 (예 : .exe)에 패키지하더라도 여전히 JVM 지원이 필요합니다.
참고 : JVM이 아닌 크로스 플랫폼 Java 프로그램. JVM은 C/C ++로 개발되었으며 컴파일 된 기계 코드는 다른 플랫폼에서 다른 버전을 설치할 수 없습니다.
JVM의 실행 효율성에 대해
지난 몇 년간의 Java가 발사 된 사람들은 다수의 의견이 전속력으로 기계 코드를 실행하는 것보다 훨씬 느립니다.
그러나 JVM에는 인스턴트 컴파일로 알려진 프로세스 인 가장 자주 사용되는 Bytecode를 기계 코드로 변환하고 저장하는 옵션이 있습니다. 이 방법은 실제로 매우 효과적이며 Microsoft의 .NET 플랫폼에서 가상 머신을 사용하게되었습니다.
시기 적절한 컴파일러는 현재 매우 뛰어나며 기존 컴파일러의 경쟁자가되었으며, 경우에 따라 JVM이 런타임 정보를 모니터링 할 수 있기 때문에 전통적인 컴파일러를 능가합니다. 예를 들어, 인스턴트 컴파일러는 자주 사용되는 코드를 모니터링하고 최적화하여 기능 호출 (즉, "임베디드")을 제거 할 수 있습니다.
그러나 Java에는 C/C ++가없는 추가 오버 헤드가 있으며 주요 응용 프로그램은 느려집니다. 예를 들어 Java는 플랫폼 독립적 인 그리기 방법을 채택하며 GUI 프로그램 (클라이언트 프로그램)의 실행은 느리게 진행됩니다.
클라이언트 시장의 실패
Java의 GUI 라이브러리는 우수하지 않으며 인터페이스는 친숙하지 않으며 대부분의 사용자는 비교적 크게 소비되지 않으며 대규모 데이터 애플리케이션 및 복잡한 기능의 성능이 걱정됩니다.
더 용납 할 수없는 것은 Microsoft가 자체 관심사를 나누고 SUN이 더 이상 JVM을 설치하기 전에 JVM을 설치하고 올바르게 설정해야합니다 그러나 그러나 당신은 그가 JVM에 대해 알고 설정을 올바르게 설치할 것을 기대할 수 있습니까?
JVM을 프로그램에 통합하고 자동으로 설치하고 설정하고 사용자 개입을 허용하지 않지만 프로그램보다 훨씬 큰 JVM과 함께 제공 하시겠습니까? 소프트웨어가 수천 개의 소프트웨어를 수행하는 것이 허용 될 수 있습니다. 디스크 공간 낭비는 얼마입니까?
따라서 시장에서 직접 출시 된 일반 사용자를위한 클라이언트 프로그램은 Java에서 개발 된 대부분의 고객이 컴퓨터의 내부 직원이 사용합니다. 클라이언트 개발에 참여하려면 Window 클라이언트 개발에 큰 이점이있는 C/C ++ 및 .NET를 배우는 것이 좋습니다.
시장에 소개하기에 바람직하지 않은 여러 가지 이유가 있으며 일반 사용자가 허용합니다. 그러나 다시 고객 개발은 Java의 원래 의도가 아니 었습니다.
Java 클래스 및 객체 개념
Java는 객체 지향 프로그래밍 언어입니다.
Java의 클래스는 C 언어로 업그레이드 된 구조 버전으로 간주 될 수 있습니다. 구조는 다른 멤버 (변수)를 포함 할 수있는 구성된 데이터 유형이며, 각 멤버의 데이터 유형은 구조를 통해 정의 될 수 있으며, 각 변수는 동일한 속성을 갖습니다. 예를 들어:
<stdio.h> int main () {// int stude int stude; / 작동 구조의 구성원 STU1.Name = "Xiao Ming"; 이름, stu1.age, stu1.score); 실행 결과 :
Xiao Ming의 나이는 15이고 그의 성적은 92.500000입니다.
Java의 클래스는 또한 데이터 유형을 구성하는 유형이지만 클래스를 통해 정의 된 변수는 "개체"라고도합니다. 예를 들어:
공개 클래스 데모 {public static void main (string [] args) {// 클래스 키워드 클래스를 통해 클래스를 정의합니다 포함 된 함수 void says () {system.out.println (이름 + " + age +", 점수는 " + score)}; STU1 = 새로운 키워드가 사용되어야합니다. );}} 실행 결과 :
Xiao Ming의 나이는 15이고 그의 성적은 92.5입니다.
C 언어에서 구조 변수의 정의는 구조 이름과 메모리 공간에 의해 완료 될 수 있지만, Java에서는 클래스를 통한 변수를 정의하는 것은 메모리 공간 만 할당되지 않으며 새로운 키워드는 메모리를 완료해야합니다. 공간. 배포.
유추는 도면과 비교할 수 있고, 객체는 부품과 비교할 수 있으며, 도면은 부품의 매개 변수와 그들이 수행하는 작업이 동일한 특성을 가진 부품을 생성 할 수 있으며 다른 도면은 다른 유형의 부품을 생성 할 수 있습니다.
Java에서는 새로운 키워드를 사용하여 클래스를 통해 객체를 만들 수 있습니다.
참고 :이 클래스는 설명을 수행하고 메모리 공간을 차지하지 않는 도면 일뿐입니다.
클래스에 포함 된 변수와 함수는 특정 이름을 가지고 있으며 (일반적으로 멤버 변수라고도 함), 메소드, 속성 및 메소드는 클래스의 구성원이라고합니다.
객체 지향 프로그래밍 (OOP)
클래스는 일반적인 개념입니다. Java, C ++, C#및 PHP와 같은 많은 프로그래밍 언어에는 클래스가 있으며 객체는 클래스를 통해 만들 수 있습니다. 클래스는 업그레이드 된 버전의 구조물로 간주 될 수 있습니다. 젊은 세대의 C 언어는 C 언어의 단점을보고, 구조의 아이디어를 상속하고, 프로그래머가 크고 중간 정도를 개발하거나 확장 할 수 있도록 업그레이드했습니다. 크기의 크기의 프로젝트. 더 쉽습니다.
Java, C ++ 및 기타 언어는 클래스 및 객체를 지원하기 때문에 이러한 언어로 된 프로그램을 작성하는 것을 객체 지향 프로그래밍이라고도하며 이러한 언어를 객체 지향 프로그래밍 언어라고도합니다. C 언어는 클래스와 객체의 개념을 지원하지 않기 때문에 프로세스 지향 프로그래밍 언어라고합니다.
실제로 객체 지향은 프로세스 지향 업그레이드 일뿐입니다.
C 언어에서 특정 함수를 완료하는 재사용 된 코드 블록은 함수로 정의 될 수 있으며 함수 클래스의 함수는 헤더 파일로 선언되며 다른 유형의 함수는 다른 헤더 파일에 선언되어 함수를 더 잘 관리합니다. 글을 쓰고 전화하기 쉽습니다.
Java에서 특정 함수를 완료하는 코드 블록은 메소드로 정의 될 수 있으며 유사한 함수를 가진 메소드는 클래스, 즉 소스 파일에서 정의 될 수 있습니다 (소스 파일은 하나의 공개 클래스 만 포함 할 수 있기 때문에). 여러 소스 파일은 폴더에 위치 할 수 있는데, 여기에는 패키지라는 특정 이름이 있습니다.
위의 것은 C ++이고 Java는 다음과 같습니다.
객체 지향 프로그래밍은 소프트웨어 실행 효율성에서 절대적으로 이점이 없습니다. 주요 목적은 프로그래머가 코드를 구성하고 관리하고 프로그래밍 아이디어를 신속하게 정렬하며 프로그래밍 아이디어에 혁신을 가져 오는 것입니다.