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

南京市英语网站建设小说推广合作平台入口

南京市英语网站建设,小说推广合作平台入口,上饶网站设计公司,wordpress打开速度分析JVM的内存区域划分 JVM类加载机制 前言 Java程序最开始是一个 .java 的文件#xff0c;JVM把它编译成 .closs 文件#xff08;字节码文件#xff09;#xff0c;运行 Java 程序#xff0c; JVM 就会读取 .class 文件#xff0c;把文件内容读取到内存中#xff0c;构造出…JVM的内存区域划分 JVM类加载机制 前言 Java程序最开始是一个 .java 的文件JVM把它编译成  .closs 文件字节码文件运行 Java 程序 JVM 就会读取 .class 文件把文件内容读取到内存中构造出一个 .class 对象类对象 1.加载 JVM 加载 .class 文件的时候需要用到 “类加载器模块” JVM 中自带了三个类加载器模块 分别是Bootstrap ClassLoader负责加载标准库中的类 Extension ClassLoader负责加载 JVM 扩展的库 Application ClassLoader负责加载第三方库 三个类加载器的优先级由高到低 要加载 .class 文件我们就需要先找到 .class 文件此时我们就涉及到双亲委派模型 什么是双亲委派模型 如果一个类加载器收到了类加载的请求它首先不会自己去尝试加载这个类而是把这个请求委派给父类加载器去完成每一个层次的类加载器都是如此因此所有的加载请求最终都应该传送到最顶层的启动类加载器中只有当父加载器反馈自己无法完成这个加载请求它的搜索范围中没有找到所需的类)时子加载器才会尝试自己去完成加载。 假设我们现在需要加载一个 .class 文件此时类加载的请求就会传给 Application ClassLoader 负责加载第三方库但 Application ClassLoader 不会直接就尝试寻找并加载 .class 文件而是把这个请求发送给自己的父类 Extension ClassLoader负责加载 JVM 扩展的库同理 Extension ClassLoader 也会把类加载的请求传给 Bootstrap ClassLoader负责加载标准库中的类 Bootstrap ClassLoader 没有父类了才会真正的去搜索  .class 文件并加载到内存中如果 Bootstrap ClassLoader 没有查找到  .class 文件就将类加载的请求传回给子类  Extension ClassLoader 进行加载同理要是  Extension ClassLoader 没有查找到  .class 文件也会将类加载的请求传回给子类 Application ClassLoader 进行加载经过这段流程的寻找一般就能找到对应的  .class 文件 2.验证 找到  .class 文件以后还需要验证  .class 文件的格式是否符合约束要求 3.准备 准备阶段是正式为类中定义的变量即静态变量被static修饰的变量分配内存并设置类变量初始值 的阶段。 4.解析 解析阶段是 Java 虚拟机将常量池内的符号引用替换为直接引用的过程也就是初始化常量的过程。 5.初始化 初始化阶段Java 虚拟机真正开始执行类中编写的 Java 程序代码将主导权移交给应用程序。初始化 阶段就是执行类构造器方法的过程。 类在什么时候被加载 懒汉模式用到了才加载 1.构造类的实例 2.使用了类的静态方法静态属性 3.子类的加载会触发父类 类加载了以后后面就不必再次加载了 JVM垃圾回收机制 很多编程语言都有垃圾回收的机制Java也不例外垃圾回收机制可以自动的将不再使用的对象进行销毁释放对象所占用的内存空间 在 JVM 的内存区域划分中我们进行垃圾回收的主要位置是堆因为栈和计数器是和线程共存亡的当线程结束以后便会自动释放栈和计数器所占的内存而我们实例化的对象都是放到堆中的 进行垃圾回收首先我们需要考虑哪些对象是死亡对象垃圾当一个对象没有被引用指向的时候我们就可以认为这个对象是死亡对象因为这个对象用户已经无法访问到它了 死亡对象的判断算法 1.引用计数算法 引用计数描述的算法为: 给对象增加一个引用计数器每当有一个地方引用它时计数器就1当引用失效时计数器就-1任 何时刻计数器为0的对象就是不能再被使用的即对象已死。 引用计数法实现简单判定效率也比较高在大部分情况下都是一个不错的算法。比如Python语言就采 用引用计数法进行内存管理。 但是在主流的JVM中没有选用引用计数法来管理内存最主要的原因就是引用计数法无法解决对象的 循环引用问题 2.可达性分析Java中实际采取的方案 JVM 首先会遍历代码中所有的引用根据引用找到对应的对象将能通过引用访问到的对象标记成可达完成整个遍历以后没有被标记成可达的对象也就是不可达就相当于是垃圾了 在分析完哪些对象是垃圾对象以后我们就需要将这些垃圾对象进行回收回收有以下的几种算法 垃圾回收 1.直接释放 直接释放对象很简单干脆但是存在内存碎片问题 因为在申请内存的时候都是申请的连续的内存空间直接释放内存的话就会破坏原有的连续性产生内存碎片随着程序运行得越来越多内存碎片也会越来越多越来越碎这样就会出现明明有内存但是无法申请的情况这是一个很严重的问题 2.复制算法 把一个内存分两份用一份丢一份用双倍的空间来存储对象存储对象的时候用两倍的空间存储一开始将对象统一存放在左边的空间当要进行垃圾回收的时候就将不需要回收的对象复制到右边然后再将左边的内存全部释放下一次进行垃圾回收就将复制到左边把右边的内存全部释放这样就能解决内存碎片问题 但是该算法会浪费一半的空间而且要频繁进行对象的复制会大大影响效率 3.分代算法GC当前JVM采用 当前 JVM 垃圾收集都采用的是分代收集(Generational Collection)算法这个算法并没有新思想只 是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代。在新生代中每 次垃圾回收都有大批对象死去只有少量存活因此我们采用复制算法而老年代中对象存活率高、没 有额外空间对它进行分配担保就必须采用标记-清理或者标记-整理算法。 将整个堆分为三个部分1.新生代2.幸存区3.老年代 JVM 会周期性的遍历三个部分中的对象 一开始创建的对象放到新生代遍历新生代中的对象将垃圾对象进行释放大多数的对象活不过第一轮GC遍历不是垃圾对象的就复制到幸存区中 幸存区分为两个部分采用的是复制算法在幸存区经过多轮GC遍历还没有成为垃圾对象被回收的对象就会被复制到老年代老年代中的对象是不容易被回收的对象所以进行GC遍历的频率也较低
http://www.hkea.cn/news/14501943/

相关文章:

  • 生成手机网站云服务器哪家便宜
  • 韩国风网站凡客诚品陈年
  • 网站建设方案一份西安网络公司推荐
  • wordpress优化方案网站优化推广方案
  • 网站建设公司费用品质好的形容词
  • 横翻网站模版有个电商网站模板
  • app推广怎么做郑州网站推广优化公司
  • 网站集约整合建设交流做相亲网站需要什么流程
  • 在建设银行网站上买卖贵金属北京城建集团官网
  • 淄博网站推广哪家好建设网站青岛
  • 做代加工的网站发布wordpress怎样发布
  • 网站开发哪里接业务夺宝网站开发
  • 网站建设招标评分标准郑州网站建设三猫网络
  • 个人网站排名欣赏深圳企业网站推广
  • 给公司做的东西放到自己网站上招商码头无忧查询系统
  • 深圳住房与城乡建设部网站阿里巴巴运营岗位职责
  • 网站搭建好之后提示网页走丢了凡科邮箱手机登录入口
  • 进入网站前如何做环境检测青岛网站建设制作推广
  • 预付做网站定金如何wordpress 阌栾
  • 用织梦系统做的2个网站要把它都上传到服务器上吗返利网站建设
  • 网站怎么黑网站建设公司赚钱吗
  • 西安网站建设公司十强天津建设工程信息网网页版
  • 什么网站可以找人做系统wordpress 修改文章作者
  • 转笔教学网站备案网站域名被抢注
  • 网站建设技术发展趋势预测网站建设 平面设计合同
  • 著名的设计企业网站网站制作教程下载
  • 私人代理服务器东莞seo关键词搜索关键词
  • 德州哪里有学做网站的开锁在百度上做网站要钱吗
  • 图片式网站利于做优化吗用dw做一个简单的网页
  • 国外网站打开很慢dns整合营销的最高阶段是