---
title: 'Schneller aufrufen mit MethodType und MethodHandle'
url: 'https://tutego.de/blog/javainsel/2017/03/schneller-aufrufen-mit-methodtype-und-methodhandle'
markdown: 'https://tutego.de/blog/javainsel/2017/03/schneller-aufrufen-mit-methodtype-und-methodhandle.md'
date: '2017-03-03'
description: 'Um dynamische Programmiersprachen wie JavaScript performant auf die JVM zu bringen wurde in Java 7 der neue Bytecode invokedynamic eingeführt und das Paket lang.invoke. Java8 greift zur Umsetzung der Lambda-Ausdrücke massiv auf invokedynamic zurück. Aufgabe des Pakets ist es, dynamisch Methoden sch…'
taxonomy:
  category:
    - Allgemein
    - Insel
---

# Schneller aufrufen mit MethodType und MethodHandle

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Schneller aufrufen mit MethodType und MethodHandle

03.03.2017 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Um dynamische Programmiersprachen wie JavaScript performant auf die JVM zu bringen wurde in Java 7 der neue Bytecode invokedynamic eingeführt und das Paket lang.invoke. Java8 greift zur Umsetzung der Lambda-Ausdrücke massiv auf invokedynamic zurück.

Aufgabe des Pakets ist es, dynamisch Methoden schnell aufzurufen, und zwar deutlich schneller als Reflection das kann, weil in der JVM der Methodenaufruf so optimiert wird wie ein ganz normaler Methodenaufruf auf ein Zielobjekt. Dazu müssen aber die Typen exakt vorliegen, sodass es schärfere Anforderungen gibt als bei Reflection, dort ist z. B. der Rückgabetyp beim Aufruf irrelevant.

Um einen dynamischen Methodenaufruf zu starten ist zunächst eine exakte Beschreibung der Rückgabe- und Parametertypen nötig – das übernimmt ein MethodType-Objekt. Ist das aufgebaut, wird ein MethodHandle erfragt, ein getypter, direkt ausführbarer Verweis auf die repräsentierte Methode. Die MethodHandle-Methode `invoke(…)` führt dann den Aufruf mit gegebenen Argumente auf.

Dazu ein Beispiel. Wir möchten auf einem Rectangle-Objekt die Methode `union(Rectangle)` aufrufen, um als Ergebnis ein neues Rectangle zu bekommen, was die beiden Rechtecke vereinigt.

```

Object rect1 = new Rectangle( 10, 10, 10, 10 );

String methodName = "union"; 

Class resultType = Rectangle.class;

Object rect2 = new Rectangle( 20, 20, 100, 100 );

Class
```

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/), [Insel](https://tutego.de/blog/javainsel/category/insel/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Java DB nicht mehr in Java 9](https://tutego.de/blog/javainsel/2017/03/java-db-nicht-mehr-in-java-9.md)
- Next: [Inselraus: JDBC Treibertypen](https://tutego.de/blog/javainsel/2017/03/inselraus-jdbc-treibertypen.md)
