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

如何做高端网站wordpress采集附件

如何做高端网站,wordpress采集附件,商业门户网站制作,软件下载网站开发一、Java内存结构1、Java堆(Java Heap)java堆是java虚拟机所管理的内存中最大的一块#xff0c;是被所有线程共享的一块内存区域#xff0c;在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例#xff0c;这一点在Java虚拟机规范中的描述是#xff1a;所有的对象实…一、Java内存结构1、Java堆(Java Heap)java堆是java虚拟机所管理的内存中最大的一块是被所有线程共享的一块内存区域在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例这一点在Java虚拟机规范中的描述是所有的对象实例以及数组都要在堆上分配。java堆是垃圾收集器管理的主要区域因此也被成为“GC堆”(Garbage Collected Heap)。从内存回收角度来看java堆可分为新生代和老生代。从内存分配的角度看线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(Thread Local Allocation BufferTLAB)。无论怎么划分都与存放内容无关无论哪个区域存储的都是对象实例进一步的划分都是为了更好的回收内存或者更快的分配内存。根据Java虚拟机规范的规定java堆可以处于物理上不连续的内存空间中。当前主流的虚拟机都是可扩展的(通过 -Xmx 和 -Xms 控制)。如果堆中没有内存完成实例分配并且堆也无法再扩展时将会抛出OutOfMemoryError异常。2、Java虚拟机栈(Java Virtual Machine Stacks)java虚拟机也是线程私有的它的生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。咱们常说的堆内存、栈内存中栈内存指的就是虚拟机栈。局部变量表存放了编译期可知的各种基本数据类型(8个基本数据类型)、对象引用(地址指针)、returnAddress类型。局部变量表所需的内存空间在编译期间完成分配。在运行期间不会改变局部变量表的大小。这个区域规定了两种异常状态如果线程请求的栈深度大于虚拟机所允许的深度则抛出StackOverflowError异常如果虚拟机栈可以动态扩展在扩展是无法申请到足够的内存就会抛出OutOfMemoryError异常。3、本地方法栈(Native Method Stack)本地方法栈与虚拟机栈所发挥作用非常相似它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务而本地方法栈则为虚拟机使用到的native方法服务。本地方法栈也是抛出两个异常。4、方法区(Method Area)方法区与java堆一样是各个线程共享的内存区域它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。它有个别命叫Non-Heap(非堆)。当方法区无法满足内存分配需求时抛出OutOfMemoryError异常。5、直接内存(Direct Memory)直接内存不是虚拟机运行时数据区的一部分也不是java虚拟机规范中定义的内存区域。但这部分区域也呗频繁使用而且也可能导致OutOfMemoryError异常在JDK1.4中新加入的NIO(New Input/Output)类引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式它可以使用Native函数库直接分配堆外内存然后通过一个存储在java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。6、运行时常量池(Runtime Constant Pool)运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外还有一项信息是常量池用于存放编译期生成的各种字面量和符号引用这部分内容将在加载后进入方法区的运行时常量池中存放。## 7、程序计数器(Program Counter Register)程序计数器是一块较小的内存空间它可以看作是当前线程所执行的字节码的行号指示器。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的一个处理器都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置每条线程都有一个独立的程序计数器各个线程之间计数器互不影响独立存储。称之为“线程私有”的内存。程序计数器内存区域是虚拟机中唯一没有规定OutOfMemoryError情况的区域。8、执行引擎虚拟机核心的组件就是执行引擎它负责执行虚拟机的字节码一般户先进行编译成机器码后执行。9、垃圾收集系统垃圾收集系统是Java的核心也是不可少的Java有一套自己进行垃圾清理的机制开发人员无需手工清理二、垃圾回收机制算法分析1、什么是垃圾回收机制不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收 垃圾收集器在一个Java程序中的执行是自动的不能强制执行即使程序员能明确地判断出有一块内存已经无用了是应该回收的程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来建议执行垃圾收集器但其是否可以执行什么时候执行却都是不可知的。这也是垃圾收集器的最主要的缺点。public class Test {public static void main(String[] args) {Test test new Test();test null;System.gc(); // 手动回收垃圾}Overrideprotected void finalize() throws Throwable {// gc回收垃圾之前调用System.out.println(垃圾回收机制...);}}2、finalize方法作用Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。3、新生代与老年代Java 中的堆是 JVM 所管理的最大的一块内存空间主要用于存放各种类的实例对象。在 Java 中堆被划分成两个不同的区域新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象包括内存的分配以及回收。堆的内存模型大致为默认的新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )即新生代 ( Young ) 1/3 的堆空间大小。老年代 ( Old ) 2/3 的堆空间大小。其中新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域这两个 Survivor 区域分别被命名为 from 和 to以示区分。默认的Eden : from : to 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 )即 Eden 8/10 的新生代空间大小from to 1/10 的新生代空间大小。根据垃圾回收机制的不同Java堆有可能拥有不同的结构最为常见的就是将整个Java堆分为新生代和老年代。其中新生带存放新生的对象或者年龄不大的对象老年代则存放老年对象。新生代分为den区、s0区、s1区s0和s1也被称为from和to区域他们是两块大小相等并且可以互相角色的空间。绝大多数情况下对象首先分配在eden区在新生代回收后如果对象还存活则进入s0或s1区之后每经过一次新生代回收如果对象存活则它的年龄就加1对象达到一定的年龄后则进入老年代。三、如何判断对象是否存活1、引用计数法概念引用计数法就是如果一个对象没有被任何引用指向则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。首先需要声明至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存。什么是引用计数算法给对象中添加一个引用计数器每当有一个地方引用它时计数器值加当引用失效时计数器值减.任何时刻计数器值为的对象就是不可能再被使用的。那为什么主流的Java虚拟机里面都没有选用这种算法呢其中最主要的原因是它很难解决对象之间相互循环引用的问题。2、根搜索算法概念根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点从这些节点开始向下搜索搜索所走过的路径称为引用链(Reference Chain)当一个对象到GC Roots没有任何引用链相连时则证明此对象是不可用的。这个算法的基本思想是通过一系列称为“GC Roots”的对象作为起始点从这些节点向下搜索搜索所走过的路径称为引用链当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时则证明此对象是不可用的。那么问题又来了如何选取GCRoots对象呢在Java语言中可以作为GCRoots的对象包括下面几种(1). 虚拟机栈(栈帧中的局部变量区也叫做局部变量表)中引用的对象。(2). 方法区中的类静态属性引用的对象。(3). 方法区中常量引用的对象。(4). 本地方法栈中JNI(Native方法)引用的对象。下面给出一个GCRoots的例子如下图为GCRoots的引用链。user3和user5没有引用链根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点从这些节点开始向下搜索搜索所走过的路径称为引用链(Reference Chain)当一个对象到GC Roots没有任何引用链相连时则证明此对象是不可用的。四、垃圾回收机制策略1、标记清除算法概念该算法有两个阶段。标记阶段找到所有可访问的对象做个标记清除阶段遍历堆把未被标记的对象回收应用场景该算法一般应用于老年代,因为老年代的对象生命周期比较长。优缺点标记清除算法的优点和缺点1.优点是可以解决循环引用的问题必要时才回收(内存不足时)2.缺点回收时应用需要挂起也就是stop the world。标记和清除的效率不高尤其是要扫描的对象比较多的时候会造成内存碎片(会导致明明有内存空间,但是由于不连续,申请稍微大一些的对象无法做到),2、复制算法概念如果jvm使用了coping算法一开始就会将可用内存分为两块from域和to域 每次只是使用from域to域则空闲着。当from域内存不够了开始执行GC操作这个时候会把from域存活的对象拷贝到to域,然后直接把from域进行内存清理。应用场景coping算法一般是使用在新生代中因为新生代中的对象一般都是朝生夕死的存活对象的数量并不多这样使用coping算法进行拷贝时效率比较高。jvm将Heap 内存划分为新生代与老年代又将新生代划分为Eden(伊甸园) 与2块Survivor Space(幸存者区) ,然后在Eden –Survivor Space 以及From Survivor Space 与To Survivor Space 之间实行Copying 算法。 不过jvm在应用coping算法时并不是把内存按照1:1来划分的这样太浪费内存空间了。一般的jvm都是8:1。也即是说,Eden区:From区:To区域的比例是始终有90%的空间是可以用来创建对象的,而剩下的10%用来存放回收后存活的对象。1、当Eden区满的时候,会触发第一次young gc,把还活着的对象拷贝到Survivor From区当Eden区再次触发young gc的时候,会扫描Eden区和From区域,对两个区域进行垃圾回收,经过这次回收后还存活的对象,则直接复制到To区域,并将Eden和From区域清空。2、当后续Eden又发生young gc的时候,会对Eden和To区域进行垃圾回收,存活的对象复制到From区域,并将Eden和To区域清空。3、可见部分对象会在From和To区域中复制来复制去,如此交换15次(由JVM参数MaxTenuringThreshold决定,这个参数默认是15),最终如果还是存活,就存入到老年代注意: 万一存活对象数量比较多那么To域的内存可能不够存放这个时候会借助老年代的空间。优缺点优点:在存活对象不多的情况下性能高能解决内存碎片和java垃圾回收算法之-标记清除 中导致的引用更新问题。缺点: 会造成一部分的内存浪费。不过可以根据实际情况将内存块大小比例适当调整如果存活对象的数量比较大coping的性能会变得很差。3、标记压缩算法标记清除算法和标记压缩算法非常相同但是标记压缩算法在标记清除算法之上解决内存碎片化概念压缩算法简单介绍任意顺序 : 即不考虑原先对象的排列顺序也不考虑对象之间的引用关系随意移动对象线性顺序 : 考虑对象的引用关系例如a对象引用了b对象则尽可能将a和b移动到一块滑动顺序 : 按照对象原来在堆中的顺序滑动到堆的一端。优缺点优点:解决内存碎片问题缺点压缩阶段由于移动了可用对象需要去更新引用。4、Minor GC和Full GC区别概念新生代 GC(Minor GC)指发生在新生代的垃圾收集动作因为 Java 对象大多都具备朝生夕灭的特性所以 Minor GC 非常频繁一般回收速度也比较快。老年代 GC(Major GC  / Full GC)指发生在老年代的 GC出现了 Major GC经常会伴随至少一次的 Minor GC(但非绝对的在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。Minor GC触发机制当年轻代满时就会触发Minor GC这里的年轻代满指的是Eden代满Survivor满不会引发GCFull GC触发机制当年老代满时会引发Full GCFull GC将会同时回收年轻代、年老代当永久代满时也会引发Full GC会导致Class、Method元信息的卸载其中Minor GC如下图所示虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在 Eden 出生并经过第一次 Minor GC 后仍然存活并且能被 Survivor 容纳的话将被移动到 Survivor 空间中并将对象年龄设为 1。对象在 Survivor 区中每熬过一次 Minor GC年龄就增加 1 岁当它的年龄增加到一定程度(默认为 15 岁)时就会被晋升到老年代中。对象晋升老年代的年龄阈值可以通过参数 -XX:MaxTenuringThreshold (阈值)来设置。JVM的永久代中会发生垃圾回收么垃圾回收不会发生在永久代如果永久代满了或者是超过了临界值会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8从永久代到元数据区(注Java8中已经移除了永久代新加了一个叫做元数据区的native内存区)5、分代算法概述这种算法根据对象的存活周期的不同将内存划分成几块新生代和老年代这样就可以根据各个年代的特点采用最适当的收集算法。可以用抓重点的思路来理解这个算法。新生代对象朝生夕死,对象数量多只要重点扫描这个区域那么就可以大大提高垃圾收集的效率。另外老年代对象存储久无需经常扫描老年代避免扫描导致的开销。新生代在新生代每次垃圾收集器都发现有大批对象死去只有少量存活采用复制算法只需要付出少量存活对象的复制成本就可以完成收集老年代而老年代中因为对象存活率高、没有额外空间对它进行分配担保就必须“标记清除-压缩”算法进行回收。参看java垃圾回收算法之-标记_清除压缩新创建的对象被分配在新生代如果对象经过几次回收后仍然存活那么就把这个对象划分到老年代。老年代区存放Young区Survivor满后触发minor GC后仍然存活的对象当Eden区满后会将存活的对象放入Survivor区域如果Survivor区存不下这些对象GC收集器就会将这些对象直接存放到Old区中如果Survivor区中的对象足够老也直接存放到Old区中。如果Old区满了将会触发Full GC回收整个堆内存。个人博客 蜗牛
http://wiki.neutronadmin.com/news/210418/

相关文章:

  • 企业网站开发网站做端口是什么情况
  • 网站建设类的计入什么科目优秀个人网页设计案例分析
  • 竹子建站怎么样rpc wordpress
  • 如何免费注册一个网站网页编辑器安卓
  • 旅游网站手机模板网络建设推广
  • jp域名网站排名seo培训
  • 网站报名系统怎么做如果做微商需不需要开个网站。
  • 旅游商城网站订单处理厦门住建局
  • 南京 网站制作公司哪家好网上销售方法
  • dede旅游网站自己写的网站如何添加 cnzz统计
  • 教育平台型网站建设做英文小工具网站赚钱
  • 用腾讯云做淘宝客网站视频搭建企业网站公司
  • 青岛网站推广怎么做好房产网站的建设
  • 网站开发 小程序开发长沙服装网站建设
  • 菠菜网站建设条件宁波怎么建网站模板
  • 小程序和网站建设需要多钱网站并发要求
  • 如何更换网站的logo电商运营roi怎么算
  • dw做的网站如何发布上海天华建筑设计有限公司待遇
  • 电影网站logo设计网站建设教程搭建湖南岚鸿
  • 网站开发费建站设计网站
  • 苏州 网站设计 知名网站怎么能在百度搜到
  • 网站建设柒金手指花总12微信网站是什么意思
  • 单位建网站的详细步骤wordpress您访问的网页出错
  • 手机建设银行网站进不去wordpress搭建软件下载
  • 企业培训机构有哪些沈阳seo推广公司
  • 太原整站优化群晖 6.1 wordpress
  • 社保代缴网站开发泗水网站建设ys178
  • 怎样做视频电影网站怎样设计电子商务网站的建设
  • 天津网站开发贴吧山西省网站建设备案表
  • 门户型网站模板韩国跨境电商有哪些平台