Was kann Java? Wofür benutzt man es?

Status
Nicht offen für weitere Antworten.

Ice-Tea

Bekanntes Mitglied
Ich hab da grad was schönes zu gefunden:
Sie werden jetzt vielleicht fragen, weshalb dieses mächtige Werkzeug – man spricht auch von später Bindung (late binding), weil die Zuordnung von Methodenname zu Implementation erst zur Laufzeit vorgenommen wird – mit einem Schlüsselwort extra „eingeschaltet“ werden muss. Polymorphie verursacht mehr Verwaltungsaufwand für das Laufzeitsystem: Objekte einer polymorphen Klasse müssen einen „Rucksack“ mit Funktionszeigern (die so genannte virtual function table) mit sich herumtragen, und jeder Methodenaufruf erfordert eine zusätzliche Zeigerdereferenzierung.
C++ Programmierung: Polymorphie
 
S

Spacerat

Gast
Das hat "byto" schon geschrieben. Das ganze läuft über sogenannte "vtables" (sozusagen ganze Tabellen solcher Funktionspointer). Das ganze heisst dann indirekte Adressierung.

Das was Ice-Tea dort schreibt ist auch nur bis zum Link-Vorgang interessant. In Assembler müssen ausschliesslich Funktionspointer von DLLs vor der Ausführung initialisiert werden. In C++ wird dazu das Schlüsselwort "extern" verwendet.

Nachtrag: Villeicht ist es letztendlich noch hilfreich, zu erwähnen, dass Assembler eine strukturierte und keine Objektorientierte Sprache ist.

mfg Spacerat
 

Ebenius

Top Contributor
Spacerat hat gesagt.:
Das hat "byto" schon geschrieben. Das ganze läuft über sogenannte "vtables" (sozusagen ganze Tabellen solcher Funktionspointer). Das ganze heisst dann indirekte Adressierung.
Ist mir bekannt. Es heißt VMT oder VTable wie ich oben schon schrieb. Um das zu benutzen muss eben das Objekt Overhead herumtragen. Genau das sag ich doch. :roll:

Ebenius
 

Marco13

Top Contributor
Ohne das ganze Gekloppe jetzt nachvollzogen zu haben:
Spacerat hat gesagt.:
Ich bleibe dabei und das ist keine Böswilligkeit: Diese Overheads haben C++-Objekte nur zur Kompile-Zeit. Nach dem Linken sind sie jedenfalls geschichte. In Java dagegen bleiben sie auch zur Laufzeit erhalten. Und genau darum ging es mir.

Das stimmt für Java weniger als für C++. In C++ wird alles einmal compiliert. Polymorphe Aufrufe werden über die VTable gemacht. OB da ein Linker was dran dengeln kann, weiß ich nicht. Aber in Java kann definitiv was dran gedengelt werden: Da kann nämlich mittendrin der Just-In-Time-Compiler zuschlagen - der kann erkennen, OB ein Aufruf wirklich Polymorph ist (d.h. ob eine Methode überschrieben wurde), und wenn der Aufruf NICHT Polymorph ist, einfach die "VTable" in den Müll werfen und den polymorphen Aufruf durch einen Monomorphen (also direkten) Aufruf ersetzen. Zusätzlich unterscheidet Java auch noch zwischen Monomorphismus, Bi-Morphismus und Polymorphismus, wobei Bi-Morphismus nochmal "optimiert" ist - näheres dazu auch unter http://www.javaspecialists.eu/archive/Issue158.html
 
S

Spacerat

Gast
Das wirft meinen Standpunkt aber nun nicht um, sondern bestärkt ihn nur. (BTW: Mittlerweile nehme ich an, das wir aneinander vorbei reden...). In dem Overhead einer Java-Methode muss z.B. noch stehen, ob diese "private", "protected" oder wie auch immer ist, welche Parameter zur Ausführung nötig sind usw (Methoden-Signatur). In "vtables" liegen ausschliesslich Adressen. Will sagen, in einer Ausfürbaren Datei aus C++ entfallen diese Abfragen, weil sie vom Kompiler oder Linker bereits erkannt und eliminiert bzw. optimiert wurden. Deswegen würde ich diese "vtables" nicht als Overhead im Sinne von Java-Overheads bezeichnen.

mfg Spacerat
 

Ebenius

Top Contributor
Tut mir leid, Spacerat, die VMT existiert zur Laufzeit oder gar nicht. Sobald Virtuelle Methodenaufrufe existieren, können diese nur zur Laufzeit ausgewertet werden. Anders geht es nicht.

Ebenius
 
S

Spacerat

Gast
Mir tuts auch Leid... Aber ein Assembler-Crash-Kurs, der euch darlegt worauf ich hinaus will, führt zu weit, finde ich. Ist auch recht müssig, sich über die Unterschiede von Overheads in Java und VMTs die manche auch als Overhead bezeichnen, auseinanderzusetzen. Deswegen... Keine weiteren Ausführungen.

mfg Spacerat
 
G

Gast

Gast
Wie du in jedem Thread Mist labern musst, genau wie in dem anderen Pointer-Referenzen Thread...
 

byte

Top Contributor
Spacerat hat gesagt.:
In dem Overhead einer Java-Methode muss z.B. noch stehen, ob diese "private", "protected" oder wie auch immer ist, welche Parameter zur Ausführung nötig sind usw (Methoden-Signatur).In "vtables" liegen ausschliesslich Adressen. Will sagen, in einer Ausfürbaren Datei aus C++ entfallen diese Abfragen, weil sie vom Kompiler oder Linker bereits erkannt und eliminiert bzw. optimiert wurden. Deswegen würde ich diese "vtables" nicht als Overhead im Sinne von Java-Overheads bezeichnen.
Du sprichst die ganze Zeit von Java-Overhead, ohne jemals zu definieren, was Du damit meinst. In Fall der Sichtbarkeiten liegst Du schon mal daneben, die interessieren auch in Java nur den Compiler.
 

Ebenius

Top Contributor
byto hat gesagt.:
In Fall der Sichtbarkeiten liegst Du schon mal daneben, die interessieren auch in Java nur den Compiler.
Heieiei jetzt wird's haarig. Sichtbarkeiten interessieren in Java auch die Reflection-API, somit müssen sie zur Laufzeit verfügbar sein. Natürlich gebe ich Spacerat in sofern recht, als dass der Overhead ─ ich denke damit meint er pauschal alle nicht die Nutzdaten betreffenden Daten eines Objektes ─ in der Regel größer ist, als in einem mit C++ kompilierten Programm. Alles andere ist von Seiten Spacerat's aus jetzt Wortklauberei die daher rührt, dass er eine Aussage verteidigen muss die er sich nicht richtig überlegt hatte.

Ebenius
 

byte

Top Contributor
Ebenius hat gesagt.:
byto hat gesagt.:
In Fall der Sichtbarkeiten liegst Du schon mal daneben, die interessieren auch in Java nur den Compiler.
Heieiei jetzt wird's haarig. Sichtbarkeiten interessieren in Java auch die Reflection-API, somit müssen sie zur Laufzeit verfügbar sein.
Die Informationen sind zur Laufzeit verfügbar, gehören aber zu den statischen Informationen einer Klasse, die der Classloader einmalig lädt, wenn die Klasse zum ersten Mal benutzt wird. Den kompilierten Code interessieren die Sichtbarkeiten aber nicht mehr, weil diese schon vom Compiler geprüft wurden.
Anders siehts natürlich aus, wenn man per Reflection API den Aufruf macht. Aber Reflection ist ja was grundlegend anderes und hier nicht Thema.
 

Ebenius

Top Contributor
byto hat gesagt.:
Die Informationen sind zur Laufzeit verfügbar, gehören aber zu den statischen Informationen einer Klasse, die der Classloader einmalig lädt, wenn die Klasse zum ersten Mal benutzt wird. Den kompilierten Code interessieren die Sichtbarkeiten aber nicht mehr, weil diese schon vom Compiler geprüft wurden.
Anders siehts natürlich aus, wenn man per Reflection API den Aufruf macht.
Du hast recht. Es ging allerdings nur um Overhead im Speicher. Ich hab die Reflection-API einfach als ad-hoc-Beleg angeführt, dass die Informationen im Speicher vorhanden sein müssen.

Ebenius
 

byte

Top Contributor
Und ich dachte, es geht um Performance-Overhead. Aber im Grunde genommen wurde der Begriff "Overhead" nur so in den Raum geworfen ohne jemals zu definieren, was damit gemeint ist. :roll:

Speicher-Overhead ist natürlich da, schon alleine durch die VM. Aber der Overhead bringt ja auch Vorteile. Dank Reflection API sind z.B. dynamische Proxies möglich, die wohl kaum mehr wegzudenken sind aus modernen Frameworks. Insofern kann man das nicht perse als Nachteil abstempeln.
 

Ebenius

Top Contributor
byto, da musst Du mal viel weiter hochblättern; Spacerat hatte eben angefangen mit Overhead in Zusammenhang mit dem sizeof-Konstrukt aus C++.
 

byte

Top Contributor
Er hat aber auch von Sprungadressen berichtet, was wieder für Performance sprechen würde. ;)

Is ja auch wurscht. Die Diskussion ist eh Käse. :cool:
 
S

Spacerat

Gast
Handbuch der Javaprogrammierung 5. Auflage Guido Krüger Kap. 50.1 Performancetuning Einleitung hat gesagt.:
Leider ist auch ein Just-In-Time-Compiler kein Allheilmittel gegen Performanceprobleme. Zwar ist er in der Lage, bestimmte Codeteile so stark zu beschleunigen, dass ihre Ablaufgeschwindigkeit der von kompiliertem C-Code nahekommt. Andererseits gibt es nach wie vor genügend Möglichkeiten, Programme zu schreiben, die inhärent langsamen Code enthalten, der auch von einem Just-In-Time-Compiler nicht entscheidend verbessert werden kann. Zudem ensteht durch den Einsatz des JIT ein gewisser Overhead, der möglicherweise einen Netto-Performancegewinn verhindert, denn das Kompilieren des Bytecodes kostet Zeit und zusätzlichen Speicher.
Von jenem "gewissen Overhead" ist die Rede. Dieser nicht zu unterschätzende Overhead der nunmal entsteht, wenn JIT zur Laufzeit z.B. eine neue Klasse laden muss wobei ihm dann auch erst z.B. die Sichtbarkeit der aufzurufenden Methode auffallen kann. Eben all, die Informationen, die in bei C++ z.B. schon beim Kompilieren oder Linken auffallen. C++ Kompilierter Code muss zur Ausführbarkeit ausschliesslich DLLs nachladen (und das passiert auch nur einmal beim Programmstart), während der JIT sich mit dem Laden von benötigten Klassen auch noch zur Laufzeit beschäftigen muss. Was solls... Ich red' Schwachfug. Blame me...
BTW.: Schwachfug wäre es zu behaupten, Java hätte dank JIT alle merkmale einer Interpretativen Sprache abgelegt.
 
M

maki

Gast
>> Was kann Java? Wofür benutzt man es?

Man kann Java benutzen (eine Prise C++ kann helfen) um eigentlich hochintelligente Menschen miteinander streiten zu lassen *g*
 

Landei

Top Contributor
>> Was kann Java? Wofür benutzt man es?

Man kann Java benutzen, um zu zeigen, was aus einer guten Idee werden kann, wenn man sie nicht dauernd den aktuellen Erfordernissen anpaßt.
 

Ebenius

Top Contributor
Landei hat gesagt.:
>> Was kann Java? Wofür benutzt man es?

Man kann Java benutzen, um zu zeigen, was aus einer guten Idee werden kann, wenn man sie nicht dauernd den aktuellen Erfordernissen anpaßt.
Eine stabile Sprache mit guten Frameworks und exzellenten Tools.

Sagt Ebenius, ...
... der sich immer sehr freut wenn Programmiersprachen sich eben nicht dauernd anpassen.
 

Landei

Top Contributor
Ersetzte "stabil" durch "starr" und "gut" (bzw. "exzellent") durch "annehmbar", dann kommen wir unter einen Hut :-D

Ein bißchen mehr Bewegung täte Java wirklich gut. Ist ja nicht so, dass es keine guten Vorbilder gäbe. Und viele interessante Sachen lassen sich realisieren ohne die Kompatibilität zu beeinträchtigen.
 

Ebenius

Top Contributor
Ich will doch gar nicht unter einen Hut :shock:

Und starr? JLS 3 ist noch nicht sehr alt. Und die Neuerungen in JLS 3 so lange zu diskutieren wie geschehen, kann ich gut verstehen.

Ebenius
 

Landei

Top Contributor
Wie lange gibt es Nice, Groovy und Scala? Wie lange hat C# schon die Nase vorn?

Sicher, niemand will ein Featuritis-Monster, aber dieses Schneckentempo ist einfach nicht auszuhalten. Wenn die Entwicklung der Programmiersprachen mit dem Wahnsinns-Speed erfolgt wäre, wäre COBOL immer noch "State of the Art" :p
 

Ebenius

Top Contributor
Dann hätte man sich so einige Krankheiten auch sparen können. Und ob C# die Nase vorn hat? Ich fand die Sprache nie besser und, ja, ich hab sie benutzen müssen. Aber das ist ohnehin Geschmackssache.

Remis?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Interface Wofür Interfaces in Java verwenden? Allgemeine Java-Themen 3
G Mit welchem Betriebssystem programmiert ihr Java und wofür? Allgemeine Java-Themen 11
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
KonradN Java 18 Allgemeine Java-Themen 8
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
O Newton Algorithmus Java Allgemeine Java-Themen 1
P Java Quellen finden Allgemeine Java-Themen 3
M Java Analyse/ SWOT-Analyse Allgemeine Java-Themen 13
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben