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

网站优化竞争对手分析户外运动网站模板

网站优化竞争对手分析,户外运动网站模板,sem管理工具,有限责任公司章程目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程#xff0c;其实就是一个 JVM 虚拟机。 而进程是…目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程其实就是一个 JVM 虚拟机。 而进程是资源分配的基本单位所以 JVM 就首先会申请一大块内存然后把这个内存划分成不同的区域每个区域都有不同的作用。 JVM 内存区域划分成以下四个部分 1. 方法区 (1.7 及之前) / 元数据区 (1.8 开始) 方法区存储的内容就是类对象。( .class 文件加载到内存之后就成了类对象) 2. 堆 这里存储的内容就是代码中 new 的对象。 堆是占据空间最大的区域。 3. 虚拟机栈(就是平常我们所说的栈) 这里存储的内容就是代码执行过程中方法之间的调用关系。 4. 程序计数器 是个比较小的空间主要用来存放一个 地址这个地址就表示了下一条要执行的指令在内存中的哪个地方(方法区里)。 每个方法里面的指令都是以二进制的形式 保存到类对象中的。 刚开始调用方法的时候程序计数器记录的就是方法的入口的地址。 随着一条一条的执行指令每执行一条指令程序计数器的值都会自动更新去指向下一条指令。 程序计数器和虚拟机栈是每个线程都有一份而堆和方法区在 JVM 进程中是只有一份的。 在 Java 里每个线程都有自己私有的栈空间。 2. JVM 中类加载的过程 1) 类加载的基本流程 java 代码会被编译成 .class 文件(包含了一些字节码)java 程序想要运行起来就需要让 JVM 读取到这些 .class 文件并把里面的内容构造成类对象保存到内存的方法区中。  官方文档把类加载的过程主要分成了 5 个步骤。 1. 加载找到 .class 文件打开文件读取文件内容。 往往代码中会给定某个类的 全限定类名(比如 java.lang.Stringjava.util.ArrayList) JVM 就会根据这个类名在一些指定的目录范围内查找。 2. 验证 .class 文件是一个二进制的格式。(某个字节都是有某些特定含义的)就需要验证你当前读到的这个格式是否符合要求。 3. 准备给类对象分配内存空间(最终的目标是要构造出类对象) 这里只是分配空间还没有初始化此时这个空间上的内存的数值就是全 0 的此时如果尝试打印类的 static 成员就是全 0 的。 4. 解析针对类对象中包含的字符串常量进行处理进行一些初始化操作。 java 代码中用到的字符串常量在编译之后也会进入到 .class 文件中。 5. 初始化针对类对象进行初始化。 把类对象中需要的各个属性都设置好。 还需要初始化号 static 成员 还需要执行静态代码块 以及可能还需要加载一下父类。 总结类加载的基本流程 1. 加载找到 .class 文件打开 .class 文件读取 .class 文件 2. 验证验证当前 .class 文件格式是否正确 3. 准备给类对象分配内存空间 4. 解析将符号引用替换成直接引用 5. 初始化初始化类对象 2) 双亲委派模型 属于类加载中第一个步骤 加载 中的一个环节是负责根据全限定类名来找到 .class 文件的。 类加载器是 JVM 中的一个模块(专门负责类加载的操作)。 JVM 中内置了三个类加载器 1. BootStrap ClassLoader           爷 2. Extension ClassLoader           父 3. Application ClassLoader         子 这个父子关系不是继承构成的而是这几个 ClassLoader 里有一个 parent 这样的属性指向了一个 父 类加载器。 程序员也可以手动创建出新的类加载器。 所以说双亲委派模型就是一个查找优先级的问题先找标准库再找扩展库最后找第三方库。 3. JVM 中垃圾回收机制 在 Java 中new 一个对象就是 动态内存申请在 C 语言中使用 malloc 这种 动态内存申请 的函数使用完之后就需要手动调用 free 释放内存如果不释放就会出现内存泄露这样的问题而在 Java 中就不用手动释放内存因为 JVM 自动判定是否某个对象已经不再使用了并帮我们进行释放不再使用的对象的内存了。像这种不再使用的对象就称之为 垃圾这种机制也就叫做 GC 垃圾回收机制。 GC 也有缺陷 1. 系统开销需要有一个/一些特定的线程不停的扫描你内存中的所有的对象看是否能够回收此时是需要额外的内存和 CPU 资源的。 2. 效率问题这样的扫描线程不一定能够及时的释放内存 (扫描总是有一定周期的)一旦同一时刻出现大量的对象都需要被回收GC 产生的负担就会很大甚至引起整个程序都卡顿 (STW 问题    stop   the   world) 但是 GC 属于大势所趋PythonPHPGo.... 都是具有 GC 机制的。 GC 是垃圾回收GC 回收的目标其实是 内存中的 对象。 对于 Java 来说就是 new 出来的这些对象。 栈里的局部变量是跟随着栈帧的生命周期走的。(方法执行结束栈帧销毁内存自然释放) 静态变量生命周期就是整个程序这就意味着 静态变量 是无需释放的。 因此真正需要 gc 释放的对象就是 堆 上的对象。 gc 可以理解成两个大的步骤 1. 找到垃圾 2. 释放垃圾 1) 找到垃圾 在 GC 的圈子中有两种主流的方案1. 引用计数     2. 可达性分析 (Java 采用的是这种) a) 引用计数 new 出来的对象单独安排一块空间来保存一个计数器。 b) 可达性分析 可达性分析本质上是一个时间换空间这样的手段。 有一个/一组线程周期性的扫描代码中的所有对象。 从一些特定的对象出发尽可能的进行访问的遍历把所有能够访问到的对象都标记成 可达反之经过扫描之后未被标记成 可达 的对象就是垃圾了。 就跟二叉树的遍历差不多只不过不是二叉树而是 N 叉树。 2) 释放垃圾 有三种基本的思路 1. 标记清除 是一种比较简单粗暴的方式。 2. 复制算法 第二种思路就是解决刚刚标记清除出现的内存碎片的办法。 通过复制的方式把有效的对象归类到一起再统一释放剩下的空间。 3. 标记整理 既能够解决内存碎片的问题又能够处理复制算法中利用率。 类似于顺序表删除元素的搬运操作。 实际上JVM 采取的释放思路是上述基础思路的结合体。 分代回收 分代回收对象能活过的 GC 扫描轮次越多就是越老。
http://www.dnsts.com.cn/news/139332.html

相关文章:

  • 常州网站建设招聘做网站用电脑自带的
  • 聊城网站托管做百度联盟做什么类型网站
  • 网站一般用什么做的怎样做才能让自己的网站
  • 浙江银安建设有限公司网站网站开发商城app
  • 石家庄做手机网站推广模板网站制作多少钱
  • 长春商城网站建设专业网站建设一条龙
  • 辽宁专业模板网站建设公司新网站推广
  • 政务中心网站建设方案做男女的那个视频网站
  • 国内网站 备案wordpress toggle
  • 求个网站2021能用的爱网图
  • 搭建网站的五大步骤郑州商城网站设计
  • 齐齐哈尔做网站的公司wordpress百度索引链接
  • 免费隐私网站推广临翔区城乡建设局网站
  • 学做饼干的网站黑龙江恒泰建设集团网站
  • 免费的查企业的网站交换链接的方法
  • 公司关于网站建设的通知百度网址提交入口平台
  • 温州网站建设优化建设工程合同网站
  • 织梦网站源码下载网站建设新的技术
  • 网站开发实验报告三公司网站做推广
  • 2015帝国cms网站怎么查自己的二建信息
  • 太原整站优化排名外包展馆展厅设计报价
  • 网站 目录 结构游戏开发师
  • 哈尔滨住房城乡建设局网站免费网站设计网站
  • 优秀网站的链接课堂网页设计素材
  • 站长工具官方网建筑公司网站应该则么做
  • 中国十大建筑集团优就业seo怎么样
  • 新网站建设市场做网站背景图片浪漫爱情
  • 常宁做网站最近一周的新闻大事10条
  • 怎么添加网站房地产销售基础知识新手必看
  • 网站建设开发方案网站建设多少钱京icp备