• JVM笔记(3)--第二章 总结


      第二章

      一 运行时数据区域

        1 程序计数器:在线程切换的过程中通过程序计数器定位线程执行到哪一步。

        2 Java虚拟机栈:用于存放方法的入口,局部变量表,动态链接,操作数栈。

        3 本地虚拟机栈:和Java虚拟机类似,但是他只能为本地方法服务。

        4 Java堆:用于存放对象实例,也是垃圾收集器的管理的地方。

        5 方法区:用于存放常量,静态常量,被虚拟机加载之后的类型信息。

      二 Hotspot虚拟机对象

        1 创建对象:要给对象分配内存时,不同的垃圾收集器会选用不同的分配方式  1 指针碰撞 : 分配的内存空间是连续的。

                                                      2 空闲链表: 在空闲和以使用的内存空间交错时,使用空闲链表分配内存。

                1.1 如果频繁的创建对象就会使线程不安全:1 同步处理   通过CAS+失败重试 保证操作的原子性。

                           2 本地线程缓存分配  在每一个线程分配一块内存,只有使用完了本地线程,在分配新的缓存区时,才会进行同步锁定。

         2 对象的内存布局: 1 对象头中俩类信息: 1)存储对象自身的运行时数据(又称“mark word” 其设计为一个动态定义的数据结构)。

                                                     2)类型指针: 主要是识别该实例是属于哪个类。

                2 实例对象:主要时程序代码中各种类型的字段内容,包括继承父类的,自己子类的信息。

                   3 对齐填充:仅仅作为占位符(可有可无)。

        3 对象的访问定位: 1 通过句柄:首先储存在句柄池中,然后在句柄池中句柄中包括的信息有 指向对象实例数据的指针和指向对象类型数据的指针

                       优势:存储在稳定的句柄池,如果对象被移动(垃圾收集时对于对象的移动)只需要修改句柄池中指向对象实例数据的指针即可。

                       2 直接指针:存储的信息有 对象实例数据和指向对象类型数据的指针

                                                    优势:主要访问速度快,只需访问对象类型数据指针。

    未完待续!!!                                                   

  • 相关阅读:
    C++11 lambda表达式(lambda expression)
    win 10 relog.exe 下载地址
    检测闩锁/自旋锁争用
    关于sql 锁和并发的一些记录
    FAST number_rows 意义解释
    网站实施SEO的步骤
    搜索引擎高级搜索指令浅析
    关于遇到高并发时候的一些总结
    Autofac 设置方法拦截器的两种方式
    C# MVC 进入Action 方法之后怎么使用MVC参数验证模型
  • 原文地址:https://www.cnblogs.com/linyu1/p/13789634.html
Copyright © 2020-2023  润新知