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

福建建设网站百度竞价优化排名

福建建设网站,百度竞价优化排名,如何建设基层网站,联合年检怎么做网站上目录 什么是JVM? 内存划分#xff1a; 1.堆 #xff08;共享#xff09; 2.栈 #xff08;私有#xff09; 3.元数据区#xff08;共享#xff09; 4.程序计数器#xff08;私有#xff09; 示例#xff1a; JVM 类加载 一.类加载过程 1.加载 2.验证 3.…目录 什么是JVM? 内存划分 1.堆 共享 2.栈 私有 3.元数据区共享 4.程序计数器私有 示例 JVM 类加载 一.类加载过程 1.加载 2.验证 3.准备 4.解析 5.初始化 二.双亲委派模型 如何寻找文件 双亲委派模型主要是为了应付以下场景 是否可以打破双亲委派模型呢 JVM垃圾回收机制 什么是垃圾回收GC 谁是垃圾  1.引用计数 2.可达性分析 释放垃圾策略 1.标记-清除算法 2.复制算法 3.标记-整理算法 4.分代回收  什么是JVM? JVMJava Virtual MachineJava虚拟机 是一种虚拟化的计算机允许在其上执行 Java 程序以及其他由 Java 编译器编译成字节码的程序。JVM 提供了一种跨平台的执行环境使得开发者可以编写一次代码并在任何安装了 JVM 的设备或操作系统上运行。这种跨平台能力通常被称为“一次编写到处运行”的特性。 内存划分 JVM就是Java进程当进程一旦跑起来之后就会从操作系统里面申请一大块内存空间  JVM就是要将这块空间进行划分成不同的区域并且每个区域都有不同的功能作用 如下图所示分为五块不同区间 1.堆 共享 堆是整个内存区域中最大的一块放的内容就是代码new出来的对象  堆里面分为两个区域新生代和老生代在讲到后面GC垃圾回收机制会提到.... 2.栈 私有 分为Java虚拟机栈和本地方法栈 Java虚拟机栈存储的是保存了方法调用关系 本地方法栈存储的是本地方法的调用关系 3.元数据区共享 元数据区放的是“类数据” class Test { ..... } Test.class就是类对象 还存放了一些方法相关的信息 例如类有一些方法中每个方法都代表了一系列的“指令集合”JVM字节码指令 还有常量池也存放在元数据区中 4.程序计数器私有 程序计数器是内存区域里面最小的一块区域它只需要保存当前要执行的下一条指令JVM字节码的地址 在上述四块区域中堆和元数据区的数据是在整个进程只有一份每个线程都可以访问到是大家共同可以使用的而栈和程序计数器是每个线程中有一份是只能每个线程跟每个线程独立的不共同使用。 示例 class Test {int a;Test2 t2 new Test2();String s hi;static int b;} public static void main() {Test t new Test(); } at2sb t 都存放在哪个区域中呢 a存放在堆 t2存储在堆 new Test2()存在在堆 并且t2指向它 s 存放在堆 但hi存放在元数据上 s执行它 b 是静态变量 存放在元数据上 t 是局部变量存放在栈上 但它保存了对象的首地址(在堆上) 基本判断方法1局部变量在栈上 2成员变量在堆上 3静态变量或方法都在元数据上 JVM 类加载 一.类加载过程 一个java进程启动要将.java文件转化成.class文件加载到内存中才能得到‘类对象’ 类加载过程有以下几个环节 1.加载 在硬盘中找对对应的.class文件读取文件里面的内容 2.验证 检查.class文件里的内容看看是否符合要求JVM的规范要求保证这些信息运行后不会危害到JVM的自身的安全 3.准备 给类对象分配内存元数据区并设置类变量的初始值如果类里有静态变量那么值为0 /false /null 。。。 4.解析 针对字符串常量进行初始化把刚才.class文件里面的常量的内容放到元数据区里 5.初始化 针对类对象进行初始化不是对对象初始化和构造方法无关给静态成员进行初始化执行静态代码块 这样类对象就加载完成后续代码可以使用这个类对象创建实例或者使用里面的静态成员了... 二.双亲委派模型 这个模型描述了JVM加载.class文件过程中找文件的过程 这个类加载中的 “双亲委派模型”出现在“加载”那个环节根据代码中写的“全限定类名”找到对应的.class文件全限定类名包名类名 比如String - Java.lang.String  List - java.util.List; 如何寻找文件 JVM内置了三个类加载器  负责加载不同的类 1.启动类加载器 BookstrapClassLoader  爷爷 负责加载标准库的类 2.扩展类加载器 ExtensionClassLoader  爸爸 负责加载JVM扩展库的类 3.应用类加载器 ApplicationClassLoader 儿子 负责加载第三方库的类 和自己代码写的类 这里标注了它们之间的关系并不是类的继承之间的关系而是通过类加载器中存在一个parent字段 可以指向他们 类似树  所有它也可以称做“父亲委派模型”/“单亲委派模型” 当子类加载器需要加载类时它会首先将请求委托给父类加载器直到请求最终被顶级加载器即 BookstrapClassLoader处理。只有在父类加载器无法处理该请求时子类加载器才会尝试加载该类。此时如果儿子类加载器也没有找到最后就会抛出ClassNotFoundException 双亲委派模型主要是为了应付以下场景 当你自己的代码中写的类类的名称和标准库/扩展库的类发生了冲突JVM会确保加载的类是标准库上的类就不加载自己写的类了如果标准库的类不能加载那么可能整个Java进程都没法加载了 是否可以打破双亲委派模型呢 答案当然是可以 自己写个类加载就行。。。 JVM垃圾回收机制 什么是垃圾回收GC 垃圾回收机制是Java提供对于内存自动回收的机制 JVMJava虚拟机的垃圾回收Garbage CollectionGC机制是 Java 运行时管理内存的重要部分。其主要目的是自动化地回收那些不再被使用的对象从而释放内存避免内存泄漏提高系统的稳定性和效率。JVM 的垃圾回收机制有一套复杂的算法和流程但也让 Java 开发者无需手动管理内存。 在GC中最主要回收的堆上的内存 1程序计数器不需要额外回收线程销毁自然就没了 2栈同理线程销毁也就没了 3元数据区一般也不需要都是加载类不需要卸载类 4堆 存放的都是对象实例 GC的主力部分 GC的主要流程找到谁是垃圾不再使用的对象并且给它回收。  谁是垃圾  在一个对象中创建的时间往往可以确定但什么时候不再使用却是很模糊的。在编程中一定要确保每个对象都是有效的可不敢提前释放 因此判断一个对象是否需要回收采取的策略都是比较保守的  Test t new Test(); 使用对象是通过引用的方式来使用的如果没有引用这个对象那么这个对象将在代码中肯定不能使用。 如果 t null new Test() 这个对象没有引用指向了那么它就可以是作为垃圾 具体是怎么判断对象是否有无引用以下会介绍俩种方法。 1.引用计数 这个不是JVM使用的方案而是Python/PHP等语言使用的方案  Test a new Test(); b a; b null; a null; 给对象加个引用计数器当有地方指向它那么计数器1如果引用失效时那么计数器-1 如果计数器为0那么这个对象将会被当做垃圾被回收 但是有以下几个问题 1. 消耗额外的空间如果对象非常大还好浪费的空间可以接受但是你对象很小还要额外开销内存就会浪费很多空间 2.存在“循环引用”的问题 class Test {Test t; }Test a new Test(); Test b new Test(); a.t b; b.t a;第一步 第二步 a null; b null; 此时这俩对象互相执行对方导致这俩个计数器都为1但不为0所有不是垃圾但是外部代码也访问不到这对象 Python/PHP它们如果检测到了循环引用就会提供了报错信息 2.可达性分析 以一系列被称为 “GC Roots” 的对象作为起始点从这些节点开始向下搜索搜索所走过的路径称为引用链当一个对象到任何一个 GC Roots 没有引用链相连时则证明该对象是不可达的是可以被回收的对象。 GC Roots 对象包括虚拟机栈中引用的对象、本地方法栈中引用的对象、元数据区中类静态属性引用的对象、元数据区中常量引用的对象等。 举例类似树形状 如果将 a.right null 那么 c 将会断开 外面将找不到c了 那个就可视为 c 和 f 都是垃圾了 由于可达性分析需要消耗一定的时间因此Java垃圾回收没法做到”实时性“周期性进行扫描JVM提供了一组专门的负责GC的线程不停的进行扫描工作 释放垃圾策略 1.标记-清除算法 这种算法存在的问题是 碎片化回收后的内存空间可能会分散导致内存碎片化降低内存使用效率。很难使用到连续大的内存。效率问题标记和清理过程需要扫描所有对象性能可能较差。 2.复制算法 将内存分为大小相等的两块每次只使用其中的一块。  释放1 3 5 保留 2 4 当这一块的内存用完了就将还存活的对象复制到另一块内存中然后把使用过的这块内存空间一次清除掉。 这种算法的优点是避免了内存碎片化但缺点是需要两倍于 Eden 区的内存空间来存储对象。 3.标记-整理算法 首先标记出所有需要回收的对象然后让所有存活的对象都向一端移动然后直接清除掉端边界以外的内存。 类似顺序表删除中间元素  优点不会产生内存碎片提高了内存的利用率标记和压缩的过程相对来说效率较高。缺点相对于标记 - 清除算法增加了对象移动的开销需要更新对象的引用地址等 4.分代回收  上述三个方案只是铺垫JVM中的实际方案是综合上述的方案更复杂的策略分代回收即分情况讨论根据不同的场景/特点选择合适的方案 新生代中的对象存活率较低通常采用复制算法进行垃圾回收老年代中的对象存活率较高一般采用标记 - 清除算法或标记 - 整理算法进行垃圾回收。  新生代又分为 Eden 区和两个 Survivor 区比例一般为 8:1:1。 新创建的对象都在Eden区当 Eden 区满了之后会触发一次 GC只有少部分对象可以活过第一轮GC Eden区 - Survivor区 通过复制算法由于存活数量少复制算法的开销也比较低Survivor区的空间也不是很大 Survivor区 -另一个Survivor区 通过复制算法  每一轮GC下来Survivor区都会淘汰一部分对象剩下的通过复制算法进入下一个Survivor区存活下来的对象年龄1 Survivor区 - 老年代 某些对象 经过多次GC 还没有变成垃圾 那么将会复制到老年代区 老年代区的对象也是需要进行GC的但是老年代中的对象都是生命周期比较久的因此可以减小GC的频率
http://www.dnsts.com.cn/news/1016.html

相关文章:

  • 辞职做网站推广运营公司哪家好
  • 北京网站设计培训学校爱站seo查询软件
  • 用xp做网站是否先搭建iis百度推广seo
  • wordpress 代码结构seo博客模板
  • 网站免费下载app百度平台商家订单查询
  • 岳阳网站开发公司沈阳百度seo关键词优化排名
  • 做烘焙网站如何做好企业推广
  • 铜陵58同城做网站自己建站的网站
  • 幸运28网站代理怎么做太原百度网站快速优化
  • 陕西城乡建设委网站建立网站的基本流程
  • 外贸基本流程郑州seo价格
  • 公司网站建设意见个人能接广告联盟吗
  • 苏州seo怎么做网站seo搜索引擎优化教程
  • 太原建设局网站同城推广有什么平台
  • 织梦高清电影网站模板店铺推广方法
  • 昆明网站建设服务至上谷歌是如何运营的
  • 哈尔滨营销型网站制作软文推广公司有哪些
  • 中国最好网站建设公司百度站长电脑版
  • 温州哪里做网站比较好搜索引擎seo推广
  • 社旗网站设计长沙网红打卡地
  • 做推广一般那些网站比较好互联网营销师培训课程免费
  • 给网站做游戏视频怎么赚钱关键词搜索引擎又称为
  • 南通网站建设方案咨询新手怎么入行seo
  • 驻马店市做网站免费刷粉网站推广
  • 衢州在建工程优化搜索引擎营销
  • 徐州方案公示在哪个网站重庆seo招聘
  • 贵港住房城乡建设厅网站河南今日头条新闻
  • 个人做网站需要学什么只是网域名查询地址
  • 网站后缀cc东莞疫情最新通知
  • 太谷网站建设今日国家新闻