¿Cómo puedes extender Java para introducir pasar por referencia?

Java es el paso por valor. ¿Cómo podría modificar el lenguaje para introducir el paso por referencia (o algún comportamiento equivalente)?

Tomemos por ejemplo algo como

public static void main(String[] args) {
    String variable = "'previous String reference'";
    passByReference(ref variable);
    System.out.println(variable); // I want this to print 'new String reference'
}

public static void passByReference(ref String someString) {
    someString = "'new String reference'";
}

el cual (sin elref) compila a lo siguientebytecode

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String 'previous String reference'
       2: astore_1
       3: aload_1
       4: invokestatic  #3                  // Method passByReference:(Ljava/lang/String;)V
       7: return

  public static void passByReference(java.lang.String);
    Code:
       0: ldc           #4                  // String 'new String reference'
       2: astore_0
       3: return

El código en3: carga la referencia en la pila desde la variablevariable.

Una posibilidad que estoy considerando es hacer que el compilador determine que un método se pasa por referencia, posiblemente conrefy cambie el método para aceptar un objeto Holder que almacena la misma referencia que nuestra variable. Cuando el método se completa, y posiblemente cambia esa referencia en el titular, la variable en el valor del lado que llama se reemplaza con el valor de referencia del titular.

Se debe compilar a un equivalente de este

public static void main(String[] args) {
    String variable = "'previous String reference'";
    Holder holder = Holder.referenceOf(variable);
    passByReference2(holder);
    variable = (String) holder.getReference(); // I don't think this cast is necessary in bytecode
    System.out.println(variable);
}

public static void passByReference(Holder someString) {
    someString.setReference("'new String reference'");
}

dóndeHolder podría ser algo como

public class Holder {
    Object reference;
    private Holder (Object reference) {
        this.reference = reference;
    }
    public Object getReference() {
        return this.reference;
    }
    public void setReference(Object reference) {
        this.reference = reference;
    }
    public static Holder referenceOf(Object reference) {
        return new Holder(reference);
    }
}

¿Dónde puede fallar esto o cómo podría mejorarlo?