Java虚拟机学习

文章是对自己学习的一个总结
参考资料:http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 刘望舒的blog
Java虚拟机学习_第1张图片
刘望舒的blog

一、类加载器

类加载器负责加载class文件到虚拟机中:
1.Bootstrap ClassLoader:负责加载系统运行时需要加载的类,虚拟机的启动就是由它完成的。它是由C编写的,Java代码访问不到。
2.Extensions Class Loader:负责加载除系统以外额外功能的类
3.Application Class Loader:负责加载用户编写的代码,它将拓展类加载器作为父类,在使用应用类加载器时,它首先会使用拓展类加载器加载,如果加载成功返回Class的实例,如果没有会询问引导类加载器是否加载过,如果引导类加载器也没有加载过,才会使用Application Class Loader加载。

二、虚拟机的内存分配

1.程序计数器
它保证程序指令执行的顺序,在一个时刻同一个CPU只有一条指令在执行。每一个线程都有一个程序计数器,它保证在线程切换时,程序能够程序计数器所在的位置执行相应的指令

2.虚拟机栈区
负责存储局部变量,方法的调用状态。每一个线程都有一个私有的虚拟机栈,线程调用过的方法都是一个个栈帧。每一个栈帧保存着一个方法的调用状态。

3.本地方法栈
负责管理c相关的内存

4.Java堆区
堆的内存被所有线程所共享,管理着对象。分为老年代和年轻代

5.方法区
负责维护静态常量池,字段信息等信息

三、ART和DVM虚拟机的区别

DVM是即时编译,当程序运行时会将代码编译成机器码。而ART是在安装时就把程序转换成机器码存储在本地,不需要运行时编译了。

四、GC日志解读

http://liuwangshu.cn/application/performance/ram-2-gc.html
1.dvm虚拟机gc日志

D/dalvikvm: GC_CONCURRENT freed 2012K, 63% free 3213K/9291K, external 4501K/5161K, paused 2ms+2ms

dvm并发回收垃圾,释放了2012k字节,空余的堆内存有63%,使用内存3213k总内存9291k,暂停时间4ms.
2.ART内存回收

I/art : Explicit concurrent mark sweep GC freed 104710(7MB) AllocSpace objects, 
21(416KB) LOS objects, 33% free, 25MB/38MB, paused 1.230ms total 67.216ms

art并发使用标记清楚法回收内存,释放对象104719个(释放7m内存),释放大对象21个(416字节),空闲堆内部才能33%,使用中的内部才能25M,堆的总内存38M。暂停1.230ms。

五、如何使用工具检查内存泄漏

http://liuwangshu.cn/application/performance/ram-4-memory-tools.html

你可能感兴趣的:(Java虚拟机学习)