美文网首页
Java虚拟机学习

Java虚拟机学习

作者: 石器时代小古董 | 来源:发表于2017-09-21 14:44 被阅读0次
    文章是对自己学习的一个总结
    参考资料:http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 刘望舒的blog
    
    刘望舒的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虚拟机学习

          本文链接:https://www.haomeiwen.com/subject/oxwqjxtx.html