Skip to content

Instantly share code, notes, and snippets.

@chergey
chergey / ASTToMHCompiler.java
Created September 30, 2018 22:14 — forked from forax/ASTToMHCompiler.java
A compiler that takes a toy AST and generate the corresponding method handle tree
import static java.lang.invoke.MethodHandles.constant;
import static java.lang.invoke.MethodHandles.dropArguments;
import static java.lang.invoke.MethodHandles.empty;
import static java.lang.invoke.MethodHandles.identity;
import static java.lang.invoke.MethodHandles.loop;
import static java.lang.invoke.MethodHandles.publicLookup;
import static java.lang.invoke.MethodType.methodType;
import static java.util.stream.IntStream.range;
import java.lang.invoke.MethodHandle;
@chergey
chergey / ObjectHeader32.txt
Created September 29, 2018 15:42 — forked from arturmkrtchyan/ObjectHeader32.txt
Java Object Header
|----------------------------------------------------------------------------------------|--------------------|
| Object Header (64 bits) | State |
|-------------------------------------------------------|--------------------------------|--------------------|
| Mark Word (32 bits) | Klass Word (32 bits) | |
|-------------------------------------------------------|--------------------------------|--------------------|
| identity_hashcode:25 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Normal |
|-------------------------------------------------------|--------------------------------|--------------------|
| thread:23 | epoch:2 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Biased |
|-------------------------------------------------------|--------------------------------|--------------------|
|
void Main()
{
var summary = BenchmarkRunner.Run<Bench>(new AllowNonOptimized());
}
public class AllowNonOptimized : ManualConfig
{
public AllowNonOptimized()
{
Add(JitOptimizationsValidator.DontFailOnError); // ALLOW NON-OPTIMIZED DLLS
@chergey
chergey / ChangeAnnotationAtRuntime.java
Created September 13, 2018 09:24 — forked from henrrich/ChangeAnnotationAtRuntime.java
Modify annotation at runtime, java 8 support
public final class RuntimeAnnotations {
private static final Constructor<?> AnnotationInvocationHandler_constructor;
private static final Constructor<?> AnnotationData_constructor;
private static final Method Class_annotationData;
private static final Field Class_classRedefinedCount;
private static final Field AnnotationData_annotations;
private static final Field AnnotationData_declaredAnotations;
private static final Method Atomic_casAnnotationData;
private static final Class<?> Atomic_class;
@chergey
chergey / Reflect.java
Created August 29, 2018 13:51
Reified generics for Java 8 Lambdas
import sun.reflect.ConstantPool;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Objects;
/**
* This approach was inspired by code from @danielbodart
@chergey
chergey / ExtractOriginalMethodNameFromReferenceExample.java
Created July 26, 2017 18:03 — forked from thomasdarimont/ExtractOriginalMethodNameFromReferenceExample.java
One can use a SerializedLambda to unreflect the actual method referred to by a MethodReference
package de.tdlabs.training.hacks;
import java.io.Serializable;
import java.lang.invoke.SerializedLambda;
import java.lang.reflect.Method;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
import static java.util.Arrays.asList;
@chergey
chergey / cs
Last active June 30, 2017 06:16
ReflectionTypeLoadException
class Test
{
public static void Main(String[] args)
{
}
interface Type1<T> { }