Vor zwei Wochen habe ich Spring ME auf der JavaOne präsentiert. Es war in mehr als einer Hinsicht eine interessante Konferenz. Einige Dinge waren einfach nur surreal. Larry Ellisson rief die OpenOffice-Community auf, an der Integration von JavaFX zu arbeiten? Was hatte es damit auf sich? Und ich habe die offiziellen Zahlen noch nicht gesehen, aber die Zahl der Teilnehmer muss ein Rekordtief gewesen sein. Dasselbe gilt für die Anzahl der Partys :-( Dennoch muss ich sagen, dass ich eine wunderbare Woche hatte. Trotz der wirtschaftlichen Abschwächung war die Qualität der Gespräche großartig, und das scheint die Leute nicht davon abgehalten zu haben, neue Ideen zu entwickeln. Aus meiner Sicht waren die großen Themen Java FX (vor allem von Sun vorangetrieben), Cloud Computing (von vielen Anbietern vorangetrieben, mit ziemlich viel Zugkraft dahinter, sehr wenig Konvergenz) und andere Sprachen auf der VM (vor allem aufgrund der Zugkraft der Community). Zusammenfassend würde ich sagen, dass man sich ziemlich einig ist, dass Multi-Core und Cloud Computing einige Schwächen der traditionellen VM, Sprache und Unternehmensarchitekturen offengelegt haben. Java ist jedoch keineswegs tot und wird auch nicht bald verschwinden, sondern es ist quicklebendig und quicklebendig. Allerdings gibt es ziemlich unterschiedliche Ansichten darüber, wie sich Java weiterentwickeln sollte. Und da ein erheblicher Teil der Plattform von der Community vorangetrieben wird, wird es einige Zeit dauern, bis sich diese unterschiedlichen Meinungen durchgesetzt haben. Nichtsdestotrotz sind all diese Initiativen sicherlich vielversprechend, und es scheint ein starkes Gemeinschaftsgefühl zu geben, um eine Zeremonie zu vermeiden. Ich bin sicher, dass etwas Gutes dabei herauskommen wird. Der Rest dieses Eintrags sind nur einige der Highlights, die ich aus meinem Notizbuch herausgesucht habe.
Armbrust Netzwerk-Virtualisierung. Ziemlich cooles Zeug. Damit können Sie ein virtuelles Netzwerk mit virtuellen Maschinen erstellen und bestimmte Netzwerkparameter emulieren. Die grafische Benutzeroberfläche für die Erstellung dieser virtuellen Netzwerke ist ziemlich schrecklich (wo ist JavaFX?), aber was sich darunter verbirgt, ist der Hammer! Darüber hinaus ist DTrace integriert, so dass Sie die virtuelle Netzwerkschicht detailliert untersuchen können. Wenn man über Cloud Computing nachdenkt, macht es durchaus Sinn, auch das Netzwerk zu virtualisieren. Project Caroline hatte ähnliche Ambitionen, wurde aber auf das Betriebssystem aufgesetzt. Crossbow macht Ihr Betriebssystem fit für virtualisierte Netzwerke. Um Netzwerkvirtualisierungsfunktionen direkt in das Betriebssystem einzubauen, musste Sun einen großen Teil des Netzwerkstapels überdenken. Das Ergebnis scheint eine ziemlich große Überarbeitung des bestehenden Stacks zu sein, die einige interessante Nebeneffekte mit sich brachte. Durch die Umgestaltung des bestehenden Stacks wurde der Durchsatz kostenlos um 200 Mb/s erhöht. Groovy Das sind die Neuerungen in Groovy 1.6
- Groovy ist schneller (3-5 mal)
- Neuer Syntax-Zucker: def(a, b) = [0, 1]
- Sie können die Return-Anweisungen am Ende der Methode weglassen. (Der Rückgabewert ist dann der letzte ausgewertete Ausdruck. Wo habe ich das nur schon einmal gesehen? ;-) )
- Es unterstützt die Kompilierzeit-Metaprogrammierung; Sie können den AST zur Kompilierzeit transformieren. (Beispiele werden durch Annotationen gesteuert: @Lazy, @Delegate.)
- Grape ist eine neue Paketierungs-Engine, die bei Bedarf automatisch Abhängigkeiten herunterlädt. Sie können also Skripte schreiben, die von externen Bibliotheken abhängen. Diese Bibliotheken werden dann automatisch aus öffentlichen Repositories heruntergeladen.
- Mit Groovy können Sie jetzt nicht nur Anmerkungen verwenden, sondern auch Anmerkungen definieren.
- @Bindbar
- Griffion für Rich Internet Applications wurde in ein eigenes Projekt ausgegliedert
- Aktualisierungen der ExpandoMetaClass
- JmxBuilder
- OSGi-Unterstützung(!)
Da Vinci (Die Renaissance VM) Ziel ist es derzeit, Unterstützung für invokedynamic (um die Integration mit dynamisch typisierten Sprachen zu erleichtern), Methodenhandles und Schnittstelleninjektion bereitzustellen. Leider ist es unwahrscheinlich, dass die Tail-Call-Optimierung in der nächsten Version enthalten sein wird. Das ist sehr schade. Scala und Clojure, meine Hoffnungen für die VM, hätten davon sehr profitiert. Und das Verrückte ist: Es gibt sie bereits. Arnold Schwaighofer hat den Code für die Tail-Call-Optimierung erstellt, so dass man sich fragt, warum er nicht einfach so eingebaut wird. Es stellt sich heraus, dass das alles mit der Bereitschaft der Leute zu tun hat, dies durch das JCP zu bringen. (Was Sie zum Nachdenken über das JCP bringt...) JavaFX Angesichts der Omnipräsenz von JavaFX auf der JavaOne hatte ich eigentlich erwartet, dass ich etwas mehr damit zu tun haben würde, aber das war nicht der Fall. (Hat mein Unterbewusstsein hier eine Rolle gespielt? Ich hatte sicher nicht die Absicht, es auf jeden Fall zu vermeiden.) Wie dem auch sei, eines der von Nandini Ramani vorgestellten Dinge war ein neues Tool zur Erstellung von JavaFX-Anwendungen. Es sah wunderbar aus: Live-Vorschau, elegantes Drag & Drop, ziemlich cool. Außerdem konnten Sie damit mehrere Plattformen ansteuern und den Code synchron halten. Stellen Sie sich vor, wie das funktioniert: Sie erstellen eine JavaFX-Anwendung, die sowohl für den Desktop als auch für das Telefon bestimmt ist, aber dann - aufgrund des Formfaktors des Telefons - beschließen Sie, einige Grafiken aus der Telefonversion zu entfernen. Das Tool ermöglicht es Ihnen, an den gemeinsamen Teilen weiterzuarbeiten, während die verkleinerte Version synchronisiert bleibt. Ich kann mir vorstellen, wie nützlich das sein kann. Leider wird es noch einige Zeit dauern, bis das Tool auf den Markt kommt... GridGain GridGain ist einfach cool. Die Leichtigkeit, mit der Sie ein Computergitter einrichten können, ist beispiellos. Der Vortrag war auch ziemlich gut. Zugegeben, er blieb an der Oberfläche, aber es ging um Einfachheit, einschließlich der Begriffe Grid und Cloud Computing: Grid: zwei Computer, die an der gleichen Aufgabe arbeiten Grid Computing: Parallele Verarbeitung + parallelisierte Datenspeicherung Cloud: Grid Computing + Data Center Virtualization Ein paar interessante Beobachtungen: Bei Amazon führt eine Verringerung der Latenzzeit um 100 ms zu einem Umsatzrückgang von 1%. Bei Google führt eine Verringerung der Latenzzeit um 500 ms zu einem Rückgang des Datenverkehrs um 20%. Clojure Ich mag es. Sehr sogar. Endlich eine Sprache, bei der sich die Investition in das Erlernen von Lisp lohnt. Das Tolle an Clojure ist, dass:
- Es hat den Overkill an Klammern in Lisp erkannt und das Problem gelöst. (Tatsächlich hat Rich Hickey immer wieder betont, dass Clojure weniger Klammern hat als Java, was interessant ist, wenn Sie darüber nachdenken).
- Es ist eine rein funktionale Sprache.
- Er verfügt über einen eingebauten Software-Transaktionsspeicher.
- Sie können den Status nur über Transaktionen aktualisieren.
- Es unterstützt verschachtelte Transaktionen.
- Intern basiert der Software-Transaktionsspeicher auf Bit-partitionierten Hash-Bäumen, strukturellem Teilen und Pfadkopieren. Oder falls Sie nicht wissen, was das bedeutet: Es ist ziemlich schnell und hat relativ wenig Einfluss auf den Heap.
Google App Engine Ich bin erst am Ende reingekommen. Es war interessant zu sehen, wie sie JDO/JPA auf BigTable abgebildet haben. Ich denke, die wichtigste Erkenntnis ist folgende: Auch wenn die API implementiert ist, sollten Sie sorgfältig prüfen, was hinter den Kulissen geschieht. JPA war eigentlich für die objektrelationale Zuordnung gedacht. BigTable ist keine relationale Datenbank. Dinge, die in JPA auf einer relationalen Datenbank ziemlich effizient sind, werden ziemlich ineffizient sein, wenn sie auf BigTable implementiert werden, und umgekehrt. (Hmmm, das riecht nach einem zukünftigen Blog-Thema.) Frühling 3.0
- Java 5 Syntax-Galore.
- Ausdruckssprache in den Eingeweiden eingebettet.
- REST-Unterstützung, sozusagen eine Erweiterung des neuen Spring MVC.
- Legacy wurde herausgerissen. (Bye bye TaskExecutor. Willkommen java.util.concurrent.)
- Die Signatur von BeanFactory wurde geändert: getBean akzeptiert jetzt sowohl einen Namen als auch ein Typ-Token.
- EL unterstützt sowohl Bean-Eigenschaften als auch Methodenaufrufe und die Konstruktion von Wertobjekten. (Ich bin mir nicht sicher, ob ich die Unterstützung für Methodenaufrufe und die Konstruktion von Wertobjekten in der Expression Language wirklich genieße, aber ich muss definitiv nicht den PropertyPlaceholderConfigurer verwenden).
- Die REST-Unterstützung führt einige neue Annotationen ein, scheint es Ihnen aber auch zu ermöglichen, Ihre eigenen Annotationen zu registrieren. (Ich möchte mir die Abstraktionen ansehen, mit denen sie das handhaben, um zu sehen, ob es eine Übereinstimmung mit der Arbeitsweise von Preon gibt).
- Rod spricht auch über die Java-Konfiguration von Spring. Ich kann mir nicht helfen, aber bei diesem Thema bekomme ich Nasenbluten.
- Am Ende seines Vortrags erwähnt er Spring Roo, bei dem es sich offenbar um eine Art Produktivität von Spring mit Ruby on Rails handelt. Ich bin ein wenig skeptisch.
Sammlungen Verbindung
- Macht immer Spaß. Hmmmmm. Die Notizen zu diesem Thema sind ein wenig lückenhaft. Nun ja, zumindest kommt das irgendwann einmal:
Liste<Zeichenfolge> Liste = ["a,", "b", "c"]; Liste[0] = "d"; Karte<Integer,String> map = [123: "Foo", 321: "Bar"]; map[123] = "Foobar";
- Außerdem werden wir einen neuen Sortiermechanismus haben, der von Python übernommen wurde. Etwas, das als "stabiles, adaptives, iteratives Merge-Sortieren" bezeichnet wird. Die wichtige Nachricht dabei ist, dass er ziemlich schnell ist.
- Und dann stellt sich heraus, dass es einige Probleme mit der Implementierung von ConcurrentLinkedQueue gibt.
- Es wird auch viel über Google Collections gesprochen. (Nicht überraschend, wenn man bedenkt, dass zwei von drei Sprechern von Google kommen.) Es bietet echte Implementierungen von unveränderbaren Sammlungen anstelle von Wrapper-Klassen. Und dann wird auch noch viel über MapMaker gesprochen. Ein Builder, mit dem Sie genau die Art von Karte erstellen können, die Sie benötigen. Auf den ersten Blick scheint es, dass es auch einen großartigen Baustein für Caches bietet, aber dann sagen die Autoren, dass Caching zusätzliche Konstrukte erfordert, zum Beispiel für Cache-Evakuierungsstrategien.
- Er verweist auch auf zwei andere Bibliotheken, die ich mir in der Vergangenheit nie angeschaut habe: Fastutil und Trove.
Gleichzeitigkeitsmodelle Jonas Bonér hielt einen interessanten Vortrag über verschiedene Gleichzeitigkeitsmodelle. Er spricht über STM, das Akteursmodell und die Datenflussgleichzeitigkeit. Die wichtigste Beobachtung ist, dass sie alle einen bestimmten Zweck erfüllen; Sie brauchen diese verschiedenen Modelle unter verschiedenen Umständen. Und Jonas hat Codebeispiele für jede dieser Situationen. Für STM ist es Clojure-basiert. Für das Akteursmodell basiert es auf Scale (er erwähnt Kilim als die wahrscheinlich beste Java-Implementierung) und O2 & Alice als Beispiele für Programmiersprachen, die die Gleichzeitigkeit von Datenflüssen unterstützen. Und dann erwähnt er, dass er eine Implementierung der Datenflussgleichzeitigkeit in Scala vorgenommen hat. Bob Lee über Referenzen Ich muss noch die Folien dieses Vortrags finden. Sehr gründlicher Vortrag über Referenzen. Die Folien sind interessant, da er die Auswirkungen von GCs auf Referenzen deutlich veranschaulicht. (Im Grunde geht er durch Sammlungen und zeigt die Auswirkungen auf Referenzen, während die GC abläuft. Sehr schön.) JPicus Ich habe mich gefragt, warum ich nicht schon früher darauf gestoßen bin. Ziemlich cool, um zu analysieren, was in Bezug auf die E/A passiert. Auch hier sind meine Notizen ziemlich lückenhaft, aber das sollten Sie auf jeden Fall einmal ausprobieren. Ein Zitat habe ich mir allerdings notiert: "Wenn ich etwas Schönes lesen will, setze ich mich hin und schreibe es selbst!" Mark Twain Ich habe Mark Twain schon immer geliebt, aber dies wird mein Motto für 2010 sein. This Is Not Your Father's Von Neumann Machine Erstellt von Brian Goetz und Cliff Click. Vollgepackt mit Assembler-Code. Ich glaube, sie hätten leicht einen ganzen Nachmittag lang darüber sprechen können. Seltsam befriedigend für einen Vortrag, der in meinem Kopf ständig den Alarm der Informationsüberlastung auslöste. Ich glaube, die wichtigste Botschaft war: Wenn Sie moderne Architekturen effizient nutzen wollen, müssen Sie verstehen, wie Ihr Code die CPU-Caches beeinflusst. Lokalität ist wichtig! Glücklicherweise gibt es ein 114-seitiges Dokument, das den Vortrag zusammenfasst. ;-)
Verfasst von

Wilfred Springer
Unsere Ideen
Weitere Blogs
Contact



