{"id":2636,"date":"2014-01-09T07:57:28","date_gmt":"2014-01-09T05:57:28","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2636"},"modified":"2014-01-09T07:57:28","modified_gmt":"2014-01-09T05:57:28","slug":"compact-profile-in-java-8","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2014\/01\/compact-profile-in-java-8\/","title":{"rendered":"Compact-Profile in Java 8"},"content":{"rendered":"<p>Nicht jedes Java-Programm braucht den vollen Satz von 4000 Typen, sondern oftmals reicht eine kleine Teilmenge. Eine Teilmenge der Java-Bibliothek wiederum erm\u00f6glicht es, kleinere Laufzeitumgebung zu bauen, was es erlaubt, Java auch f\u00fcr Ger\u00e4te mit weniger Ressourcen einzusetzen. Eine kleine Java-Version f\u00fcr Embedded-Systeme braucht kein CORBA, AWT oder JavaFX und kann so viel kleiner als das Standard-JRE sein. <\/p>\n<p>In Java 8<a href=\"file:\/\/\/C:\/Users\/Christian Ullenboom\/Dropbox\/Eigene Dokumente\/Insel\/#_ftn1_9499\" name=\"_ftnref1_9499\">[1]<\/a> wurde die Bibliothek in 4 Gruppen eingeteilt, auf der einen Seite stehen drei kompakte aufsteigende Teilmengen der Standardbibliothek, genannt Compact-Profile, und auf der anderen Seite das vollst\u00e4ndige System. Das Profil contact1 ist das kleinste, compact2 enth\u00e4lt contact1, contact3 enth\u00e4lt compact2 und das Gesamt-JRE compact3. <\/p>\n<p>Welche Typen zu welchem Profil geh\u00f6ren dokumentiert die Java-API auf der Startseite sowie gibt jeder Typ in der Javadoc sein Profil an; die grobe Einteilung ist: <\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"99\">\n<p><b>Profil<\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"99\">\n<p><b>Gr\u00f6\u00dfe<\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"348\">\n<p><b>Pakete<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"99\">\n<p>compact1<\/p>\n<\/td>\n<td valign=\"top\" width=\"99\">\n<p>10 MiB<\/p>\n<\/td>\n<td valign=\"top\" width=\"348\">\n<p>java.io, java.math, java.net, java.nio, java.security, java.time, java.util (inklusive Stream-API), javax.crypto, javax.script, javax.security<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"99\">\n<p>compact2<\/p>\n<\/td>\n<td valign=\"top\" width=\"99\">\n<p>17 MiB<\/p>\n<\/td>\n<td valign=\"top\" width=\"348\">\n<p>java.sql, java.rmi, javax.rmi, javax.transaction, javax.xml, org.xml, org.w3c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"99\">\n<p>compact3<\/p>\n<\/td>\n<td valign=\"top\" width=\"99\">\n<p>24 MiB<\/p>\n<\/td>\n<td valign=\"top\" width=\"348\">\n<p>java.lang.instrument, java.lang.management, java.util.prefs, java.lang.model, javax.management, javax.naming, javax.sql.rowset, javax.tools, javax.xml.crypto, org.ieft.jgss, Kerberos, SASL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"99\">\n<p>JRE\/JDK<\/p>\n<\/td>\n<td valign=\"top\" width=\"99\">\n<p>140 MiB<\/p>\n<\/td>\n<td valign=\"top\" width=\"348\">\n<p>Alles weitere: java.beans, AWT, Swing, JavaFX, CORBA, java.awt.print, Sound, SOAP, Web-Service, \u2026<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Inhalt der verschiedenen Profile mit Speicherbedarf<a href=\"file:\/\/\/C:\/Users\/Christian Ullenboom\/Dropbox\/Eigene Dokumente\/Insel\/#_ftn2_9499\" name=\"_ftnref2_9499\"><b>[2]<\/b><\/a> <\/p>\n<p>Weiterhin ist die Anzahl verschiedener Provider minimiert worden, es gilt zum Beispiel nur Englisch als verpflichtende Sprache. <\/p>\n<h6>Werkzeug-Unterst\u00fctzung f\u00fcr Profile<\/h6>\n<\/p>\n<p>Die Werkzeuge javac, javadoc und jdeps aus dem JDK sind f\u00fcr die Profile aktualisiert worden, etwa dass sie pr\u00fcfen k\u00f6nnen, ob ein Typ\/Eigenschaft zum Profil geh\u00f6rt oder nicht. Der Schalter \u2013profile gibt dabei das gew\u00fcnschte Profil an. <\/p>\n<p>Beispiel <\/p>\n<p>Versuche die Klasse T mit der Deklaration class T extends java.awt.Point {} mit dem Profile compact3 zu \u00fcbersetzen: <\/p>\n<p>$ <b>javac -profile compact3 T.java<\/b> <\/p>\n<p>T.java:2: error: Point is not available in profile &#8218;compact3&#8216; <\/p>\n<p>class T extends java.awt.Point { } <\/p>\n<p>^ <\/p>\n<p>1 error <\/p>\n<p>Obwohl Point eine n\u00fctzliche Klasse ist, und keine plattformspezifischen Eigenschaften hat, ist das gesamte Paket java.awt gesperrt und kein Teil vom Compact-Profile. <\/p>\n<hr align=\"left\" size=\"1\" width=\"33%\"\/>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian Ullenboom\/Dropbox\/Eigene Dokumente\/Insel\/#_ftnref1_9499\" name=\"_ftn1_9499\">[1]<\/a> Beschrieben erstmalig unter http:\/\/openjdk.java.net\/jeps\/161 <\/p>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian Ullenboom\/Dropbox\/Eigene Dokumente\/Insel\/#_ftnref2_9499\" name=\"_ftn2_9499\">[2]<\/a> Zahlen von JavaOne Konferenz 2013.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nicht jedes Java-Programm braucht den vollen Satz von 4000 Typen, sondern oftmals reicht eine kleine Teilmenge. Eine Teilmenge der Java-Bibliothek wiederum erm\u00f6glicht es, kleinere Laufzeitumgebung zu bauen, was es erlaubt, Java auch f\u00fcr Ger\u00e4te mit weniger Ressourcen einzusetzen. Eine kleine Java-Version f\u00fcr Embedded-Systeme braucht kein CORBA, AWT oder JavaFX und kann so viel kleiner als [&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,66],"tags":[],"class_list":["post-2636","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2636","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=2636"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2636\/revisions"}],"predecessor-version":[{"id":2637,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2636\/revisions\/2637"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}