Skip to content

Instantly share code, notes, and snippets.

View forax's full-sized avatar

Rémi Forax forax

  • University Gustave Eiffel (Paris)
  • Paris, France
View GitHub Profile
package fr.umlv.stream;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.reflect.UndeclaredThrowableException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.function.BiFunction;
@forax
forax / Interpreter.java
Last active May 19, 2024 18:23
Threaded like interpreter in Java
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.invoke.MutableCallSite;
import java.util.Arrays;
@forax
forax / FunPIC2.java
Created July 29, 2016 14:57
Create a polymorphic inline cache that doesn't deoptimize a lot
import static java.lang.invoke.MethodHandles.exactInvoker;
import static java.lang.invoke.MethodHandles.foldArguments;
import static java.lang.invoke.MethodHandles.guardWithTest;
import static java.lang.invoke.MethodHandles.insertArguments;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodHandles.publicLookup;
import static java.lang.invoke.MethodType.methodType;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;
@forax
forax / LookupProxyTest.java
Created July 24, 2016 17:46
get the trusted lookup using Unsafe.defineAnonymousClass
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
import java.util.Base64;
public class LookupProxyTest {
static final String PROXY_CLASS =
"yv66vgAAADUAGQoABAAQCQAKABEHABIHABMBAAY8aW5pdD4BAAMoKVYBAARD" +
@forax
forax / FunPIC.java
Last active July 23, 2016 15:00
same PIC but the test code is slighly altered
package java.lang.invoke;
import java.lang.invoke.MethodHandles.Lookup;
import java.net.URI;
import java.net.URISyntaxException;
// compile with:
// /usr/jdk/jdk-9/bin/javac -Xmodule:java.base -d ../classes java/lang/invoke/FunPIC.java
// execute with:
// /usr/jdk/jdk-9/bin/java -Xpatch:java.base=../classes -m java.base/java.lang.invoke.FunPIC
package java.lang.invoke;
import java.lang.invoke.MethodHandles.Lookup;
import java.net.URI;
import java.net.URISyntaxException;
// compile with:
// /usr/jdk/jdk-9/bin/javac -Xmodule:java.base -d ../classes java/lang/invoke/FunPIC.java
// execute with:
// /usr/jdk/jdk-9/bin/java -Xpatch:java.base=../classes -m java.base/java.lang.invoke.FunPIC
@forax
forax / gist:24620b80b9cd775e0bd1
Last active August 29, 2015 14:07
Proxy 2.0 in one file
package java.lang.invoke;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;
import java.util.Arrays;
import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.internal.org.objectweb.asm.FieldVisitor;
@forax
forax / gist:ddf39fd28383dd5c72fd
Created September 13, 2014 18:21
To infiny and beyond ...
import java.util.Random;
import java.util.function.IntFunction;
import java.util.stream.Collectors;
public interface SayHi {
public static void main(String[] args) {
IntFunction<String> fun = s -> new Random(s)
.ints(6, 0, 27)
.filter(v -> v != 0)
.mapToObj(v -> "" + (char)('`' + v))
import java.lang.invoke.CallSite;
import java.lang.invoke.ConstantCallSite;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;