{"id":4208,"date":"2018-08-29T18:36:16","date_gmt":"2018-08-29T16:36:16","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4208"},"modified":"2018-08-29T18:36:16","modified_gmt":"2018-08-29T16:36:16","slug":"die-java-se-plattform-versionen-und-release-zyklen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2018\/08\/die-java-se-plattform-versionen-und-release-zyklen\/","title":{"rendered":"Die Java SE-Plattform, Versionen und Release-Zyklen"},"content":{"rendered":"<p>Die Java Platform, Standard Edition (Java SE) ist eine Systemumgebung zur Entwicklung und Ausf\u00fchrung von Java-Programmen. Java SE enth\u00e4lt alles, was zur Entwicklung von Java-Programmen n\u00f6tig ist. Obwohl die Begrifflichkeit etwas unscharf ist, l\u00e4sst sich die Java SE als Spezifikation verstehen und nicht als Implementierung. Damit Java-Programme \u00fcbersetzt und ausgef\u00fchrt werden k\u00f6nnen, m\u00fcssen aber ein konkreter Compiler, Interpreter und die Java-Bibliotheken auf unserem Rechner installiert sein. Es gibt unterschiedliche Implementierungen, etwa das OpenJDK.<\/p>\n<h4>Versionen der Java SE<\/h4>\n<p>Am 23. Mai 1995 stellte damals noch Sun Java erstmals der breiten \u00d6ffentlichkeit vor. Seitdem ist viel passiert, und in jeder Version erweiterte sich die Java-Bibliothek. Dennoch gibt es von einer Version zur n\u00e4chsten kaum Inkompatibilit\u00e4ten, und fast zu 100\u00a0% kann das, was unter Java n \u00fcbersetzt wurde, auch unter Java n\u00a0+ 1 \u00fcbersetzt werden \u2013 nur selten gibt es Abstriche in der Bytecode-Kompatibilit\u00e4t.<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a><\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"147\">Version<\/td>\n<td width=\"147\">Datum<\/td>\n<td width=\"158\">Einige Neuerungen oder Besonderheiten<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">1.0<\/td>\n<td width=\"147\">Januar 1995<\/td>\n<td width=\"158\">Erste Version. Folgende 1.0.x-Versionen l\u00f6sen diverse Sicherheitsprobleme.<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">1.1<\/td>\n<td width=\"147\">Februar 1997<\/td>\n<td width=\"158\">Neuerungen bei der Ereignisbehandlung, beim Umgang mit Unicode-Dateien (Reader\/Writer statt nur Streams), au\u00dferdem Datenbankunterst\u00fctzung via JDBC sowie innere Klassen und eine standardisierte Unterst\u00fctzung f\u00fcr Nicht-Java-Code (nativen Code)<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">1.2<\/td>\n<td width=\"147\">November 1998<\/td>\n<td width=\"158\">Es hei\u00dft nun nicht mehr JDK, sondern Java 2 Software Development Kit (SDK). Swing ist die neue Bibliothek f\u00fcr grafische Oberfl\u00e4chen, und es gibt eine Collection-API f\u00fcr Datenstrukturen und Algorithmen.<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">1.3<\/td>\n<td width=\"147\">Mai 2000<\/td>\n<td width=\"158\">Namensdienste mit JNDI, verteilte Programmierung mit RMI\/IIOP, Sound-Unterst\u00fctzung<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">1.4<\/td>\n<td width=\"147\">Februar 2002<\/td>\n<td width=\"158\">Schnittstelle f\u00fcr XML-Parser, Logging, neues IO-System (NIO), regul\u00e4re Ausdr\u00fccke, Assertions<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">5<\/td>\n<td width=\"147\">September 2004<\/td>\n<td width=\"158\">Das Java-SDK hei\u00dft wieder JDK. Neu sind generische Typen, typsichere Aufz\u00e4hlungen, erweitertes for, Autoboxing, Annotationen.<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">6<\/td>\n<td width=\"147\">Ende 2006<\/td>\n<td width=\"158\">Webservices, Skript-Unterst\u00fctzung, Compiler-API, Java-Objekte an XML-Dokumente binden, System Tray<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">7<\/td>\n<td width=\"147\">Juli 2011<\/td>\n<td width=\"158\">Kleine Sprach\u00e4nderungen, NIO2, erste freie Version unter der GNU General Public License (GPL)<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">8<\/td>\n<td width=\"147\">M\u00e4rz 2014<\/td>\n<td width=\"158\">Sprach\u00e4nderungen Lambda-Ausdr\u00fccke, Stream-API<\/td>\n<\/tr>\n<tr>\n<td width=\"147\"><strong>9<\/strong><\/td>\n<td width=\"147\">September 2017<\/td>\n<td width=\"158\">Modularisierung von Anwendungen<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">10<\/td>\n<td width=\"147\">M\u00e4rz 2018<\/td>\n<td width=\"158\">Lokale Variablendeklarationen mit var<\/td>\n<\/tr>\n<tr>\n<td width=\"147\">11<\/td>\n<td width=\"147\">September\u00a0 2018<\/td>\n<td width=\"158\">Entfernung des java.ee-Moduls<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tabelle 1.1: Neuerungen und Besonderheiten der verschiedenen Java-Versionen<\/p>\n<p>Die Produktzyklen zeigen einige Spr\u00fcnge, besonders Java 9 wurde zweimal verschoben.<\/p>\n<p>Oracle und Sun waren sehr lange konservativ darin, das Bytecodeformat zu \u00e4ndern, sodass eine \u00e4ltere JVM im Prinzip Programme einer neuen Java-Version ausf\u00fchren konnte. Aber gerade in den Versionen Java 7 und Java 8 gab es doch einige Neuerungen, die die Aufw\u00e4rtskompatibilit\u00e4t brechen; eine JVM der Version 7 kann also keine Programme mehr ausf\u00fchren, die ein Java\u00a08-Compiler \u00fcbersetzt hat. Da einige Teile aus den Java 11-Bibliotheken entfernt wurden, ist auch dadurch die Abw\u00e4rtskompatibilit\u00e4t eingeschr\u00e4nkt.<\/p>\n<h4>Feature-Release vs. zeitorientiertes Release<\/h4>\n<p>20 Jahre lang bestimmten Features die Freigabe von neuen Java-Versionen; die Entwickler setzten bestimmte Neuerungen auf die Wunschliste, und wenn alle Features realisiert und getestet waren, erfolgte die allgemeine Verf\u00fcgbarkeit (eng. general availability, kurz GA). Hauptproblem dieses Feature-basierten Vorgehensmodells waren die Verz\u00f6gerungen, die mit Problemen bei der Implementierung einhergingen. Vieldiskutiert war das Java 9-Release, weil es unbedingt ein Modulsystem enthalten sollte.<\/p>\n<p>Die Antwort auf diese Probleme, und der Wusch der Java-Community nach h\u00e4ufigeren Releases, beantwortet Oracle mit der \u201eJEP 322: Time-Based Release Versioning\u201c<a href=\"#_ftn2\" name=\"_ftnref2\">[2]<\/a>. Vier Releases sind im Jahr geplant:<\/p>\n<ul>\n<li>Im M\u00e4rz und September erscheinen Haupt-Releases, wie Java 10, Java 11.<\/li>\n<li>Updates erscheinen einen Monat nach einem Haupt-Release und dann im Abstand von drei Monaten. Im April und Juli erscheinen folglich Updates 10.0.1 und 10.0.2. F\u00fcr Java 11 sind das Oktober 2018 und Januar 2019.<\/li>\n<\/ul>\n<p>Anders gesagt: Im Halbjahresrhythmus gibt es Updates, die es Oracle erlauben, in der schnelllebigen IT-Zeit die die Sprache und Bibliotheken weiter zu entwickeln und neue Spracheigenschaften zu integrieren. Kommt es zu Verz\u00f6gerungen, h\u00e4lt das nicht gleich das ganze Release auf. Java 10 war im M\u00e4rz 2018 das erste Release nach diesem Zeitplan, Java 11 folgte im September 2018.<\/p>\n<h4>Codenamen, Namens\u00e4nderungen und Vendor-Versionsnummer<\/h4>\n<p>Die ersten Java-Versionen waren Java 1.0, Java 1.1, usw. Mit Java 5 entfiel das Pr\u00e4fix \u00bb1.\u00ab in der Versionskennung des Produkts, sodass es einfach nur Java 5, Java 6, etc. hie\u00df; in den Entwicklerversionen blieb die Schreibweise mit der \u00bb1.\u00ab aber weiterhin bis Java 9 g\u00fcltig.<a href=\"#_ftn3\" name=\"_ftnref3\">[3]<\/a> In Java 10 kommt durch das \u201eTime-Based Release Versioning\u201c<a href=\"#_ftn4\" name=\"_ftnref4\">[4]<\/a> eine Vendor-Kennung hinzu, sodass alternativ zu Java 11 auch von 18.9 die Sprache ist; gut l\u00e4sst sich daran die Jahreszahl und der Monat vom Release ablesen.<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\">[1]<\/a> Die Seite http:\/\/tutego.de\/go\/migratingtojava5 zeigt auf, wie Walmart der Umstieg auf Java 5 gelang \u2013 relativ problemlos: \u00bb[\u2026] the overall feeling is that a migration to Java 1.5 in a production environment can be a mostly painless exercise.\u00ab<\/p>\n<p><a href=\"#_ftnref2\" name=\"_ftn2\">[2]<\/a> \u00a0\u00a0\u00a0 http:\/\/openjdk.java.net\/jeps\/322<\/p>\n<p><a href=\"#_ftnref3\" name=\"_ftn3\">[3]<\/a> Siehe dazu http:\/\/docs.oracle.com\/javase\/1.5.0\/docs\/relnotes\/version-5.0.html.<\/p>\n<p><a href=\"#_ftnref4\" name=\"_ftn4\">[4]<\/a> http:\/\/openjdk.java.net\/jeps\/322<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Java Platform, Standard Edition (Java SE) ist eine Systemumgebung zur Entwicklung und Ausf\u00fchrung von Java-Programmen. Java SE enth\u00e4lt alles, was zur Entwicklung von Java-Programmen n\u00f6tig ist. Obwohl die Begrifflichkeit etwas unscharf ist, l\u00e4sst sich die Java SE als Spezifikation verstehen und nicht als Implementierung. Damit Java-Programme \u00fcbersetzt und ausgef\u00fchrt werden k\u00f6nnen, m\u00fcssen aber ein [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-4208","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4208"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4208\/revisions"}],"predecessor-version":[{"id":4209,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4208\/revisions\/4209"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}