Skip to content

Instantly share code, notes, and snippets.

View serkan-ozal's full-sized avatar

Serkan ÖZAL serkan-ozal

View GitHub Profile
@serkan-ozal
serkan-ozal / ClassCopyDemo.java
Created November 24, 2016 17:08
ClassCopyDemo
import java.lang.reflect.Field;
import sun.misc.Unsafe;
import javassist.ClassPool;
import javassist.CtClass;
public class ClassCopyDemo {
/*
<!-- Javassist dependency -->
@serkan-ozal
serkan-ozal / SingleInstanceProviderWithSingleInstanceCreationGuaranteeByCAS.java
Last active April 15, 2016 15:13
Yet Another Single Instance Creation Approach
private static class SingleInstanceProviderWithSingleInstanceCreationGuaranteeByCAS
implements SingleInstanceProvider {
private static final long INSTANCE_WRAPPER_OFFSET;
static {
try {
INSTANCE_WRAPPER_OFFSET =
UNSAFE.objectFieldOffset(
SingleInstanceProviderWithSingleInstanceCreationGuaranteeByCAS.class.
@serkan-ozal
serkan-ozal / gist:642ab32631b0e1c7b9ad
Last active August 29, 2015 14:22
Diassembled code of problematic frame cause JVM crash
...
12897 1652 3 com.hazelcast.nio.serialization.NativeMemoryDataUtil::equals (75 bytes)
Decoding compiled method 0x0000000101f0c890:
Code:
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} {0x000000011e5f1650} 'equals' '(JLcom/hazelcast/nio/serialization/Data;)Z' in 'com/hazelcast/nio/serialization/NativeMemoryDataUtil'
# parm0: rsi:rsi = long
71 1 n 0 java.lang.System::arraycopy (native) (static)
73 2 3 java.lang.String::equals (81 bytes)
73 3 3 java.lang.String::hashCode (55 bytes)
74 4 3 java.lang.String::indexOf (70 bytes)
76 5 3 java.lang.String::lastIndexOf (52 bytes)
76 6 4 java.lang.String::charAt (29 bytes)
76 7 3 java.lang.String::length (6 bytes)
76 8 3 java.lang.Math::min (11 bytes)
76 9 3 java.lang.Object::<init> (1 bytes)
77 12 3 java.util.Arrays::copyOfRange (63 bytes)
@serkan-ozal
serkan-ozal / gist:9aab6d582a231e8bed7c
Last active August 29, 2015 14:22
Turkish version of the Reactive Manifesto

Reaktif Manifesto

Farklı alanlarda faaliyet gösteren organizasyonlar, modern ihtiyaçları karşılayabilmek amacıyla giderek daha sağlam, dayanıklı ve esnek sistemler geliştirmektedirler. Bu tarz yazılım sistemleri geliştirmek için birbirlerinden bağımsız olarak tasarım örüntüleri ve yazılım mimarileri ortaya çıkmaktadır.

Son yıllarda ihtiyaçların önemli ölçüde değişmesi ile yeni yazılım mimarileri ve tasarım örüntüleri ortaya çıkmıştır. Sadece birkaç yıl önce büyük bir uygulama demek, onlarca sunucu, saniyelerle ölçülen geribildirim süreleri, saatlerce süren bakım çalışmaları ve gigabyte'larca veri demekti. Fakat bugünün modern uygulamaları mobil cihazlardan, milyonlarca işlemcili sunucu kümelerine kadar değişik şekillerde karşımıza çıkmaktadırlar. Veriler ise artık petabyte'lar ile ölçülmektedir. Özetle, bugünün ihtiyaçları dünün yazılım mimarileriyle karşılanamamaktadır.

Bizler sistemlerin duyarlı, dayanıklı, elastik ve mesaj güdümlü yönlerinin gerekliliğini kabullenmekte ve sistem

@serkan-ozal
serkan-ozal / gist:a920d017eff755670c24
Last active August 29, 2015 14:22
Jillegal String Hack
InstrumentService instrumentService = InstrumentServiceFactory.getInstrumentService();
Instrumenter<String> inst = instrumentService.getInstrumenter(String.class);
GeneratedClass<String> redefinedClass =
inst.
updateMethod("charAt", "return value[$1 - 1];", int.class).
build();
instrumentService.redefineClass(redefinedClass);
System.out.println("str".charAt(1)); // Prints "s" instead of "t"
@serkan-ozal
serkan-ozal / gist:61cb90effcf46454e2db
Created May 21, 2015 16:22
Jemstone StackTracer Output 2
HotSpotSAStackTracerResult [stackTraces=
- Thread Name: main
|- tr.com.serkanozal.jemstone.Demo.method2(boolean, int, float, long, double, char, java.lang.String) @bci=100, line=74, pc=0x00000001078797e4 (Interpreted frame)
parameters:
name value type
==============================================================================
|- b2 false boolean
|- i2 100 int
|- f2 400.000000 float
|- l2 900 long
@serkan-ozal
serkan-ozal / gist:81ab93fc5aa2c5d7b7e3
Created May 17, 2015 20:57
Jemstone StackTracer Output
HotSpotSAStackTracerResult [stackTraces=
- Thread Name: main
|- java.lang.ProcessImpl.waitForInterruptibly(long) @bci=0, pc=0x0000000002802ece, Method*=0x00000000173d22d8 (Interpreted frame)
local values:
order value type
==============================================================================
|- 0 3567204840 (0xd49f39e8) <primitive>
|- 1 928 (0x3a0) <primitive>
|- java.lang.ProcessImpl.waitFor() @bci=4, line=449, pc=0x00000000027f7380, Method*=0x00000000173d2250 (Interpreted frame)
local values:
@serkan-ozal
serkan-ozal / gist:b6a9701801279736e5ec
Created February 8, 2015 11:54
A Hacky Way to Clean All Thread Local Variables of Current Thread
void cleanThreadLocalsOfCurrentThread() {
try {
// Get a reference to the thread locals table of the current thread
Thread thread = Thread.currentThread();
Field threadLocalsField = Thread.class.getDeclaredField("threadLocals");
threadLocalsField.setAccessible(true);
Object threadLocalTable = threadLocalsField.get(thread);
// Get a reference to the array holding the thread local variables inside the
// ThreadLocalMap of the current thread
@serkan-ozal
serkan-ozal / gist:fbc49d217acdeae27c82
Created December 24, 2014 18:09
The Road to Mordor
//==========================//
// //
// Serkan Özal //
// No : 20421876 //
// //
// The Road to Mordor //
// //
//==========================//