- 博客(12)
- 资源 (4)
- 收藏
- 关注
原创 常用的JVM数据结构
1、JVM创建的数据结构(hotspot/src/share/tools/launcher/java.h)typedef jint (JNICALL *CreateJavaVM_t)(JavaVM **pvm, void **env, void *args);typedef jint (JNICALL *GetDefaultJavaVMInitArgs_t)(void *args);type
2016-04-17 22:30:30 1763
原创 jvm调用JVMTI_EVENT_CLASS_FILE_LOAD_HOOK进行字节码变换的源码分析
1、首先,如果大家对javaagent不是太了解,可以先阅读寒泉子的博客:http://www.infoq.com/cn/articles/javaagent-illustrated?utm_source=tuicool&utm_medium=referral2、调用入口,ClassFileParser::parseClassFile,jvm在将类字节码解析成运行时的类的之前,就会调用
2016-04-16 11:02:50 3258
原创 用javaagent来对java字节码进行变换
1、实现变换的函数typedef void (JNICALL *jvmtiEventClassFileLoadHook) //类字节码变换的回调接口 (jvmtiEnv *jvmti_env, //注册的jvmti JNIEnv* jni_env, //JNI环境 jclass class_being_redefined, // jobject loader,
2016-04-16 10:45:07 1638
原创 openjdk编译和调试
1、环境:ubuntu12.04+gcc 4.6.3目前还没有在mac上编译成功过2、下载openjdkhttp://openjdk.java.net3、安装JDK7所需要的依赖包sudo apt-get build-dep openjdk-7 4、编译脚本,会在openjdk的build目录下生成三个版本的java程序#!/bin/sh#!/bin/bash
2016-04-10 16:03:28 2342
原创 JVM OS::init()源码分析
void os::init(void) { char dummy; /* used to get a guess on initial stack address */// first_hrtime = gethrtime(); // With LinuxThreads the JavaMain thread pid (primordial thread) // is dif
2015-12-22 23:36:35 560
原创 JVM启动过程的重要数据结构
JVM的数据初始化:typedef struct { CreateJavaVM_t CreateJavaVM; GetDefaultJavaVMInitArgs_t GetDefaultJavaVMInitArgs;} InvocationFunctions;其数据的初始化是通过直接查找libjvm.so的方法地址赋值信息CreateJavaVM -----
2015-12-22 20:47:25 742
原创 java switch语句探索
1、问题对于下面的代码:public class Switch{ public void test(int i) { switch(i) { case 0: case 1: System.out.println("a"); break; case 2: System.out.println("a"); break; defaul
2015-12-15 00:26:47 546
原创 netty内存泄露检测原理
一、为什么netty需要内存泄露检测由于netty的ByteBuf可能申请自直接内存,这一块是内存是不纳入GC的,如果不释放,会导致直接内存泄露。二、虚引用虚引用在实际的引用被释放之前,会将虚引用保存到引用队列中,ReferenceQueue referenceQueue = new ReferenceQueue(); Object oc = new Ob
2015-10-11 17:18:27 2169
原创 netty的对象的生命周期管理——引用计数
一、何谓引用计数二、引用计数的应用三、引用计数的局限四、netty的引用计数的实现五、netty的内存泄露检查六、netty的引用计数的使用举例
2015-10-07 23:59:30 2429 3
原创 记一次解决Visual Paradigm打开始终是在Initializing Environment的问题
1、问题描述:mac下的Visual Paradigm第一次打开的时候,卡死在了Initializing Environment的slash页面上分析过程:a、因为知道VP是使用java编写的,打开启动脚本:cd /Applications/Visual\ Paradigm\ 12.2/scripts发现VP的启动脚本:VisualParadigm.sh 内容是:#!/
2015-10-05 12:59:08 5067 1
原创 equinox的框架的类加载器
不同的类加载器加载的类,会有不同的命名空间,不同命名空间的类不能够感受到彼此的存在,并且不同的命名空间中,类型的数据是不同的,如下图所示:所以对于同一个类,由不同的类加载器加载,即使是static的成员变量,也不是公用的,每一个类都有一份自己的static成员变量的数据。所以为了达到这种粒度的类的隔离,可以用不同的类加载器进行加载。equinox框架加载整个框架
2015-09-17 23:43:13 621
原创 Linux内核模块编程_struct list_head
#include #include #include #include #define mm_malloc(size) kmalloc(size, GFP_KERNEL)#define mm_free(ptr) kfree(ptr)struct Word{ int number; struct list_head list;};#define WORD(n
2013-03-21 16:17:06 768
人人sdk-python
2013-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人