[置顶] 长期出售:Godaddy老域名,Godaddy历史BA老域名!

[置顶] 长期出售:搜狗pr域名,搜狗收录域名,搜狗权重域名!

[置顶] 长期出售:高外链域名,高反链域名,权重域名,有收录的域名!

深入掌握SEO的知识

在了解了一些基本概念后,需要对SEO有进一步的认识。专业术语怎么说?SEO内部的专业如何分类?作弊的手法有哪些,如何避免?接下来,我们开始进入SEO进阶的学习。
网站收录数量一定是重要的权重因素。网站被收录的页面越多,权重一定越局.也说明网站在网络营销这面有很大帮助。

手机品牌中诺基亚排第一,其次是MOTO。这2个品牌每年都出非常多的新款手机。假设市场上只有100种手机款式,诺基亚可能就有50款,其他品牌加起来总共50款。某品牌手机的款式占有率高,该品牌理所应当地获得用户更多的信任。

黑帽技术之文字的神秘面纱

隐藏文字是SEO中的常用的作弊方式。由于一些想法并不想用多余的引诱搜索引擎阅读的文字来影响网页的长相和感觉,那么我们就要在网站建设之前想一些方法,将这些多余的文字隐藏在HTML编码中,只让搜索引擎看见或者使之透明而让浏览者看不见。这样不仅能达到效果,还能使页面保持之前的风格样貌,一举两得。

有以下多种方法来达到这个效果。

*使用文字的颜色设计成与网页的背景相同或者近似的颜色,也就是对标签进行色彩修饰。

*在表单的HTML编码中的< input type=“hidden”>中添加文字,即使有时整个网页没有一个表单。

增量式可达性分析

如果我们让增变者和一个像算法,那样的基本跟踪算法交替执行,那么一些可达对象可能会被错认为是不可达的。问题的根源在于增变者的动作可能会违反这个算法的一个关键不变式,即一个已扫描对象中的引用只能指向已扫描或待扫描的对象,这些引用不可以指向未被访问对象。考虑下面的场景:

1)垃圾回收器发现对象o1可达并扫描o1中的指针,因而将o1置于已扫描状态。

2)增变者将一个指向未被访问(但可达)的对象0的引用存放到已扫描对象ol中。它从当前处于未被访问或待扫描状态的对象o2中将一个指向o的引用拷贝到ol中。

部分回收概述

一个基本的事实是,对象通常“英年早逝”。人们发现,通常80%-98%的新分配对象在几百万条指令之内,或者在再分配了另外的几兆字节之前就消亡了。也就是说,对象通常在垃圾回收过程启动之前就已经变得不可达了。因此,频繁地对新对象进行垃圾具有相当高的性价比。

然而,经历了一次回收的对象很可能在多次回收之后依然存在。在迄今为止描述的垃圾回收器中,同一个成熟对象会在各轮垃圾回收中被发现是可达的。如果使用拷贝回收器,这些对象会在各轮垃圾回收中被一次次地拷贝。世代回收在包含最年轻对象的堆区域中的回收工作最为频繁,所以它通常可以用相对较少的工作量回收大量的垃圾。另一方面,列车算法没有在年轻对象上花费太多的时间,但是它能够有效限制因垃圾回收而造成的程序停顿时间。因此,将这两个策略合并的好方法是对年轻对象使用世代回收,而一旦一个对象变得相当成熟,则将它“提升”到一个由列车算法管理的独立堆区中。

运行环境之列车算法

尽管世代方法在处理年轻对象时非常高效,但它在处理成熟对象时却相对低效,因为每当一个垃圾回收过程涉及某个成熟对象时,该对象都会被移动,而且它们不太可能变成垃圾。另一种 被称为列车算法的增量式回收方法用于改进对成熟对象的处理。它可以用来回收所有的垃圾。 但是更好的方法是使用世代方法来处理年轻的对象,只有当这些对象经历了几轮世代回收之后仍然存在,才将它们提升到另一个由列车算法管理的堆区。列车算法的另一个优点是我们永远不需要进行全面的垃圾回收过程,而在世代垃圾回收中却仍然必须偶尔那样做。

为了描述列车算法的动机,我们首先看一个简单的例子。该例子告诉我们为什么在世代方法中必须偶尔进行一轮全面的垃圾回收。给出了位于两个区域i和j中的两个相互连接的对象,其中j>i。因为这两个对象都有来自其区域之外的指针,只对区域i或只对区域j进行回收都不能回收这两个对象。然而,它们可能实际上是一个循环垃圾结构中的一部分,没有外部链接指向该垃圾结构。一般来说,这里显示的对象之间的“链接”可能涉及很多对象和一条很长的引用链。

短停顿垃圾回收

简单的基于跟踪的回收器是以全面停顿的方式进行垃圾回收的,它可能造成用户程序的运行的长时间的停顿。我们可以每次只做部分垃圾回收工作,从而减少一次停顿的长度。我们可以按照时间来分割工作任务,使垃圾回收和增变者的运行交错进行。我们也可以按照空间来分割工作任务,每次只完成一部分垃圾的回收。前者称为增量式回收(incremental collection),后者称为部分回收(partial collection)。

增量式回收器将可达性分析任务分割成为若干个较小单元,并允许增变者和这些任务单元交错运行。可达集合会随着增变者的运行发生变化,因此增量式回收是很复杂的。我们将看到,寻找一个稍微保守的解决方法将使得跟踪更加髙效。

并行垃圾回收算法

我们必须控制启动跟踪过程的频率,这很重要。跟踪步骤就像是一场赛跑。增变者创建出必须被扫描的新对象和新引用,而跟踪过程则试图扫描所有可达对象,并重新扫描同时产生的脏卡片。
下面给出一个并行、并发垃圾回收算法的大概描述,我们可以仔细看一下,:

1)扫描每个增变者线程的根集,将所有可以从根集中直接到达的对象设为待扫描状态。完成这一步的最简单的增量式做法是等待一个增变者线程调用内存管理器,如果那时它的根集还没有被扫描,就让它扫描自己的根集。如果所有其他跟踪工作都已经完成,而某个增变者线程还没有调用内存分配函数,那么必须暂停这个线程,扫描它的根集。

运行时刻之弱引用

有时候,虽然程序员使用了带有垃圾回收机制的语言,但是仍然希望自己管理内存,或者管理部分内存。也就是说,尽管仍然存在一些引用指向某些对象,但程序员知道这些对象不会再被访问。一个来自编译的例子可以说明这一问题。

我们已经看到,词法分析器通常会管理一个符号表,为它碰到的每个标识符创建一个对象。比如,这些对象可能作为词法值被附加于语法分析树中代表这些标识符的叶子结点上。然而,以这些标识符的字符串作为键值构造一个散列表有助于对这些对象进行定位。这个散列表可以在词法分析器碰到一个标识符词法单元时更容易找到对应的对象。

代码生成之简述

我们的编译器模型的最后一个步骤是代码生成器。它以编译器前端生成的中间表示(IR)和相关的符号表信息作为输人,输出语义等价的目标程序。

对代码生成器的要求是很严格的。目标程序必须保持源程序的语义含义,还必须具有很的质量。也就是说,它必须有效地利用目标机器上的可用资源。此外,代码生成器本身必须能高效运行。

具有挑战性的是,从数学上讲,为给定源程序生成一个最优的目标程序是不可判定问题码生成中碰到的很多子问题(比如寄存器分配)都具有难以处理的计算复杂性。在实践中,我们使用那些能够产生良好但不一定最优的代码的启发性技术。幸运的是,启发性技术已经非常成熟,一个精心设计的代码生成器所产生的代码要比那些由简单的生成器生成的代码快好几倍。

代码生成器中的目标程序

构造一个能够产生高质量机器代码的代码生成器的难度会受到目标机器的指令集体系结构的极大影响。最常见的目标机体系结构是RISC(精简指令集计算机)、CISC(复杂指令集计算机)和基于堆桟的结构。

RISC机通常有很多寄存器、三地址指令、简单的寻址方式和一个相对简单的指令集体系结构。相反,CISC机通常具有较少寄存器、两地址指令、多种寻址方式、多种类型的寄存器、可变长度的指令和具有副作用的指令。

在基于栈的机器中,运算是通过把运算分量压人一个栈,然后再对栈顶的运算分量进行运算而完成的。为了获得高性能,栈顶元素通常保存在寄存器中。因为人们觉得堆栈组织的限制太多,并且需要太多的交换和拷贝操作,所以基于堆栈的机器几乎已经消失了。

«686970717273747576777879808182»

热门搜索: 外链域名 高外链域名 高收录域名

Copyright www.thyst.cn. Some Rights Reserved.