Dopiero co zacząłem uczyć się języka Java i jestem zdezorientowany tematem niezależności platformy.
Czy „niezależność” nie oznacza, że kod Java powinien działać na dowolnej maszynie i nie wymaga instalowania specjalnego oprogramowania? Jednak JVM musi być obecny w maszynie.
Na przykład, musimy mieć kompilator Turbo C, aby skompilować kod źródłowy C / C ++, a następnie go wykonać. Maszyna musi mieć kompilator C.
Czy ktoś mógłby się spodobać, co oznacza określenie Java jako „niezależna od platformy”?
java
cross-platform
Spokój
źródło
źródło
.exe
plik. co najwyżej wymaga biblioteki wykonawczej (w.dll
pliku), a nie całego kompilatoraOdpowiedzi:
Zazwyczaj skompilowany kod jest dokładnym zestawem instrukcji, których CPU wymaga do „wykonania” programu. W Javie skompilowany kod to dokładny zestaw instrukcji dla „wirtualnego procesora”, który musi działać tak samo na każdej fizycznej maszynie.
Dlatego w pewnym sensie projektanci języka Java zdecydowali, że język i skompilowany kod będą niezależne od platformy, ale ponieważ kod ostatecznie musi działać na platformie fizycznej, zdecydowali się umieścić cały kod zależny od platformy w JVM.
Ten wymóg dotyczący maszyny JVM różni się od przykładu z Turbo C. Dzięki Turbo C kompilator będzie tworzył kod zależny od platformy i nie ma potrzeby tworzenia podobnej maszyny JVM, ponieważ skompilowany program Turbo C może być wykonywany bezpośrednio przez procesor.
W przypadku języka Java procesor wykonuje maszynę JVM, która jest zależna od platformy. Ta działająca maszyna JVM wykonuje następnie kod bajtowy Java, który jest niezależny od platformy, pod warunkiem, że dostępna jest maszyna JVM do wykonania na niej. Można powiedzieć, że pisząc kod w Javie, nie programuje się kodu do wykonania na maszynie fizycznej, pisze się kod, który ma być wykonany na wirtualnej maszynie języka Java.
Jedynym sposobem, w jaki cały ten kod bajtowy Java działa na wszystkich maszynach wirtualnych Javy, jest napisanie dość surowego standardu działania maszyn wirtualnych Java. Oznacza to, że niezależnie od używanej platformy fizycznej część, w której kod bajtowy Java łączy się z maszyną JVM, będzie działać tylko w jedną stronę. Ponieważ wszystkie maszyny JVM działają dokładnie tak samo, ten sam kod działa wszędzie dokładnie tak samo bez ponownej kompilacji. Jeśli nie możesz przejść testów, aby upewnić się, że jest taki sam, nie możesz nazywać swojej maszyny wirtualnej „maszyną wirtualną Java”.
Oczywiście istnieją sposoby na złamanie przenośności programu Java. Możesz napisać program, który szuka plików tylko w jednym systemie operacyjnym (na przykład cmd.exe). Możesz użyć JNI, który efektywnie pozwala na umieszczenie skompilowanego kodu C lub C ++ w klasie. Możesz użyć konwencji, które działają tylko dla określonego systemu operacyjnego (np. Zakładając, że „:” oddziela katalogi). Ale masz gwarancję, że nigdy nie będziesz musiał ponownie kompilować swojego programu na inną maszynę, chyba że robisz coś naprawdę wyjątkowego (jak JNI).
źródło
Zanim przejdziesz do szczegółów, najpierw musisz zrozumieć, co oznacza platforma? Platforma składa się ze sprzętu komputerowego (głównie architektura mikroprocesora) i systemu operacyjnego. Platforma = sprzęt + system operacyjny
Wszystko, co jest niezależne od platformy, może działać na dowolnym systemie operacyjnym i sprzęcie.
Java jest niezależna od platformy, więc java może działać na każdym systemie operacyjnym i na każdym sprzęcie. Teraz pytanie brzmi, jak to jest niezależne od platformy?
Dzieje się tak z powodu magii kodu bajtowego, który jest niezależny od systemu operacyjnego. Kiedy kompilator java kompiluje dowolny kod, generuje kod bajtowy, a nie natywny kod maszyny (w przeciwieństwie do kompilatora C). Teraz ten kod bajtowy wymaga interpretera do wykonania na komputerze. Ten interpreter to JVM. Więc JVM odczytuje ten kod bajtowy (czyli niezależny od komputera) i wykonuje go. Różne maszyny JVM są zaprojektowane dla różnych systemów operacyjnych, a kod bajtowy może działać w różnych systemach operacyjnych.
W przypadku języka C lub C ++ (język, który nie jest niezależny od platformy) kompilator generuje plik .exe, który jest zależny od systemu operacyjnego, więc po uruchomieniu tego pliku .exe w innym systemie operacyjnym nie będzie on działać, ponieważ ten plik jest zależny od systemu operacyjnego, więc nie jest kompatybilny z inny system operacyjny.
Wreszcie pośredni kod Byte niezależny od systemu operacyjnego sprawia, że platforma Java jest niezależna.
źródło
Oznacza to, że programista Java nie musi (teoretycznie) znać szczegółów maszyny lub systemu operacyjnego. Te szczegóły istnieją i obsługują je JVM i biblioteki klas. Ponadto, w przeciwieństwie do języka C, pliki binarne Java (kod bajtowy) można często przenosić do zupełnie innych systemów bez modyfikowania lub ponownej kompilacji.
źródło
Nie, jest odwrotnie. To dlatego, że używasz maszyny wirtualnej, program Java jest niezależny.
Maszyna wirtualna nie jest niezależna, musisz zainstalować taką, która jest specjalnie dostosowana do Twojego typu systemu. Maszyna wirtualna tworzy niezależną platformę na szczycie systemu operacyjnego.
źródło
JVM to „symulowana maszyna”, którą można zainstalować w różnych systemach. W ten sposób ten sam kod Java może działać w różnych systemach, ponieważ opiera się na JVM, a nie na samym systemie operacyjnym.
Oznacza to, że pozwala to programiście komunikować się z systemem wirtualnym (JVM) i wykorzystywać jego funkcje zamiast określonych funkcji maszyny i systemu operacyjnego. Ponieważ Java opiera się tylko na JVM, jest niezależna od platformy (jeśli platforma ma zainstalowaną maszynę JVM).
Krótko mówiąc, Java nie jest niezależna od platformy jako taka, wymaga instalacji maszyny JVM dla wszystkich systemów, na których powinna działać. Jednak będzie działać we wszystkich systemach, w których jest zainstalowana maszyna JVM.
źródło
Java jest niezależna od platformy, ponieważ ma JVM (wirtualną maszynę Java). Zilustrujmy to przykładem z życia wziętego. Załóżmy, że jesteś wolny dla członków swojej rodziny. Ale dlaczego?
Ponieważ znasz ich dobrze, a oni również Ciebie. Ale nie jesteś wolny dla członków mojej rodziny. Ponieważ ich nie znasz, a oni też nie znają ciebie. Ale jeśli jestem twoim przyjacielem i kiedy mogę przedstawić cię członkom mojej rodziny, będziesz mógł z nimi swobodnie rozmawiać.
Podobnie, jeśli jesteś kodem, a ja jestem JVM. Twoja rodzina to platforma Windows, a moja to platforma Linux. Jeśli byłeś językiem C lub innym językiem zależnym od platformy, znasz tylko członków swojej rodziny i odwrotnie. Dlatego tylko platforma, na której zostałeś napisany, zna ten kod i będzie go obsługiwać. Ale jeśli jesteś kodem JAVA i kiedy przyjdziesz do mojej rodziny, a mianowicie. platformę Linux i jeśli mnie tam znajdziesz, JVM, mogę przedstawić Ci moją rodzinę, platformę Linux i będziesz mógł z nią współpracować.
W przypadku języków zależnych od platformy nie ma żadnego przyjaciela, takiego jak JVM, który mógłby przedstawić się jakiejkolwiek rodzinie platform. W ten sposób Java jest niezależna od platformy. :)
źródło
JVM pobiera abstrakty z konkretnej platformy. Twój program opiera się tylko na JVM, a ponieważ JVM jest dostępny dla różnych platform, takich jak Windows i Linux, Twój program jest niezależny od platformy (ale zależy od JVM).
źródło
W języku c / c ++ kod źródłowy (plik programu c) po kompilacji za pomocą kompilatora jest bezpośrednio konwertowany na natywny kod maszynowy (co jest zrozumiałe dla konkretnej maszyny, na której kompilujemy kod). Dlatego skompilowany kod c / c ++ nie może działać w innym systemie operacyjnym.
Ale w przypadku Javy: plik źródłowy java (.java) zostanie skompilowany za pomocą kompilatora JAVAC (obecnego w JDK), który dostarcza kod bajtowy (plik .class), który jest zrozumiały dla każdej maszyny JVM zainstalowanej w dowolnym systemie operacyjnym (system fizyczny) .
Tutaj musimy mieć różne JVM (zależne od platformy) dla różnych systemów operacyjnych, w których chcemy uruchomić kod, ale plik .class (kod skompilowany / kod pośredni) pozostaje taki sam, ponieważ jest zrozumiały dla każdej zainstalowanej maszyny JVM na dowolnym systemie operacyjnym.
W c / c ++: tylko kod źródłowy jest niezależny od komputera. W Javie: zarówno kod źródłowy, jak i skompilowany są niezależne od platformy.
To sprawia, że platforma Java (maszyna) jest niezależna.
źródło
java nie jest niezależna od platformy, sama jest platformą opartą na tej platformie aplikacje java działają, ale sama platforma java jest zależna od platformy
źródło
1:jvm
(tj. maszyna wirtualna java) to zbiór programów, który zawiera wiele plików, które zapewniają różne funkcje obecne w folderze (tj. kolekcje programów w formacie średniego poziomu) o nazwiepackages
.jvm
pomaga uniknąć przeciążenia w sytuacji,o/s
gdy pomaga wykonywać tylko.class
pliki lub aplikacje java tylko samodzielnie.Pomaga uczynić jego równość formatem średniego poziomu po uzgodnieniu przez kompilator java, a następnie dostarcza reprsentację kodu bajtowego (plik .class), który nie jest specyficzne dlao/s
iprocessor
.2: jvm tworzy kod bajtowy do
.exe
pliku, aby procesor był zrozumiały i przedstawia alokację pamięci dla każdej funkcji po odebraniu kodu bajtowego frm.3: jvm zwalnia również alokację pamięci z pamięci RAM po zakończeniu wykonywania przez sterowanie.
źródło
JVM zależy od systemu operacyjnego. dla każdego systemu JVM inny.
„.class” jest taki sam dla wszystkich maszyn JVM. więc każda maszyna JVM rozumie dane pliku „.class”.
JVM zależne od systemu Windows przekazuje instrukcje zależne od systemu Windows do systemu Windows JVM zależne od systemu Linux przekazuje instrukcje zależne od systemu Linux linux.
tak jest w przypadku innych systemów operacyjnych. więc java działa w każdym systemie operacyjnym.
dlatego java jest niezależna od systemu operacyjnego.
źródło
W prostych słowach:
Język programowania Java jest niezależny od platformy.
JVM zależy od platformy
źródło
Java nie jest niezależna od platformy, ponieważ działa na JVM. To powiedziawszy, zyskujesz niezależność platformy poprzez programowanie na pojedynczej abstrakcyjnej maszynie, która ma konkretne realizacje na większości popularnych platform OS (i niektórych wbudowanych urządzeniach).
Pokrewnym pomysłem jest warstwa abstrakcji sprzętu obecna w wielu systemach operacyjnych, która umożliwia działanie tego samego systemu operacyjnego na innym sprzęcie.
W twoim pierwotnym pytaniu Turbo C jest analogiczne do programu javac, a JVM to OS / HAL.
źródło
Dzięki Javie można kompilować kod źródłowy w systemie Windows, a skompilowany kod ( a dokładnie kod bajtowy) może być wykonywany (interpretowany) na dowolnej platformie, na której działa maszyna JVM. Więc tak, potrzebujesz JVM, ale JVM może uruchomić dowolny skompilowany kod, skompilowany kod jest niezależny od platformy .
Innymi słowy, masz zarówno przenośność kodu źródłowego, jak i przenośność skompilowanego kodu.
Maszyna nie musi mieć kompilatora C, maszyna musi używać pliku binarnego specyficznego dla platformy. W C lub C ++ skompilowany kod jest specyficzny dla każdej architektury, jest niezależny od platformy .
Innymi słowy, z C / C ++ masz przenośność kodu źródłowego (z pewną dyscypliną), ale nie przenośność skompilowanego kodu: musisz przekompilować dla każdej architektury do plików binarnych specyficznych dla platformy.
źródło
JVM będzie zależne od platformy.
Ale cokolwiek wygeneruje, będzie niezależne od platformy. [który nazwaliśmy kodem bajtowym lub po prostu możesz powiedzieć ... plik klasy]. dlatego Java jest nazywana niezależną od platformy.
możesz uruchomić ten sam plik klasy na komputerze Mac również w systemie Windows, ale będzie to wymagało środowiska JRE.
źródło
kod bajtowy nie jest niezależny od plateform, ale jego JVM, która uniezależnia kod bajtowy. Kod bajtowy nie jest kodem dopasowania. Kody bajtowe to zwarte kody numeryczne, stałe i odniesienia (zwykle adresy numeryczne), które kodują wynik parsowania i analizy semantycznej takich rzeczy, jak typ, zakres i głębokość zagnieżdżenia obiektów programu. Dzięki temu zapewniają znacznie lepszą wydajność niż bezpośrednia interpretacja kodu źródłowego. kod bajtowy musi zostać zinterpretowany przed wykonaniem, co zawsze jest wykonywane przez interpreter JVM.
źródło
Na marginesie dyskusji na temat JVM i JIT Compilation. Jest to ta sama zasada, co w C # i CLR oraz do pewnego stopnia w Pythonie, a kiedy ktoś mówi, że kod działa "bezpośrednio na sprzęcie", to faktycznie jest to prawdą w tych instrukcjach, które są już skompilowane, będą mogli skorzystać z optymalizacji na komputerze / procesorze, na którym jest uruchamiany. Więc nawet jeśli początkowa kompilacja modułu jest raczej powolna, to następnym razem, gdy ten moduł zostanie uruchomiony, wykonywany kod będzie działał z natywną szybkością, a więc będzie działał bezpośrednio na sprzęcie.
źródło
Java jest niezależna od platformy w aspekcie programisty Java, ale nie dotyczy to użytkownika końcowego, który musi mieć maszynę JVM zależną od platformy, aby uruchomić kod Java. Zasadniczo podczas kompilacji kodu Java generowany jest kod bajtowy, który jest zwykle niezależny od platformy. Dlatego programista musi napisać jeden kod dla całej serii platform. Ale ta korzyść wiąże się z bólem głowy dla użytkownika końcowego, który musi zainstalować JVM, aby uruchomić skompilowany kod. Ta maszyna JVM jest inna dla każdej platformy. Zatem zależność pojawia się tylko dla użytkownika końcowego.
źródło
Javac - kompilator konwertujący kod źródłowy na kod bajtowy. JVM - interpreter konwertujący kod bajtowy na kod języka maszynowego.
Jak wiemy, java jest językiem kompilującym ** r & ** interpreterowym . Po skompilowaniu kodu Java, znanego również jako kod źródłowy, jest on konwertowany na kod natywny znany jako KOD BYTE, który jest przenośny i można go łatwo wykonać we wszystkich systemach operacyjnych. Wygenerowany kod bajtowy jest zasadniczo reprezentowany w formacie szesnastkowym . Ten format jest taki sam na każdej platformie, czy jest to stacja robocza Solaris, Macintosh, Windows czy Linux. Po kompilacji interpreter odczytuje wygenerowany kod bajtowy i tłumaczy go zgodnie z maszyną hosta. . Kod bajtowy jest interpretowany przez wirtualną maszynę Java, która jest dostępna we wszystkich instalowanych przez nas systemach operacyjnych. więc aby przenieść programy Java na nową platformę, wystarczy przenieść interpreter i niektóre procedury biblioteczne.
Mam nadzieję, że to pomoże!!!
źródło
Kiedy kompilujemy dane źródłowe w C, generuje on natywny kod, który może być zrozumiany przez obecny system operacyjny. Kiedy przenosimy ten kod źródłowy do innego systemu operacyjnego, nie może być zrozumiany przez system operacyjny z powodu kodu natywnego, który oznacza, że reprezentacja zmienia się z systemu operacyjnego na system operacyjny, więc C lub C ++ są zależne od platformy.
Teraz w przypadku javy po kompilacji otrzymujemy kod bajtowy zamiast kodu natywnego. Kiedy uruchomimy kod bajtowy, jest on konwertowany na kod natywny przy pomocy JVM, a następnie zostanie wykonany.
Tak więc Java jest niezależna od platformy, a C lub C ++ nie jest niezależna od platformy.
źródło
cóż, dobre pytanie, ale kiedy kod źródłowy jest zmieniany przez kompilator na pośredni natywny kod bajtowy, w którym konwertuje program na kod bajtowy, podając błędy po całym sprawdzeniu od razu (jeśli zostaną znalezione), a program potrzebuje interpretera, który sprawdzał program wiersz po wierszu i bezpośrednio zmieniał go w kod maszynowy lub kod obiektowy, a każdy system operacyjny domyślnie nie może mieć interpretera java z pewnych względów bezpieczeństwa, więc musisz mieć jvm za wszelką cenę, aby uruchomić go na tej innej platformie systemu operacyjnego niezależność, jak powiedziałeś tutaj, oznacza, że program można uruchomić w dowolnym systemie operacyjnym, takim jak unix, mac, linux, Windows itp., ale nie oznacza to, że każdy system operacyjny będzie mógł uruchamiać kody bez jvm, który mówi specyfikację, implementację, i przykład,jeśli zrobię postęp, zmieniając konfigurację twojego komputera tak, abyś mógł mieć program ładujący klasy, który może otworzyć nawet kod bajtowy, możesz również wykonać kod bajtowy java, aplety itp. -by nimish :) powodzenia
źródło
Jak to się dzieje?
Odp: JVM może odczytywać
ByteCode
i odpowiadać zgodnie z podstawowym systemem operacyjnym, ponieważ JVM jest zsynchronizowany z systemem operacyjnym.Dlatego potrzebujemy JVM z synchronizacją z platformą.
Ale najważniejsze jest to, że programista nie musi znać konkretnej wiedzy o Platformie i programować swojej aplikacji z myślą o jednej konkretnej platformie.
Ta elastyczność pisania programów w Javie --- kompilowanie
ByteCode
i uruchamianie na dowolnej maszynie (tak, aby wykonać JVM zależne od platformy) sprawia, że platforma Java jest niezależna.źródło
kiedy kompilujemy plik java, generowany jest plik .class tego programu, w którym plik .class zawiera kod bajtowy. Ten kod bajtowy jest niezależny od platformy, kod bajtowy można uruchomić w dowolnym systemie operacyjnym korzystającym z maszyny wirtualnej Java. niezależność platformy nie tylko w kwestii systemu operacyjnego, ale także sprzętu. Kiedy uruchamiasz aplikację java na 16-bitowej maszynie, którą stworzyłeś na 32-bitowej, nie musisz się martwić o konwersję typów danych zgodnie z systemem docelowym. Możesz uruchomić swoją aplikację na dowolnej architekturze i uzyskasz ten sam wynik na każdej z nich.
źródło
Edycja: niezupełnie. Zobacz komentarze poniżej.
Java nie działa bezpośrednio na niczym. Musi zostać przekonwertowany na kod bajtowy przez maszynę JVM.
Ponieważ maszyny JVM istnieją dla wszystkich głównych platform, sprawia to, że Java jest niezależna od platformy POPRZEZ JVM.
źródło