Skip to content

Instantly share code, notes, and snippets.

View vyazelenko's full-sized avatar

Dmytro Vyazelenko vyazelenko

View GitHub Profile
@vyazelenko
vyazelenko / TemporaryFolderTest.java
Created October 15, 2011 11:03
Test file to reproduce IllegalStateException on TemporaryFolder.newFile(String)
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import java.io.File;
import java.io.IOException;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class TemporaryFolderTest {
@vyazelenko
vyazelenko / CloneIsShallow.java
Created December 10, 2015 16:51
Java code to demonstrate that clone() is shallow by default
import java.util.Arrays;
import java.util.List;
class ClassWithState implements Cloneable {
int x = 15;
Long y = Long.MAX_VALUE / 3;
String z = new String("new Z");
List<String> data = Arrays.asList("a", "b", "and", "c");
@Override
@vyazelenko
vyazelenko / CopyObjectFieldByField.java
Last active December 26, 2015 19:49
Copy object field by field
public static void copyFieldByField(Object src, Object dest) {
copyFields(src, dest, src.getClass());
}
private static void copyFields(Object src, Object dest, Class<?> klass) {
Field[] fields = klass.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
copyFieldValue(src, dest, f);
}
@vyazelenko
vyazelenko / CopyBenchSample.java
Created October 28, 2013 21:08
Copy benchmark sample
@GenerateMicroBenchmark
public Object copyFieldByFieldGetFieldsEveryTime() {
return FieldsCopy.INSTANCE.copy();
}
@GenerateMicroBenchmark
public Object copyFieldByFieldUseCacheFields() {
return CachedFieldsCopy.INSTANCE.copy();
}
@vyazelenko
vyazelenko / MethodHandleInvokeExactSample.java
Created October 28, 2013 21:16
MethodHandle#invokeExact() invocation example
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
class Base {
int x = 13;
}
class Derived extends Base {
public long m;
}
private static MethodHandle prepareGetter(MethodHandle mh) {
return mh.asType(mh.type().changeParameterType(0, Object.class)
.changeReturnType(Object.class));
}
private static MethodHandle prepareSetter(MethodHandle mh) {
return mh.asType(mh.type().changeParameterType(0, Object.class)
.changeParameterType(1, Object.class));
}
@vyazelenko
vyazelenko / CloneCopy.java
Created October 29, 2013 20:10
Class that copies itself using clone() method
package com.vyazelenko.blog.copyobject.primitives.clone;
import com.vyazelenko.blog.copyobject.primitives.BaseClass;
public class CloneCopy extends BaseClass implements Cloneable {
public static final CloneCopy INSTANCE;
static {
INSTANCE = new CloneCopy();
INSTANCE.init();
@vyazelenko
vyazelenko / ConstructorCopy.java
Last active December 26, 2015 22:18
Class that copies itself via copy constructor
package com.vyazelenko.blog.copyobject.primitives.constructor;
import com.vyazelenko.blog.copyobject.primitives.BaseClass;
public class ConstructorCopy extends BaseClass implements Cloneable {
public static final ConstructorCopy INSTANCE;
static {
INSTANCE = new ConstructorCopy();
INSTANCE.init();
@vyazelenko
vyazelenko / BaseClass.java
Created October 29, 2013 20:15
Common base class for copy tests
package com.vyazelenko.blog.copyobject.primitives;
import com.vyazelenko.blog.copyobject.Copyable;
import com.vyazelenko.blog.copyobject.HashUtils;
abstract class Root implements Copyable {
private int field1;
private char field2;
public boolean field6;
byte abc;
@vyazelenko
vyazelenko / CloneIntrinsics.hpp
Created October 29, 2013 21:32
Snipper from JVM code showing that clone() is intrinsified by JVM
/*
* Defined in the hotspot/src/share/vm/classfile/vmSymbols.hpp
*/
#define VM_SYMBOLS_DO(template, do_alias) \
/* commonly used class names */ \
template(java_lang_System, "java/lang/System") \
template(java_lang_Object, "java/lang/Object") \
...