Contactdetails

NLJUG
Postbus 54
3780 BB Voorthuizen

Telefoon
0900-BEL NLJUG (10 ct/m)
0900-2356558 (10 ct/m)

Fax
0342 475880

Email
Algemeen: info@nljug.org
Leden: members@nljug.org

BTW: NL814104484B01
KVK: 30200958

Bank
Rabo: 3123.20.973
BIC: RABONL2U
IBAN: NL47RABO0312320973
NLJUG te Son
Algemene voorwaarden 

Membership

Membership provides members free access to the NLJUG workshops and events on a variety of Java topics, held across the country on a regular basis. Plus on a quarterly basis the Java Magazine published by Array Systems. The NLJUG is a member of a worldwide network of Java User Groups.

Fill in the form to sign up.

NLJUG

Founded in 1998, the Dutch Java Users Group consists of business partners, software developers, application architects, technical managers, students, and new media developers that have a common interest in all aspects of Java Technology.

NLJUG partners

Inology

Mediapartner

Het JavaMagazine, gratis bij een NL-JUG lidmaatschap

JDK7: Improved support for dynamic languages

De release van Java 7 nadert. Naast vernieuwing op het vlak van de taal en libraries, staan er voor deze release ook grote wijzigingen in de Java Virtual Machine op stapel. Sun heeft met het experimentele ‘Da Vinci Machine’ (multi-language VM) project verschillende interessante innovaties kunnen prototypen. Concreet levert dat voor de JDK 7 release een aantal nieuwe VM features op, waarvan support voor dynamische talen de belangrijkste is. 

Gezien de groeiende populariteit van alternatieve talen op het JVM platform is deze ontwikkeling, die via JSR-292 gestandaardiseerd wordt, significant te noemen. Voor het eerst wordt de architectuur van de JVM aangepast aan talen naast Java. In deze sessie gaan we kijken wat de voorgestelde ‘invokedynamic’ bytecode betekent en doet. Om hier een goed gevoel voor te krijgen moeten we in de huid van implementors van dynamische talen op de JVM kruipen. Hierbij wordt aan de hand van kleine voorbeelden duidelijk dat de huidige situatie verre van ideaal is. Dit heeft zijn weerslag op de performance van deze taal implementaties. 

De invokedynamic oplossing die in JDK7 komt, is opgebouwd uit verschillende kleinereonderdelen. Ten eerste wordt het dynamisch laden van anonieme classes mogelijk gemaakt en kunnen deze classes ook door garbage collection weer opgeruimd worden. Dit in tegenstelling tot het normale classloading mechanisme, dat veel overhead kent en classes voor de levensduur van de VM vasthoudt. 

Ten tweede worden zogenaamde lightweight method handles geïntroduceerd. Method handles zijn een soort functie pointers, die dynamisch gelinkt kunnen worden aan bestaande methodes van een class. Uiteraard is dit op een veilige manier geïmplementeerd, in lijn met de Java filosofie. Aangezien de VM kennis heeft van method handles, werkt deze oplossing veel efficiënter dan bijvoorbeeld een java.lang.reflect.Method opzoeken en aanroepen via reflectie. 

Het laatste stukje van de puzzel is de invokedynamic bytecode zelf. Deze maakt het mogelijk om een methode aanroep te doen zonder dat de argument-types en locatie van de aanroep (call-target) compile-time bekend zijn. Wanneer een invokedynamic bytecode uitgevoerd wordt, zal de VM een speciale bootstrap methode aanroepen, die zich bevindt in de class van de aanroep. Deze bootstrap methode is verantwoordelijk voor het aanwijzen (of creëren) van de juiste implementatie. Dit aanwijzen gebeurt uiteraard met een method handle. Deze method handle wordt daarna door de VM hetzelfde behandeld als een normale aanroep en kan daarom volledig geoptimaliseerd worden. Dit biedt dus zowel een flexibele manier van het binden van methode aanroepen, als goede performance. 

Naast de implementatie in JDK7 zal er ook een backport voor eerdere JDKs beschikbaar komen. Verder wordt via Project Coin een syntax uitbreiding op Java gedaan om de JSR-292 innovaties ook in de Java taal te kunnen gebruiken. 

Deze sessie is gericht op ontwikkelaars die geïnteresseerd zijn in de toekomst van het Java platform, buiten alleen de taal Java. De sessie is primair technisch van aard, maar reflecteert ook op de toekomstperspectieven van het Java platform. Hoewel de besproken vernieuwingen niet direct dagelijks in applicatie-code zullen terugkomen, geven ze een duidelijk beeld van de bredere visie op Java development die de JDK7 VM zal voorstaan. 

Structuur

1. Introductie

Dynamische talen en het Java platform tot nu toe
JDK7 en research-vm ‘Da Vinci Machine’ introduceren

2. Probleemstelling

Implementatie dynamische taalfeatures op JVM problematisch
Performance suboptimaal3. Oplossing in JDK7
Anonymous classloading
Lightweight method handles
Nieuwe invokedynamic bytecode

4. (Optioneel) Korte demo JSR-292 o.b.v. experimentele JDK7 build
5. Conclusie en vooruitblik op toekomst van alternatieve talen op de JVM

Voorkennis
Enige kennis van dynamische talen zoals b.v. Groovy of JRuby is handig. Verder zal een groot deel van de sessie ingaan op de interne werking van de JVM. Basiskennis van hoe Java in grote lijnen naar bytecode compileert, wordt verondersteld.

 Download de presentatie

 


Sander Mak 
Info Support BV
Sander studeerde Software Technology aan de Universiteit Utrecht en is momenteel werkzaam als lead developer bij Info Support BV. Daarnaast is hij actief in het Competence Center Java van Info Support. Je kent hem misschien van artikelen in Java Magazine (o.a. 'Scala voor Java ontwikkelaars' en 'Hibernate Performance & Tuning') of eerdere presentaties op J-Fall in de afgelopen jaren. Sander sprak in 2011 onder meer op de Java 7 Launch Events georganiseerd door NLJUG/Oracle.