jvm笔记

作者: IT入门指南 | 来源:发表于2020-02-27 17:49 被阅读0次

    jvm内存区域

    堆,方法区, 虚拟机栈, 本地方法栈, 程序计数器。
    

    程序计数器

    线程私有,存储当前线程执行的字节码行号。因为有线程的切换。必须保存线程的当前的执行点。
    

    虚拟机栈

    线程私有,线程执行的函数的信息,包括函数的局部变量表,动态链接,方法的出口等。
    线程执行一个方法,创建一个 栈帧。方法调用直到完成, 就是一个栈帧的如栈和出栈的过程
    局部变量表的大小是在编译时期就确定下来的。不会随着程序运行动态改变
    如线程在执行过程中达到栈的最大深度,程序会报stackoverflow。
    但是jvm支持动态的增加虚拟机栈的大小,如果在申请内存的时候,内存不够会报 outofmemery的错误
    

    本地方法栈

    本地方法栈和虚拟机栈的作用相当,只是用户netive方法。
    

    java的堆

    线程共享。存放对象的实例子(也不是决定的。jit和逃逸技术发展可以改变这一事实)。
    堆是垃圾收集器主要管理的管理对象。 分为新生代和老年代。又可以eden。from survivor 和 to survivor
    

    方法区

    线程共享的区域,存放被虚拟机加载类信息,常量,静态变量, jit编译后的代码
    
    其中有一个运行时常量池。存放的编译器生成的字面量和符号引用。
    

    java如何访问对象

    1: 采用句柄的方式
    2: 采用指针的方式。 hotspot采用指针的方式。速度很快。
    

    垃圾回收和内存分配

    新生代复制算法
    老年代 标记 整理
    
    然后分代回收
    

    相关文章

      网友评论

          本文标题:jvm笔记

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