当前位置: 首页 > news >正文

淘宝找做网站东莞+网站+建设+汽车

淘宝找做网站,东莞+网站+建设+汽车,司法鉴定网站建设的内容,wordpress菜单icon目录 JVM是什么运行时数据区域线程私有1.程序计数器2.虚拟机栈3.本地方法栈 线程共享1.方法区2.堆 二、对象创建1.给对象分配空间(1)指针碰撞(2)空闲列表 2.对象的内存布局对象的组成Mark Word类型指针实例数据#xff1a;对齐填充 对象的访问定位句柄法 三、垃圾收集器和内存… 目录 JVM是什么运行时数据区域线程私有1.程序计数器2.虚拟机栈3.本地方法栈 线程共享1.方法区2.堆 二、对象创建1.给对象分配空间(1)指针碰撞(2)空闲列表 2.对象的内存布局对象的组成Mark Word类型指针实例数据对齐填充 对象的访问定位句柄法 三、垃圾收集器和内存分配策略1.那些内存需要回收2.什么时候回收《1》怎么判断对象死没死?(1) 引用计数法我称其为脑门刻字法(2) 可达性分析算法我称其为平地长树法 《2》再谈引用强引用软引用弱引用虚引用 3.如何回收垃圾收集理论基础垃圾收集算法标记-清除标记-复制标记-整理 经典的垃圾收集器CMS收集器Concurrent Mark Sweep步骤 G1收集器步骤 JVM是什么 Java虚拟机(Java Virtual Machine)用来运行.class的字节码文件。 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。如果程序书写不当会出现OutOfMemory Error内存溢出 线程私有 线程私有的数据区域生命周期和线程相同 1.程序计数器 是当前线程所执行的字节码文件的行号指示器此区域是Jvm规范中唯一不会出现OOMOutOfMemory Error的区域 2.虚拟机栈 存放的元素是栈帧 栈帧每个方法被执行的时候Java虚拟机会创造一个栈帧用于存放局部变量表、动态连接、方法出口等信息。每个方法的调用过程就是栈帧从入栈到出栈的过程。 局部变量表:存储程序编译的时候的基本数据类型,和对象引用,内部以 局部变量槽(Slot) 作为存储单位,64位长度的数据类型会占用两个变量槽的方式其余数据类型均只占用一个 局部变量槽 。 3.本地方法栈 什么是本地方法 本地方法就是不使用java编写的比如C编写的程序只是需要传递参数。 线程共享 1.方法区 实现 一般处于堆中的永久代 目的 已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。 元空间位置在本地内存jdk8以后把方法区中的信息全部转移到了元空间 2.堆 目的用于存放对象实例 TLABThread Local Allocation Buffer在堆中给每个线程一块属于自己的空间用于分配 二、对象创建 1.给对象分配空间 (1)指针碰撞 什么是指针碰撞 假设Java堆中内存是绝对规整的所有被使用过的内存都被放在一边空闲的内存被放在另一边中间放着一个指针作为分界点的指示器那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离这种分配方式称为“指针碰撞”Bump ThePointer 什么情况下使用指针碰撞 是否使用指针碰撞为对象分配空间取决于java堆是否规整而这又取决于垃圾收集器是否带有空间压缩整理能力。 (2)空闲列表 什么时候使用空闲列表 Java堆中的内存并不是规整的已被使用的内存和空闲的内存相互交错在一起 什么是空闲列表 虚拟机维护一个列表记录上哪些内存块是可用的在分配的时候从列表中找到一块足够大的空间划分给对象实例并更新列表上的记录这种分配方式称为“空闲列表”Free List。 2.对象的内存布局 对象的组成 对象由对象头、实例数据对齐填充三部分组成重点介绍一下对象头 首先对象头由Mark Word和类型指针指向对象类信息的一个指针组成如果对象是数组那么对象头中还有一部分用来存放数组长度的区域。 Mark Word **什么是Mark Word ** Mark Word是一个有着动态定义的数据结构是用于存储对象自身的运行时数据如哈 希码HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等 例如 Mark Word的32个比特存储空间中的25个比特用于存储对象哈希码4个比特用于存储对象分代年 龄2个比特用于存储锁标志位1个比特固定为0 如下 类型指针 是一个指向对象所在类的指针 实例数据 对象真正存储的用用信息 对齐填充 不是必然存在的起到占位符的作用使得对象的整个长度为8字节的整数倍 对象的访问定位 句柄法 句柄池在java堆中划分出一部分 句柄法Java栈本地变量表中的reference-----》句柄池------》方法区中的创建对象的类/对象实例数据 直接指针Java栈本地变量表中的reference指向对象实例数据指向方法区中的创建对象的类 优点访问少一次指针定位 缺点如果很多reference都指向了一个对象实例那么要更改对象实例的地址的时候需要更改很多个reference 三、垃圾收集器和内存分配策略 1.那些内存需要回收 堆和方法区 2.什么时候回收 简单来说是回收死亡的对象 《1》怎么判断对象死没死? (1) 引用计数法我称其为脑门刻字法 描述在对象中添加一个引用计数器每当有一个地方引用它时计数器值就加一在脑门上刻的字加1当引用失效时计数器值就减一任何时刻计数器为零的对象就是不可能再被使用的。 缺点 难以解决对象之间相互引用的问题 (2) 可达性分析算法我称其为平地长树法 描述可以使用引用链连接到GC Roots地面的对象可以认为其是长在地上该对象不会被回收只有使用引用链连接不到GC Roots的对象无根浮萍才是需要被回收的。 可以被认为是GC Roots的对象 项目例子·在虚拟机栈栈帧中的本地变量表中引用的对象譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。·在方法区中类静态属性引用的对象譬如Java类的引用类型静态变量。·在方法区中常量引用的对象譬如字符串常量池String Table里的引用。·在本地方法栈中JNI即通常所说的Native方法引用的对象。·Java虚拟机内部的引用如基本数据类型对应的Class对象一些常驻的异常对象比如NullPointExcepiton、OutOfMemoryError等还有系统类加载器。·所有被同步锁synchronized关键字持有的对象。·反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。 《2》再谈引用 强引用 例子“Object objnew Object() 只要强引用还在就垃圾收集器就永远不会被不回收 软引用 生命周期: 系统将要发生内存溢出时回收 描述对象 还有用但非必须的对象 例子 SoftReferenceString sr new SoftReferenceString(new String(hello)); System.out.println(sr.get());弱引用 生命周期 垃圾收集器一工作就会被回收 描述对象 非必须对象但是它的强度比软引用更弱一些 例子 WeakReferenceString sr new WeakReferenceString(new String(hello));System.out.println(sr.get());System.gc(); //通知JVM的gc进行垃圾回收System.out.println(sr.get());虚引用 作用被虚引用的对象在被垃圾收集器回收时会收到一个系统通知 3.如何回收 垃圾收集理论基础 强分代假说 熬过越多次垃圾收集过程的对象就越难以消亡。 弱分带假说 绝大多数对象都是朝生夕灭的 跨带引用理论假说 跨带引用相对于同代引用来说仅占极少数。 垃圾收集算法 标记-清除 步骤 算法分为“标记”和“清除”两个阶段 首先标记出所有需要回收的对象在标记完成后统一回收掉所有被标记的对象 也可以反过来标记存活的对象统一回收所有未被标记的对象。 缺点 1.执行效率不稳定 2.内存碎片化严重 优点 简单高效 标记-复制 算法描述 将可用内存按容量划分为大小相等的两块每次只使用其中的一块。当这一块的内存用完了就将还存活着的对象复制到另外一块上面然后再把已使用过的内存空间一次清理掉。 优点 简单高效 缺点 是将可用内存缩小为了原来的一半 标记-复制算法的改进 改进理论 针对具备“朝生夕灭”特点的对象提出了一种更优化的半区复制分代策略现在称为 “Appel式回收” 。 应用区域 主要用于新生代收集器。 Appel式回收的具体做法 是把新生代分为一块较大的Eden空间和两块较小的Survivor空间每次分配内存只使用Eden和其中一块Survivor。发生垃圾搜集时将Eden和Survivor中仍然存活的对象一次性复制到另外一块Survivor空间上然后直接清理掉Eden和已用过的那块Survivor空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8∶1也即每次新生代中可用内存空间为整个新生代容量的90%Eden的80%加上一个Survivor的10%只有一个Survivor空间即10%的新生代是会被“浪费”的。当然98%的对象可被回收仅仅是“普通场景”下测得的数据任何人都没有办法百分百保证每次回收都只有不多于10%的对象存活因此Appel式回收还有一个充当罕见情况的“逃生门”的安全设计当Survivor空间不足以容纳一次Minor GC之后存活的对象时就需要依赖其他内存区域实际上大多就是老年代进行分配担保Handle Promotion。 分配担保 存活数量超过Survivor的话存活对象直接进入老年代 标记-整理 算法描述 标记所有存活对象让所有存活的对象都向内存空间一端移动然后直接清理掉边界以外的内存 经典的垃圾收集器 CMS收集器Concurrent Mark Sweep 目的 以获取最短回收停顿时间为目标的 基于标记-清除算法实现的 缺点 1.CMS收集器对处理器资源非常敏感和用户线程并发运行 2.无法处理“浮动垃圾”Floating Garbage 3.会有大量空间碎片产生。 4.要是CMS运行期间预留的内存无法满足程序分配新对象的需要就会出现一次“并发失败”,会冻结用户线程的执行临时启用Serial Old收集器来重新进行老年代的垃圾收集导致停顿时间就很长了。 步骤 1初始标记CMS initial mark 2并发标记CMS concurrent mark 3重新标记CMS remark 4并发清除CMS concurrent sweep 由于在整个过程中耗时最长的并发标记和并发清除阶段中垃圾收集器线程都可以与用户线程一起工作所以从总体上来说CMS收集器的内存回收过程是与用户线程一起并发执行的。 G1收集器 **实现方式**收集器面向局部收集的设计思路和基于Region的内存布局形式。 主要面向服务端应用的垃圾收集器。 面向局部收集 基于Region 通过原始快照SATB算法来实现的 步骤 1初始标记 2并发标记 3最终标记 4筛选收回
http://www.dnsts.com.cn/news/271387.html

相关文章:

  • 网站生成app 免费工具设计有特色的网站
  • 网站后台ftp账户卢氏八建公司最新抖音
  • 成都网站设计师soho建网站 必须先注册公司吗
  • 吉林省网站建设公司wordpress主机怎么建站
  • wap网站开发框架039 织梦云idc网站源码
  • 酒泉网站建设有哪些如何将网站变成免费
  • c 做的网站免费追剧永久免费app
  • 备案需要写网站建设方案书化学试剂购买网站
  • 服装商店的网站建设要求window服务器如何做网站访问
  • python做爬虫和做网站网站开发合同缺陷
  • 网站建设使用的技术东莞网站建设方案企业
  • 网页设计与网站建设课程报告深圳网络品牌推广公司
  • 网站开发目的意义wordpress上图片不显示
  • 网站空间就是虚拟主机吗做网站的5要素
  • 网站建设后的专人维护网站建设html模板下载
  • 百度网站建设工资网络信息发布平台
  • 内江规划建设教育网站wordpress totalpoll
  • 兰州网站运营诊断wordpress怎么压缩
  • 张北县网站建设附近最好的装修公司
  • 求手机网站河北港网站建设
  • 网站开发公司选择网站是由多个网页组成的吗
  • 建设网站要多少页面响应式网站对seo
  • 网站新闻后台怎么做wordpress自动增加阅读量
  • 做美食推广的网站搜狗引擎搜索
  • 济源网站建设的公司图案logo设计
  • 佛山网站推广优化公司怎么做网站的seo排名知乎
  • 如何制作网站效果图做网站一定要域名嘛
  • 旅游网站建设风险网站开发的目的 实习报告
  • 做兼职女的网站北京本地网络推广平台
  • 南宁工程建设网站有哪些搜狗收录批量查询