中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

中華人民共和國(guó)城鄉(xiāng)與建設(shè)部網(wǎng)站長(zhǎng)沙seo優(yōu)化推薦

中華人民共和國(guó)城鄉(xiāng)與建設(shè)部網(wǎng)站,長(zhǎng)沙seo優(yōu)化推薦,官方網(wǎng)站管理辦法,apache配置wordpressJVM原理 (1)jvm是java的核心和基礎(chǔ),在java編譯器和os平臺(tái)之間的虛擬處理器,可在上面執(zhí)行字節(jié)碼程序。 (2)java編譯器只要面向jvm,生成jvm能理解的字節(jié)碼文件。java源文件經(jīng)編譯成字節(jié)碼程序&a…

JVM原理

(1)jvm是java的核心和基礎(chǔ),在java編譯器和os平臺(tái)之間的虛擬處理器,可在上面執(zhí)行字節(jié)碼程序。

(2)java編譯器只要面向jvm,生成jvm能理解的字節(jié)碼文件。java源文件經(jīng)編譯成字節(jié)碼程序,通過(guò)jvm將每條指令翻譯成不同的機(jī)器碼,通過(guò)特定平臺(tái)運(yùn)行。

JVM執(zhí)行程序的過(guò)程

  • 加載.class文件
  • 管理并分配內(nèi)存
  • 執(zhí)行垃圾收集

JRE(java運(yùn)行時(shí)環(huán)境)由JVM構(gòu)造的java程序的運(yùn)行環(huán),也是Java程序運(yùn)行的環(huán)境,但是他同時(shí)一個(gè)操作系統(tǒng)的一個(gè)應(yīng)用程序一個(gè)進(jìn)程,因此他也有他自己的運(yùn)行的生命周期,也有自己的代碼和數(shù)據(jù)空間。

JVM在整個(gè)jdk中處于最底層,負(fù)責(zé)于操作系統(tǒng)的交互,用來(lái)屏蔽操作系統(tǒng)環(huán)境,提供一個(gè)完整的Java運(yùn)行環(huán)境,因此也就虛擬計(jì)算機(jī)。

JVM的生命周期

JVM實(shí)例對(duì)應(yīng)了一個(gè)獨(dú)立運(yùn)行的java程序它是進(jìn)程級(jí)別

1) 啟動(dòng)。啟動(dòng)一個(gè)Java程序時(shí),一個(gè)JVM實(shí)例就產(chǎn)生了,任何一個(gè)擁有public static void
main(String[] args)函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn)

2) 運(yùn)行。main()作為該程序初始線程的起點(diǎn),任何其他線程均由該線程啟動(dòng)。JVM內(nèi)部有兩種線程:守護(hù)線程和非守護(hù)線程,main()屬于非守護(hù)線程,守護(hù)線程通常由JVM自己使用,java程序也可以表明自己創(chuàng)建的線程是守護(hù)線程

3) 消亡。當(dāng)程序中的所有非守護(hù)線程都終止時(shí),JVM才退出;若安全管理器允許,程序也可以使用Runtime類或者System.exit()來(lái)退出

JVM執(zhí)行引擎實(shí)例則對(duì)應(yīng)了屬于用戶運(yùn)行程序的線程它是線程級(jí)別的

JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)

方法區(qū)(Method Area)

方法區(qū)是所有線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)已被Java虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

它有個(gè)別命叫Non-Heap(非堆)。當(dāng)方法區(qū)無(wú)法滿足內(nèi)存分配需求時(shí),拋出OutOfMemoryError異常。

Java堆(Java Heap)

java堆是java虛擬機(jī)所管理的內(nèi)存中最大的一塊,是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對(duì)象實(shí)例。

在Java虛擬機(jī)規(guī)范中的描述是:所有的對(duì)象實(shí)例以及數(shù)組都要在堆上分配。

java堆是垃圾收集器管理的主要區(qū)域,因此也被成為“GC堆”。

從內(nèi)存回收角度來(lái)看java堆可分為:新生代和老生代。

從內(nèi)存分配的角度看,線程共享的Java堆中可能劃分出多個(gè)線程私有的分配緩沖區(qū)。

無(wú)論怎么劃分,都與存放內(nèi)容無(wú)關(guān),無(wú)論哪個(gè)區(qū)域,存儲(chǔ)的都是對(duì)象實(shí)例,進(jìn)一步的劃分都是為了更好的回收內(nèi)存,或者更快的分配內(nèi)存。

根據(jù)Java虛擬機(jī)規(guī)范的規(guī)定,java堆可以處于物理上不連續(xù)的內(nèi)存空間中。當(dāng)前主流的虛擬機(jī)都是可擴(kuò)展的(通過(guò) -Xmx 和 -Xms 控制)。如果堆中沒(méi)有內(nèi)存可以完成實(shí)例分配,并且堆也無(wú)法再擴(kuò)展時(shí),將會(huì)拋出OutOfMemoryError異常。

程序計(jì)數(shù)器(Program Counter Register)

程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,它可以看作是:保存當(dāng)前線程所正在執(zhí)行的字節(jié)碼指令的地址(行號(hào)),也可以把它叫做線程計(jì)數(shù)器。

由于Java虛擬機(jī)的多線程是通過(guò)線程輪流切換并分配處理器執(zhí)行時(shí)間的方式來(lái)實(shí)現(xiàn)的,一個(gè)處理器都只會(huì)執(zhí)行一條線程中的指令。因此,為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都有一個(gè)獨(dú)立的程序計(jì)數(shù)器,各個(gè)線程之間計(jì)數(shù)器互不影響,獨(dú)立存儲(chǔ)。稱之為“線程私有”的內(nèi)存。程序計(jì)數(shù)器內(nèi)存區(qū)域是虛擬機(jī)中唯一沒(méi)有規(guī)定OutOfMemoryError情況的區(qū)域。

Java虛擬機(jī)棧(Java Virtual Machine Stacks)

java虛擬機(jī)是線程私有的,它的生命周期和線程相同。

虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(Stack Frame)用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息。

虛擬機(jī)棧中是有單位的,單位就是棧幀,一個(gè)方法一個(gè)棧幀。一個(gè)棧幀中他又要存儲(chǔ),局部變量,操作數(shù)棧,動(dòng)態(tài)鏈接,出口等。

本地方法棧(Native Method Stack)

本地方法棧很好理解,他很棧很像,只不過(guò)方法上帶了 native 關(guān)鍵字的棧字

它是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法(也就是字節(jié)碼)的服務(wù)

native關(guān)鍵字的方法是看不到的,必須要去oracle官網(wǎng)去下載才可以看的到,而且native關(guān)鍵字修飾的大部分源碼都是C和C++的代碼。

同理可得,本地方法棧中就是C和C++的代碼

Java內(nèi)存結(jié)構(gòu)

直接內(nèi)存(Direct Memory)

直接內(nèi)存不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域。但是既然是內(nèi)存,肯定還是受本機(jī)總內(nèi)存(包括RAM以及SWAP區(qū)或者分頁(yè)文件)大小以及處理器尋址空間的限制。

在JDK1.4 中新加入了NIO(New Input/Output)類,引入了一種基于通道(Channel)與緩沖區(qū)(Buffer)的I/O 方式,它可以使用native 函數(shù)庫(kù)直接分配堆外內(nèi)存,然后通脫一個(gè)存儲(chǔ)在Java堆中的DirectByteBuffer 對(duì)象作為這塊內(nèi)存的引用進(jìn)行操作。這樣能在一些場(chǎng)景中顯著提高性能,因?yàn)楸苊饬嗽贘ava堆和Native(本地)堆中來(lái)回復(fù)制數(shù)據(jù)。

直接內(nèi)存與堆內(nèi)存的區(qū)別:

直接內(nèi)存申請(qǐng)空間耗費(fèi)很高的性能,堆內(nèi)存申請(qǐng)空間耗費(fèi)比較低

直接內(nèi)存的IO讀寫的性能要優(yōu)于堆內(nèi)存,在多次讀寫操作的情況相差非常明顯

JVM字節(jié)碼執(zhí)行引擎

虛擬機(jī)核心的組件就是執(zhí)行引擎,它負(fù)責(zé)執(zhí)行虛擬機(jī)的字節(jié)碼,一般戶先進(jìn)行編譯成機(jī)器碼后執(zhí)行。

“虛擬機(jī)”是一個(gè)相對(duì)于“物理機(jī)”的概念,虛擬機(jī)的字節(jié)碼是不能直接在物理機(jī)上運(yùn)行的,需要JVM字節(jié)碼執(zhí)行引擎編譯成機(jī)器碼后才可在物理機(jī)上執(zhí)行。

垃圾收集系統(tǒng)

程序在運(yùn)行過(guò)程中,會(huì)產(chǎn)生大量的內(nèi)存垃圾(一些沒(méi)有引用指向的內(nèi)存對(duì)象都屬于內(nèi)存垃圾,因?yàn)檫@些對(duì)象已經(jīng)無(wú)法訪問(wèn),程序用不了它們了,對(duì)程序而言它們已經(jīng)死亡),為了確保程序運(yùn)行時(shí)的性能,java虛擬機(jī)在程序運(yùn)行的過(guò)程中不斷地進(jìn)行自動(dòng)的垃圾回收(GC)。

垃圾收集系統(tǒng)是Java的核心,也是不可少的,Java有一套自己進(jìn)行垃圾清理的機(jī)制,開發(fā)人員無(wú)需手工清理。

JVM的垃圾回收機(jī)制

垃圾回收機(jī)制簡(jiǎn)稱GC

GC主要用于Java堆的管理。Java 中的堆是 JVM 所管理的最大的一塊內(nèi)存空間,主要用于存放各種類的實(shí)例對(duì)象。

什么是垃圾回收機(jī)制

程序在運(yùn)行過(guò)程中,會(huì)產(chǎn)生大量的內(nèi)存垃圾(一些沒(méi)有引用指向的內(nèi)存對(duì)象都屬于內(nèi)存垃圾,因?yàn)檫@些對(duì)象已經(jīng)無(wú)法訪問(wèn),程序用不了它們了,對(duì)程序而言它們已經(jīng)死亡),為了確保程序運(yùn)行時(shí)的性能,java虛擬機(jī)在程序運(yùn)行的過(guò)程中不斷地進(jìn)行自動(dòng)的垃圾回收(GC)。

GC是不定時(shí)去堆內(nèi)存中清理不可達(dá)對(duì)象。不可達(dá)的對(duì)象并不會(huì)馬上就會(huì)直接回收, 垃圾收集器在一個(gè)Java程序中的執(zhí)行是自動(dòng)的,不能強(qiáng)制執(zhí)行清楚那個(gè)對(duì)象,即使程序員能明確地判斷出有一塊內(nèi)存已經(jīng)無(wú)用了,是應(yīng)該回收的,程序員也不能強(qiáng)制垃圾收集器回收該內(nèi)存塊。程序員唯一能做的就是通過(guò)調(diào)用System.gc 方法來(lái)"建議"執(zhí)行垃圾收集器,但是他是否執(zhí)行,什么時(shí)候執(zhí)行卻都是不可知的。這也是垃圾收集器的最主要的缺點(diǎn)。當(dāng)然相對(duì)于它給程序員帶來(lái)的巨大方便性而言,這個(gè)缺點(diǎn)是瑕不掩瑜的。

手動(dòng)執(zhí)行GC:

System.gc(); // 手動(dòng)回收垃圾

finalize方法作用

finalize()方法是在每次執(zhí)行GC操作之前時(shí)會(huì)調(diào)用的方法,可以用它做必要的清理工作。
它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

public class Test {public static void main(String[] args) {Test test = new Test();test = null;System.gc(); // 手動(dòng)回收垃圾}@Overrideprotected void finalize() throws Throwable {// gc回收垃圾之前調(diào)用System.out.println("gc回收垃圾之前調(diào)用的方法");}
}

新生代、老年代、永久代(方法區(qū))的區(qū)別

Java 中的堆是 JVM 所管理的最大的一塊內(nèi)存空間,主要用于存放各種類的實(shí)例對(duì)象。

在 Java 中,堆被劃分成兩個(gè)不同的區(qū)域:新生代 ( Young )、老年代 ( Old )。

老年代就一個(gè)區(qū)域。新生代 ( Young ) 又被劃分為三個(gè)區(qū)域:Eden、From Survivor、To Survivor。

這樣劃分的目的是為了使 JVM 能夠更好的管理堆內(nèi)存中的對(duì)象,包括內(nèi)存的分配以及回收。

默認(rèn)的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 ( 該值可以通過(guò)參數(shù) –XX:NewRatio 來(lái)指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。老年代 ( Old ) = 2/3 的堆空間大小。

其中,新生代 ( Young ) 被細(xì)分為 Eden 和 兩個(gè) Survivor 區(qū)域,這兩個(gè) Survivor 區(qū)域分別被命名為 From Survivor 和 ToSurvivor ,以示區(qū)分。

默認(rèn)的,Edem : From Survivor : To Survivor = 8 : 1 : 1 ( 可以通過(guò)參數(shù) –XX:SurvivorRatio 來(lái)設(shè)定 ),即: Eden = 8/10 的新生代空間大小,From Survivor = To Survivor = 1/10 的新生代空間大小。

JVM 每次只會(huì)使用 Eden 和其中的一塊 Survivor 區(qū)域來(lái)為對(duì)象服務(wù),所以無(wú)論什么時(shí)候,總是有一塊 Survivor 區(qū)域是空閑著的。

因此,新生代實(shí)際可用的內(nèi)存空間為 9/10 ( 即90% )的新生代空間。

永久代就是JVM的方法區(qū)。在這里都是放著一些被虛擬機(jī)加載的類信息,靜態(tài)變量,常量等數(shù)據(jù)。這個(gè)區(qū)中的東西比老年代和新生代更不容易回收。

Minor GC、Major GC、Full GC區(qū)別及觸發(fā)條件

Minor GC是新生代GC,指的是發(fā)生在新生代的垃圾收集動(dòng)作。由于java對(duì)象大都是朝生夕死的,所以Minor GC非常頻繁,一般回收速度也比較快。

Major GC是老年代GC,指的是發(fā)生在老年代的GC,通常執(zhí)行Major GC會(huì)連著Minor GC一起執(zhí)行。Major GC的速度要比Minor GC慢的多。

Full GC是清理整個(gè)堆空間,包括年輕代和老年代

Minor GC 觸發(fā)條件一般為:

  • eden區(qū)滿時(shí),觸發(fā)MinorGC。即申請(qǐng)一個(gè)對(duì)象時(shí),發(fā)現(xiàn)eden區(qū)不夠用,則觸發(fā)一次MinorGC。
  • 新創(chuàng)建的對(duì)象大小 > Eden所??臻g

Major GC和Full GC 觸發(fā)條件一般為:

Major GC通常是跟full GC是等價(jià)的

  • 每次晉升到老年代的對(duì)象平均大小>老年代剩余空間
  • MinorGC后存活的對(duì)象超過(guò)了老年代剩余空間
  • 永久代空間不足
  • 執(zhí)行System.gc()
  • CMS GC異常
  • 堆內(nèi)存分配很大的對(duì)象

垃圾收集器

垃圾收集器是垃圾回收算法(引用計(jì)數(shù)法、標(biāo)記清楚法、標(biāo)記整理法、復(fù)制算法)的具體實(shí)現(xiàn),不同垃圾收集器、不同版本的JVM所提供的垃圾收集器可能會(huì)有很在差別。

  • 新生代收集器:Serial、ParNew、Parallel Scavenge
  • 老年代收集器:CMS、Serial Old、Parallel Old
  • 整堆收集器:G1

垃圾回收器詳解

垃圾回收器工作區(qū)域回收算法工作線程用戶線程并行描述
Serial新生帶復(fù)制算法單線程Client模式下默認(rèn)新生代收集器。簡(jiǎn)單高效
ParNew新生帶復(fù)制算法多線程Serial的多線程版本,Server模式下首選, 可搭配CMS的新生代收集器
Parallel Scavenge新生帶復(fù)制算法多線程目標(biāo)是達(dá)到可控制的吞吐量
Serial Old老年帶標(biāo)記-整理單線程Serial老年代版本,給Client模式下的虛擬機(jī)使用
Parallel Old老年帶標(biāo)記-整理多線程Parallel Scavenge老年代版本,吞吐量?jī)?yōu)先
CMS老年帶標(biāo)記-清楚多線程追求最短回收停頓時(shí)間
G1新生帶 + 老年帶標(biāo)記-整理 + 復(fù)制算法多線程JDK1.9默認(rèn)垃圾收集器

JVM參數(shù)配置

-Xms:初始堆大小,JVM 啟動(dòng)的時(shí)候,給定堆空間大小。 -Xmx:最大堆大小,JVM 運(yùn)行過(guò)程中,如果初始堆空間不足的時(shí)候,最大可以擴(kuò)展到多少。 -Xmn:設(shè)置堆中年輕代大小。整個(gè)堆大小=年輕代大小+年老代大小+持久代大小。 -XX:NewSize=n 設(shè)置年輕代初始化大小大小 -XX:MaxNewSize=n 設(shè)置年輕代最大值-XX:NewRatio=n 設(shè)置年輕代和年老代的比值。如: -XX:NewRatio=3,表示年輕代與年老代比值為 1:3,年輕代占整個(gè)年輕代+年老代和的 1/4 -XX:SurvivorRatio=n 年輕代中 Eden 區(qū)與兩個(gè) Survivor 區(qū)的比值。注意 Survivor 區(qū)有兩個(gè)。8表示兩個(gè)Survivor :eden=2:8 ,即一個(gè)Survivor占年輕代的1/10,默認(rèn)就為8-Xss:設(shè)置每個(gè)線程的堆棧大小。JDK5后每個(gè)線程 Java 棧大小為 1M,以前每個(gè)線程堆棧大小為 256K。-XX:ThreadStackSize=n 線程堆棧大小-XX:PermSize=n 設(shè)置持久代初始值	-XX:MaxPermSize=n 設(shè)置持久代大小-XX:MaxTenuringThreshold=n 設(shè)置年輕帶垃圾對(duì)象最大年齡。如果設(shè)置為 0 的話,則年輕代對(duì)象不經(jīng)過(guò) Survivor 區(qū),直接進(jìn)入年老代。-XX:LargePageSizeInBytes=n 設(shè)置堆內(nèi)存的內(nèi)存頁(yè)大小-XX:+UseFastAccessorMethods 優(yōu)化原始類型的getter方法性能-XX:+DisableExplicitGC 禁止在運(yùn)行期顯式地調(diào)用System.gc(),默認(rèn)啟用	-XX:+AggressiveOpts 是否啟用JVM開發(fā)團(tuán)隊(duì)最新的調(diào)優(yōu)成果。例如編譯優(yōu)化,偏向鎖,并行年老代收集等,jdk6紙之后默認(rèn)啟動(dòng)-XX:+UseBiasedLocking 是否啟用偏向鎖,JDK6默認(rèn)啟用	-Xnoclassgc 是否禁用垃圾回收-XX:+UseThreadPriorities 使用本地線程的優(yōu)先級(jí),默認(rèn)啟用

JVM的GC垃圾收集器設(shè)置

-XX:+UseSerialGC:設(shè)置串行收集器,年輕帶收集器 -XX:+UseParNewGC:設(shè)置年輕代為并行收集??膳c CMS 收集同時(shí)使用。JDK5.0 以上,JVM 會(huì)根據(jù)系統(tǒng)配置自行設(shè)置,所以無(wú)需再設(shè)置此值。-XX:+UseParallelGC:設(shè)置并行收集器,目標(biāo)是目標(biāo)是達(dá)到可控制的吞吐量-XX:+UseParallelOldGC:設(shè)置并行年老代收集器,JDK6.0 支持對(duì)年老代并行收集。 -XX:+UseConcMarkSweepGC:設(shè)置年老代并發(fā)收集器-XX:+UseG1GC:設(shè)置 G1 收集器,JDK1.9默認(rèn)垃圾收集器

示例:

假設(shè)服務(wù)器內(nèi)存8G,運(yùn)行8個(gè)微服務(wù),給每個(gè)微服務(wù)分配800M內(nèi)存

設(shè)置JVM:

java -Xmx800m -Xms800m -Xmn300m -Xss1024k

-Xmx800m 設(shè)置JVM最大內(nèi)存為800M
-Xms800m 設(shè)置JVM最小內(nèi)存為800M(與最大值保持一致可以防止每次垃圾回收(GC)后JVM對(duì)內(nèi)存進(jìn)行再分配)
-Xmn300m 設(shè)置新生代大小,新生代大小會(huì)影響到老年代的大小,Sun推薦設(shè)置為總內(nèi)存的3/8
-Xss1024k 每個(gè)線程堆棧大小,值越小能生成的線程數(shù)越多,但是一般不超過(guò)5000個(gè),在遞歸場(chǎng)景下值太小可能會(huì)造成堆棧溢出

http://www.risenshineclean.com/news/40529.html

相關(guān)文章:

  • ae有么有做gif的網(wǎng)站構(gòu)建新發(fā)展格局
  • 網(wǎng)站開發(fā)架設(shè)baidu百度
  • 如何打開本地安裝的WORDPRESS網(wǎng)站查詢工具seo
  • 合肥建設(shè)學(xué)校官網(wǎng)網(wǎng)站網(wǎng)站關(guān)鍵詞挖掘
  • html5移動(dòng)網(wǎng)站模板貴港網(wǎng)站seo
  • 怎么兼職做網(wǎng)站谷歌seo站內(nèi)優(yōu)化
  • 用網(wǎng)站模板建網(wǎng)站谷歌官網(wǎng)注冊(cè)入口
  • 一個(gè)網(wǎng)站想看訪客量怎么做seo外鏈平臺(tái)
  • 青浦網(wǎng)站建設(shè)公司福州短視頻seo推薦
  • 網(wǎng)站風(fēng)格設(shè)計(jì)百度seo怎么樣優(yōu)化
  • 網(wǎng)站建設(shè)文化怎么樣圖片百度搜索
  • 簡(jiǎn)單的招聘網(wǎng)站怎么做電商網(wǎng)站設(shè)計(jì)
  • 手機(jī)哪里可以做視頻網(wǎng)站鄭州聚商網(wǎng)絡(luò)科技有限公司
  • 勁松做網(wǎng)站的公司百度一下首頁(yè)設(shè)為主頁(yè)
  • wordpress中文 插件網(wǎng)站文章優(yōu)化技巧
  • 做網(wǎng)站北京公司推廣產(chǎn)品的渠道
  • drupal7建站教程怎么創(chuàng)建網(wǎng)站鏈接
  • 重慶微網(wǎng)站建設(shè)寧波網(wǎng)絡(luò)推廣軟件
  • 自適應(yīng)網(wǎng)站設(shè)計(jì)規(guī)范企業(yè)的互聯(lián)網(wǎng)推廣
  • 如何建設(shè)dj網(wǎng)站seo 工具推薦
  • 成都網(wǎng)站制作創(chuàng)新互聯(lián)磁力搜索引擎哪個(gè)好
  • 寬屏企業(yè)網(wǎng)站源碼國(guó)家再就業(yè)免費(fèi)培訓(xùn)網(wǎng)
  • 遵義做網(wǎng)站的公司重慶電子商務(wù)網(wǎng)站seo
  • 家用電腦如何做網(wǎng)站服務(wù)器百度總部公司地址在哪里
  • 做網(wǎng)站可以用什么語(yǔ)言長(zhǎng)春網(wǎng)站優(yōu)化平臺(tái)
  • 購(gòu)物網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營(yíng)銷管理名詞解釋
  • wordpress國(guó)內(nèi)支付上海搜索優(yōu)化推廣
  • html可以做動(dòng)態(tài)網(wǎng)站嗎我是seo關(guān)鍵詞
  • 應(yīng)用商城下載seo服務(wù)是什么
  • 怎么用文件做網(wǎng)站快速優(yōu)化網(wǎng)站排名軟件