原创 java switch語句探索

1、問題 對於下面的代碼: public class Switch{ public void test(int i) { switch(i) { case 0: case 1: System.out.printl

原创 記一次解決Visual Paradigm打開始終是在Initializing Environment的問題

1、問題描述:mac下的Visual Paradigm第一次打開的時候,卡死在了Initializing Environment的slash頁面上 分析過程: a、因爲知道VP是使用java編寫的,打開啓動腳本: cd /Applica

原创 netty內存泄露檢測原理

一、爲什麼netty需要內存泄露檢測 由於netty的ByteBuf可能申請自直接內存,這一塊是內存是不納入GC的,如果不釋放,會導致直接內存泄露。 二、虛引用 虛引用在實際的引用被釋放之前,會將虛引用保存到引用隊列中, Referen

原创 jvm調用JVMTI_EVENT_CLASS_FILE_LOAD_HOOK進行字節碼變換的源碼分析

1、首先,如果大家對javaagent不是太瞭解,可以先閱讀寒泉子的博客: http://www.infoq.com/cn/articles/javaagent-illustrated?utm_source=tuicool&utm_med

原创 Linux內核模塊編程_struct list_head

#include <linux/list.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/mm.h> #define mm_malloc(s

原创 常用的JVM數據結構

1、JVM創建的數據結構(hotspot/src/share/tools/launcher/java.h)typedef jint (JNICALL *CreateJavaVM_t)(JavaVM **p

原创 openjdk編譯和調試

1、環境:ubuntu12.04+gcc 4.6.3 目前還沒有在mac上編譯成功過 2、下載openjdk http://openjdk.java.net 3、安裝JDK7所需要的依賴包 sudo apt-get build-dep o

原创 用javaagent來對java字節碼進行變換

1、實現變換的函數typedef void (JNICALL *jvmtiEventClassFileLoadHook) //類字節碼變換的回調接口 (jvmtiEnv *jvmti_env, /

原创 equinox的框架的類加載器

不同的類加載器加載的類,會有不同的命名空間,不同命名空間的類不能夠感受到彼此的存在,並且不同的命名空間中,類型的數據是不同的,如下圖所示: 所以對於同一個類,由不同的類加載器加載,即使是static的成員變量,也不是公用的,每一個類都

原创 JVM OS::init()源碼分析

void os::init(void) { char dummy; /* used to get a guess on initial stack address */ // first_hrtime = gethrtime()

原创 netty的對象的生命週期管理——引用計數

一、何謂引用計數 1.1 引用計數 引用計數是一種簡單高效的垃圾回收機制,當一個新的引用指向對象的時候,增加引用計數;去掉一個引用,就減小一個引用計數;當引用計數減到0的時候,就釋放掉這個引用計數。 1.2 引用計數的增減    對於一