- 博客(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
1901
原创 jvm调用JVMTI_EVENT_CLASS_FILE_LOAD_HOOK进行字节码变换的源码分析
1、首先,如果大家对javaagent不是太了解,可以先阅读寒泉子的博客: http://www.infoq.com/cn/articles/javaagent-illustrated?utm_source=tuicool&utm_medium=referral 2、调用入口,ClassFileParser::parseClassFile,jvm在将类字节码解析成运行时的类的之前,就会调用
2016-04-16 11:02:50
3617
原创 用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
1783
原创 openjdk编译和调试
1、环境:ubuntu12.04+gcc 4.6.3 目前还没有在mac上编译成功过 2、下载openjdk http://openjdk.java.net 3、安装JDK7所需要的依赖包 sudo apt-get build-dep openjdk-7 4、编译脚本,会在openjdk的build目录下生成三个版本的java程序 #!/bin/sh #!/bin/bash
2016-04-10 16:03:28
2534
原创 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
658
原创 JVM启动过程的重要数据结构
JVM的数据初始化: typedef struct { CreateJavaVM_t CreateJavaVM; GetDefaultJavaVMInitArgs_t GetDefaultJavaVMInitArgs; } InvocationFunctions; 其数据的初始化是通过直接查找libjvm.so的方法地址 赋值信息 CreateJavaVM -----
2015-12-22 20:47:25
844
原创 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
613
原创 netty内存泄露检测原理
一、为什么netty需要内存泄露检测 由于netty的ByteBuf可能申请自直接内存,这一块是内存是不纳入GC的,如果不释放,会导致直接内存泄露。 二、虚引用 虚引用在实际的引用被释放之前,会将虚引用保存到引用队列中, ReferenceQueue referenceQueue = new ReferenceQueue(); Object oc = new Ob
2015-10-11 17:18:27
2403
原创 netty的对象的生命周期管理——引用计数
一、何谓引用计数 二、引用计数的应用 三、引用计数的局限 四、netty的引用计数的实现 五、netty的内存泄露检查 六、netty的引用计数的使用举例
2015-10-07 23:59:30
2596
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
5561
原创 equinox的框架的类加载器
不同的类加载器加载的类,会有不同的命名空间,不同命名空间的类不能够感受到彼此的存在,并且不同的命名空间中,类型的数据是不同的,如下图所示: 所以对于同一个类,由不同的类加载器加载,即使是static的成员变量,也不是公用的,每一个类都有一份自己的static成员变量的数据。 所以为了达到这种粒度的类的隔离,可以用不同的类加载器进行加载。 equinox框架加载整个框架
2015-09-17 23:43:13
737
原创 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
859
人人sdk-python
2013-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅