日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浮点数例外 (核心已转储)_15000 字梳理 JVM 的核心知识

發(fā)布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浮点数例外 (核心已转储)_15000 字梳理 JVM 的核心知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

隨著cpu運(yùn)行速度的提高和內(nèi)存的增大,我們的應(yīng)用程序的用戶響應(yīng)時間和系統(tǒng)吞吐量也發(fā)生了質(zhì)的提高。但是只有硬件設(shè)備的提高是不行的,軟件的性能和運(yùn)行在硬件上的虛擬機(jī)的各項(xiàng)參數(shù)都影響著系統(tǒng)的質(zhì)量。在越來越多的大廠面試中,jvm逐漸成為面試官青睞的考點(diǎn)。

本文講解了運(yùn)行時數(shù)據(jù)區(qū)域,內(nèi)存溢出,如何判斷對象是否存活,垃圾回收算法和垃圾收集器,類加載機(jī)制和雙親委派模型以及對象的創(chuàng)建存儲和訪問幾個方面,涵蓋jvm的核心考點(diǎn),希望你有所收獲。

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

java虛擬機(jī)運(yùn)行時有哪些數(shù)據(jù)區(qū)域,他們都有什么用途?

有程序計數(shù)器、java虛擬機(jī)棧、本地方法棧、堆和方法區(qū)五大模塊。請看下圖:

程序計數(shù)器

程序計數(shù)器是一塊較小的內(nèi)存空間,他可以看做是當(dāng)期線程所執(zhí)行的字節(jié)碼的行號指令器。字節(jié)碼解釋器工作時就是通過改變這個計數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼指令。在任何一個確定的時刻,一個處理器都只會執(zhí)行一條線程中的指令。因此,為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要有一個獨(dú)立的程序計數(shù)器,各個線程之間互不影響,獨(dú)立存儲,所以程序計數(shù)器是“線程私有的”。另外,程序計數(shù)器是唯一一個在java虛擬機(jī)規(guī)范中沒有規(guī)定OOM的區(qū)域。

Java虛擬機(jī)棧

Java虛擬機(jī)棧也是線程私有的,它的生命周期與線程相同,虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型,每個方法在執(zhí)行的同時都會創(chuàng)建一個棧幀用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每個方法從調(diào)用直至執(zhí)行完成的過程,對應(yīng)著一個棧幀在虛擬機(jī)棧中入棧到出棧的過程。(程序員經(jīng)常會把Java內(nèi)存劃分為堆內(nèi)存和棧內(nèi)存,這種說法比較粗糙,其中的棧內(nèi)存就是指虛擬機(jī)棧,或者說是虛擬機(jī)棧中的局部變量表的部分)

在Java虛擬機(jī)規(guī)范中,對這個區(qū)域規(guī)定了兩種異常:如果線程請求的棧深度大于虛擬機(jī)所允許的深度,將拋出StackOverFlowError異常。如果虛擬機(jī)棧可以動態(tài)擴(kuò)展,如果擴(kuò)展時無法申請到足夠的內(nèi)存,就會拋出OOM異常。

本地方法棧

本地方法棧與虛擬機(jī)棧作用類似,他們之間的區(qū)別不過是虛擬機(jī)棧是為虛擬機(jī)執(zhí)行Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則為虛擬機(jī)使用到的Native方法服務(wù)。與虛擬機(jī)棧一樣,本地方法棧也會拋出StackOverFlowError異常和OOM異常。

Java堆是Java虛擬機(jī)管理的最大的一塊內(nèi)存,是所有線程共享的區(qū)域,在虛擬機(jī)啟動時就創(chuàng)建。堆用來存放對象實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存(注意是幾乎所有)。這一點(diǎn)在Java虛擬機(jī)規(guī)范中描述為:所有的對象實(shí)例以及數(shù)組都要在堆上分配,但隨著JIT編譯器的發(fā)展和逃逸分析技術(shù)的成熟,棧上分配、標(biāo)量替換技術(shù)將會導(dǎo)致一些微妙的變化發(fā)生,所有對象都分配在堆上也不是那么絕對了。
如果在堆中沒有內(nèi)存完成實(shí)例分配,并且堆也無法再擴(kuò)展時,將會拋出OOM異常。

方法區(qū)

方法區(qū)與Java堆一樣,是各個線程共享的區(qū)域,它用來存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。根據(jù)Java虛擬機(jī)規(guī)范,當(dāng)方法區(qū)無法滿足內(nèi)存分配的 需求時,將拋出OOM異常。
運(yùn)行時常量池是方法區(qū)的一部分,用于存放編譯器生成的各種字面量和符號引用。運(yùn)行時常量池相對于Class文件常量池的另外一個重要特征就是具備動態(tài)性。也就是說運(yùn)行期間也可能將新的常量 放入池中,這種特性被利用的比較多的就是String類的intern()方法。

直接內(nèi)存

直接內(nèi)存并不是運(yùn)行時數(shù)據(jù)區(qū)的一部分,也不是Java虛擬機(jī)定義的內(nèi)存區(qū)域。本機(jī)直接內(nèi)存的分配不受Java堆大小的限制,但是受本機(jī)總內(nèi)存大小以及處理器尋址空間的限制。

內(nèi)存溢出

堆內(nèi)存溢出

Java堆用于存儲對象實(shí)例,只要不斷創(chuàng)建對象,并且保證GC Roots到對象之間有可達(dá)路徑來避免垃圾回收機(jī)制清除這些對象,那么在對象數(shù)量達(dá)到最大堆容量限制后就會OOM。(輕易不要運(yùn)行)

public class HeapOOMTest {static class OOMObject {}public static void main(String [] args) {List<OOMObject> list = new ArrayList<>();while (true) {list.add(new OOMObject());}} }

Java堆內(nèi)存的OOM異常是實(shí)際應(yīng)用中最常見的內(nèi)存溢出,當(dāng)出現(xiàn)了咋辦?一般的手段是先通過內(nèi)存映像分析工具對Dump出來的堆轉(zhuǎn)儲快照進(jìn)行分析,重點(diǎn)是確認(rèn)內(nèi)存中的對象是否是必要的,也就是確認(rèn)是內(nèi)存泄露還是內(nèi)存溢出。

如果是內(nèi)存泄露,可進(jìn)一步通過工具查看泄露對象到GCRoots的引用鏈,找到為什么垃圾收集器無法回收它們。如果不存在泄露,就是內(nèi)存中的對象必須都存活,那就要檢查虛擬機(jī)的堆內(nèi)存是否可以調(diào)大,從代碼上檢查是否某些對象生命周期過長,減少內(nèi)存消耗,優(yōu)化代碼。

虛擬機(jī)棧溢出

關(guān)于虛擬機(jī)棧,在java虛擬機(jī)規(guī)范中描述了兩種異常:

(1)如果線程請求的棧深度大于虛擬機(jī)所允許的最大深度,將拋出StackOverFlowError異常。
(2)如果虛擬機(jī)在擴(kuò)展棧時無法申請到足夠的內(nèi)存空間,則拋出OutOdMemoryError異常。

這里描述的兩種情況實(shí)際上有些重疊:當(dāng)棧空間無法繼續(xù)分配的時候,到底是內(nèi)存太小導(dǎo)致的,還是已使用的棧空間太大,本質(zhì)上是一樣的。

public class StackSOFTest {private int stackLength = -1;public void stackLeak() {stackLength++;stackLeak();}public static void main(String [] args) throws Throwable {StackSOFTest oom = new StackSOFTest();try {oom.stackLeak();} catch (Throwable e) {System.out.println("stack length:"+oom.stackLength);throw e;}} }

運(yùn)行結(jié)果:

stack length:13980 Exception in thread "main" java.lang.StackOverflowErrorat oom.StackSOFTest.stackLeak(StackSOFTest.java:14)at oom.StackSOFTest.stackLeak(StackSOFTest.java:14)at oom.StackSOFTest.stackLeak(StackSOFTest.java:14)...后續(xù)省略

實(shí)驗(yàn)結(jié)果表明:在單個線程下,無論是由于棧幀太大還是虛擬機(jī)棧容量太小,當(dāng)內(nèi)存無法分配時,虛擬機(jī)拋出的都是StackOverflowError異常。

對象是“生”是“死”

對象的四種引用

引用分為強(qiáng)引用,軟引用,弱引用和虛引用四種,這四種引用強(qiáng)度依次逐漸減弱。

1、強(qiáng)引用就是指在程序代碼中普遍存在的,是指創(chuàng)建一個對象并把這個對象賦給一個引用變量,類似Object obj = new Object()這類的引用,只要強(qiáng)引用還存在,垃圾收集器就永遠(yuǎn)不會回收被引用的對象。如果想中斷強(qiáng)引用和某個對象之間的關(guān)聯(lián),可以顯示的將引用賦值為null,這樣jvm在合適的時間就會回收該對象。

2、軟引用是用來描述一些還有用但并非必需的對象。對于軟引用關(guān)聯(lián)著的對象,在系統(tǒng)將會發(fā)生內(nèi)存溢出異常之前,將會把這些對象列進(jìn)回收范圍之中進(jìn)行第二次回收。SoftReference的特點(diǎn)是它的一個實(shí)例保存對一個Java對象的軟引用,該軟引用的存在不妨礙垃圾收集器線程對該Java對象的回收。

3、弱引用也是用來描述非必需對象的。當(dāng)JVM進(jìn)行垃圾回收時,無論內(nèi)存是否充足,都會回收被弱引用關(guān)聯(lián)的對象。在java中,用java.lang.ref.WeakReference類來表示。

4、虛引用和前面的軟引用和弱引用不同,它并不影響對象的生命周期。在java中使用PhantomReference類來表示。如果一個對象與虛引用關(guān)聯(lián),跟沒有引用與之關(guān)聯(lián)一樣,任何時候都可能被回收。要注意的是,虛引用必須和引用隊列關(guān)聯(lián)使用。當(dāng)垃圾收集器準(zhǔn)備回收一個對象時,如果發(fā)現(xiàn)它還有虛引用,就會把這個虛引用加入到與之關(guān)聯(lián)的引用隊列中。為對象設(shè)置虛引用的唯一目的就是能在這個對象被垃圾收集器回收時收到一個系統(tǒng)通知。

引用計數(shù)法的缺陷

引用計數(shù)法就是給對象添加一個引用計數(shù)器,每當(dāng)有一個地方引用它時,計數(shù)器值就加1.當(dāng)引用失效時,計數(shù)器的值就減一。任何時刻計數(shù)器值為0的對象就是不可能再被使用的。
優(yōu)缺點(diǎn):實(shí)現(xiàn)簡單,判斷效率高,大部分情況下是個很不錯的算法。但是致命問題是沒辦法解決對象之間相互循環(huán)引用的問題。

public class ReferenceCountingGC {private Object instance = null;private static final int _1MB = 1024*1024;private byte[] bigSize = new byte[2*_1MB];public static void main(String [] args) {ReferenceCountingGC objA = new ReferenceCountingGC();ReferenceCountingGC objB = new ReferenceCountingGC();objA.instance = objB;objB.instance = objA;objA = null;objB = null;//假設(shè)在這行發(fā)生GC,ObjA和ObjB是否能被回收System.gc();} }

觀察GC日志可以看出GC發(fā)生了內(nèi)存回收,意味著虛擬機(jī)并沒有因?yàn)檫@兩個對象相互引用就不回收它們,這也從側(cè)面說明虛擬機(jī)并沒有采用引用計數(shù)法來判斷對象是否存活。

可達(dá)性分析

這個算法的基本思想是通過一系列被稱為“GC Roots”的對象作為起始點(diǎn),從這些節(jié)點(diǎn)開始向下搜索,搜索走過的路徑叫做引用鏈,當(dāng)一個對象到GC Roots沒有任何引用鏈相連 (用圖論的話來說就是從GC Roots到這個對象不可達(dá)),則證明此對象是不可用的。

在 Java語言中,可作為GC Roots的對象包括以下幾種

(1)虛擬機(jī)棧(棧幀中的本地變量表)中引用的對象。
(2)方法區(qū)中類靜態(tài)屬性引用的對象。
(3)方法區(qū)中常量引用的對象。
(4)本地方法棧中JNI(即一般說的Native方法)引用的對象。

對象是生存還是死亡?

即使在可達(dá)性分析法中不可達(dá)的對象,也并非“非死不可”,他們還有拯救自己的機(jī)會。要宣告一個對象死亡,至少要經(jīng)歷兩次標(biāo)記過程:如果對象在進(jìn)行可達(dá)性分析后沒有與GC Roots的引用鏈,那么它將會被第一次標(biāo)記,并且此時需要判斷是否有必要執(zhí)行finalize()方法。沒有必要的話,那么這個對象就宣告死亡,可以回收了。

如果有必要執(zhí)行,那么這個對象會被放置在一個叫做F-Queue的隊列中,并在稍后由虛擬機(jī)自動建立的低優(yōu)先級的Finalizer線程去執(zhí)行它。finalize()是對象拯救自己的最后一次機(jī)會-只要重新與引用鏈上的 任何一個對象建立關(guān)聯(lián)即可(譬如把自己賦值給某個類變量或者對象的成員變量),那么在第二次標(biāo)記時它將被移除“可回收”的集合,如果對象還沒有逃脫,基本上就真的被回收了。
具體的過程見下圖:

垃圾收集算法

標(biāo)記清除算法

標(biāo)記-清除算法是最基礎(chǔ)的算法,分為“標(biāo)記”和“清除”兩個階段:首先標(biāo)記出所有需要回收的對象,在標(biāo)記完成后統(tǒng)一回收。

它的主要不足有兩個:一是效率問題,標(biāo)記和清除兩個過程的效率都不高;另一個是空間問題,標(biāo)記清楚之后會產(chǎn)生大量不連續(xù)的內(nèi)存碎片。

標(biāo)記-清除算法的執(zhí)行過程見下圖:

復(fù)制算法

為了解決效率問題,“復(fù)制”算法出現(xiàn)了。它將內(nèi)存空間劃分為大小相等的兩塊,每次只使用其中的一塊,當(dāng)這一塊的內(nèi)存用完了,就將還存活的對象復(fù)制到另外一塊上,然后再把已使用的的內(nèi)存空間一次性清理掉。

這樣每次都是對整個半?yún)^(qū)進(jìn)行內(nèi)存回收,內(nèi)存分配時也就不用考慮內(nèi)存碎片等復(fù)雜情況,只要移動堆頂指針,按順序分配內(nèi)存即可,實(shí)現(xiàn)簡單,運(yùn)行高效。但是這種算法的代碼是將內(nèi)存空間縮小為原來的一半。

復(fù)制算法的執(zhí)行過程見下圖:

標(biāo)記-整理算法

標(biāo)記過程仍然與標(biāo)記-清除算法一樣,但后續(xù)步驟不是直接對可回收對象進(jìn)行清理,而是讓所有存活的對象都向一端移動,然后直接清理掉邊界以外的內(nèi)存。

標(biāo)記-整理算法的執(zhí)行過程見下圖:

分代收集算法

當(dāng)前商業(yè)虛擬機(jī)的垃圾收集都采用“分代收集”的算法,這種算法只是根據(jù)對象存活周期的不同將內(nèi)存劃分為幾塊,一般是把Java堆分為新生代和老年代,這樣就可以根據(jù)各個年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴ā?/p>

在新生代中,每次垃圾收集都發(fā)現(xiàn)有大批對象死去,只有少量存活,那就選用“復(fù)制算法“,只需要付出少量存活對象的復(fù)制成本就可以完成收集。而老年代中因?yàn)閷ο蟠婊盥矢?#xff0c;沒有額外空間對它進(jìn)行分配擔(dān)保,就必須使用”標(biāo)記-清理“算法或者”標(biāo)記-整理“算法。

垃圾收集器

堆內(nèi)存是垃圾收集器主要回收垃圾對象的地方,堆內(nèi)存可以根據(jù)對象生命周期的不同分為新生代和老年代,分代收集,新生代使用復(fù)制算法,老年代使用標(biāo)記清除或者標(biāo)記整理算法。

HotSpot虛擬機(jī)提供了7中垃圾收集器,其中新生代三種:Serial/ParNew/Parallel Scavenge收集器,老年代三種:Serial Old/Parallel Old/CMS,都適用的是G1收集器。所有垃圾收集器組合 情況如下圖:

Serial收集器

最基本也是發(fā)展歷史最長的垃圾收集器,在進(jìn)行垃圾收集時,必須Stop The World(暫停其他工作線程),直到收集結(jié)束。只使用一條線程完成垃圾收集,但是效率高,因?yàn)闆]有線程交互的開銷,擁有更高的單線程收集效率。發(fā)生在新生代區(qū)域,使用復(fù)制算法。

ParNew收集器

Serial收集器的多線程版本。在進(jìn)行垃圾收集時同樣需要Stop The World(暫停其他工作線程),直到收集結(jié)束。使用多條線程進(jìn)行垃圾收集(由于存在線程交互的開銷,所以在單CPU的環(huán)境下,性能差于Serial收集器)。目前,只有Parnew收集器能與CMS收集器配合工作。發(fā)生在新生代區(qū)域,使用復(fù)制算法。

Parallel Scavenge收集器

ParNew收集器的升級版,具備ParNew收集器并發(fā)多線程收集的特點(diǎn),以達(dá)到可控制吞吐量為目標(biāo)。(吞吐量:CPU用于運(yùn)行用戶代碼的時間與CPU總消耗時間(運(yùn)行用戶代碼時間+垃圾收集時間)的比值)。該垃圾收集器能根據(jù)當(dāng)前系統(tǒng)運(yùn)行情況,動態(tài)調(diào)整自身參數(shù),從而達(dá)到最大吞吐量的目標(biāo)。(該特性成為GC自適應(yīng)的調(diào)節(jié)策略)。發(fā)生在新生代,使用復(fù)制算法。

Serial Old收集器

Serial 收集器應(yīng)用在老年代的版本。并發(fā)、單線程、效率高。使用標(biāo)記整理算法。

Parallel Old收集器

是Parallel Scavenge應(yīng)用在老年代的版本,以達(dá)到可控制吞吐量、自適應(yīng)調(diào)節(jié)和多線程收集為目標(biāo),使用標(biāo)記整理算法。

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集器。使用這類收集器的應(yīng)用重視服務(wù)的響應(yīng)速度,希望系統(tǒng)停頓時間最短,以帶來更好的用戶體驗(yàn)。
使用標(biāo)記清除算法,一共四個步驟:初始標(biāo)記、并發(fā)標(biāo)記、重新標(biāo)記和并發(fā)清除。詳情見下表:

下面說下CMS的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):(1)并行:用戶線程和垃圾收集線程同時進(jìn)行。

(2)單線程收集:只使用一條線程完成垃圾收集。

(3)垃圾收集停頓時間短:獲取最短的回收停頓時間,即希望系統(tǒng)停頓的時間最短,提高響應(yīng)速度。

缺點(diǎn):

(1)總吞吐量會降低:因?yàn)樵撌占鲗PU資源非常敏感,在并發(fā)階段不會導(dǎo)致停頓用戶線程,但會因?yàn)檎加貌糠志€程(CPU資源)導(dǎo)致應(yīng)用程序變慢,總吞吐量會降低。

(2)無法處理浮動垃圾:由于并發(fā)清理時用戶線程還在運(yùn)行,所以會有新的垃圾不斷產(chǎn)生,只能等到下一次GC時再清理。(因?yàn)檫@一部分垃圾出現(xiàn)在標(biāo)記過程之后,所以CMS 無法在當(dāng)次GC中處理他們,因此CMS無法等到老年代填滿再進(jìn)行Full GC,CMS需要預(yù)留一部分空間)。

(3)垃圾收集后會產(chǎn)生大量的內(nèi)存碎片:因?yàn)镃MS收集器是使用標(biāo)記-清除算法的。

下面一張圖了解下CMS的工作過程:

G1收集器

G1收集器是最新最前沿的垃圾收集器。特點(diǎn)如下:

(1)并行:用戶線程和垃圾收集線程同時進(jìn)行。
(2)多線程:即使用多條垃圾收集線程進(jìn)行垃圾回收。(并發(fā)和并行充分利用多CPU和多核環(huán)境的硬件優(yōu)勢來縮短垃圾收集的停頓時間)
(3)垃圾收集效率高:G1收集器是針對性對Java堆內(nèi)存區(qū)域進(jìn)行垃圾收集,而非每次都對整個區(qū)域進(jìn)行收集。即G1除了將Java堆內(nèi)存分為新生代和老年代之外,還會細(xì)分為許多個 大小相等的獨(dú)立區(qū)域(Region),然后G1收集器會跟蹤每個Region里的垃圾代價值大小,并在后臺維護(hù)一個列表。每次回收時,會根據(jù)允許的垃圾收集時間優(yōu)先回收價值最大的 Region,從而避免了對整個Java堆內(nèi)存區(qū)域的回收,提高了效率。因?yàn)樯鲜鰴C(jī)制,G1收集器還能建立可預(yù)測的時間模型:即讓使用者明確執(zhí)行一個長度為M毫秒的時間片段,消耗在 垃圾收集上的時間不得超出N毫秒。即具備實(shí)時性。
(4)不會產(chǎn)生內(nèi)存碎片。從整理上看,G1收集器是基于標(biāo)記-整理算法的,從局部看是基于復(fù)制算法的。在新生代使用復(fù)制算法,在老年代使用標(biāo)記-整理算法。

下面了解下工作流程,跟CMS有點(diǎn)像。

下面是G1的工作過程:

類加載過程

在java中編譯并不進(jìn)行鏈接工作,類型的加載、鏈接和初始化工作都是在jvm執(zhí)行過程中進(jìn)行的。在Java程序啟動時,jvm通過加載指定的類,然后調(diào)用該類的main方法而啟動。在JVM啟動過程中, 外部class字節(jié)碼文件會經(jīng)過一系列過程轉(zhuǎn)化為JVM中執(zhí)行的數(shù)據(jù),這一系列過程我們稱為類加載過程。

類加載整體流程

從類被JVM加載到內(nèi)存開始到卸載出內(nèi)存為止,整個生命周期包括:加載、鏈接、初始化、使用和卸載五個過程。其中鏈接又包括驗(yàn)證、準(zhǔn)備和解析三個過程。如下圖所示:

類加載時機(jī)

java虛擬機(jī)規(guī)范通過對初始化階段進(jìn)行嚴(yán)格規(guī)定,來保證初始化的完成,而作為其之前的必須啟動的過程,加載、驗(yàn)證、準(zhǔn)備也需要在此之前開始。

Java虛擬機(jī)規(guī)定,以下五種情況必須對類進(jìn)行初始化:1、虛擬機(jī)在用戶指定包含main方法的主類后啟動時,必須先對主類進(jìn)行初始化。

2、當(dāng)使用new關(guān)鍵字對類進(jìn)行實(shí)例化時、讀取或者寫入類的靜態(tài)字段時、調(diào)用類的靜態(tài)方法時,必須先觸發(fā)對該類的實(shí)例化。

3、使用反射對類進(jìn)行反射調(diào)用時,如果該類沒有初始化先對其進(jìn)行初始化。

4、初始化一個類,而該類的父類還未初始化,需要先對其父類進(jìn)行初始化。

5、在JDK1.7之后的版本中使用動態(tài)語言支持,java.lang.invoke.MethodHandle實(shí)例解析的結(jié)果是REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,而該句柄對應(yīng)的類 還未初始化,必須先觸發(fā)其實(shí)例化。

加載

在加載階段,虛擬機(jī)需要完成三件事:

1、通過一個類的全限定名來獲取此類的class字節(jié)碼二進(jìn)制流。
2.將這個字節(jié)碼二進(jìn)制流中的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)中的運(yùn)行時數(shù)據(jù)結(jié)構(gòu)。
3、在內(nèi)存中生成一個代表該類的java.lang.Class對象,作為方法區(qū)中這個類的各種數(shù)據(jù)的訪問入口。
對于Class對象,Java虛擬機(jī)規(guī)范并沒有規(guī)定要存儲在堆中,HotSpot虛擬機(jī)將其存放在方法區(qū)中。

驗(yàn)證

驗(yàn)證作為鏈接的第一步,大致會完成四個階段的檢驗(yàn):
1、文件格式驗(yàn)證:該階段主要在字節(jié)流轉(zhuǎn)化為方法區(qū)中的運(yùn)行時數(shù)據(jù)時,負(fù)責(zé)檢查字節(jié)流是否符合Class文件規(guī)范,保證其可以正確的被解析并存儲在方法區(qū)中。后面的檢查都是基于方法區(qū)的 存儲結(jié)構(gòu)進(jìn)行檢驗(yàn),不會再直接操作字節(jié)流。
2、元數(shù)據(jù)驗(yàn)證:該階段負(fù)責(zé)分析存儲于方法區(qū)的結(jié)構(gòu)是否符合Java語言規(guī)范。此階段進(jìn)行數(shù)據(jù)類型的校驗(yàn),保證符合不存在非法的元數(shù)據(jù)信息。
3、字節(jié)碼驗(yàn)證:元數(shù)據(jù)驗(yàn)證保證了字節(jié)碼中的數(shù)據(jù)符合語言的規(guī)范,該階段則負(fù)責(zé)分析數(shù)據(jù)流和控制流,確定方法體的合法性,保證被校驗(yàn)的方法在運(yùn)行時不會危害虛擬機(jī)的運(yùn)行。
4、符號引用驗(yàn)證:在解析階段會將虛擬機(jī)中的符號引用轉(zhuǎn)化為直接引用,該階段則負(fù)責(zé)對各種符號引用進(jìn)行匹配性校驗(yàn),保證外部依賴真實(shí)存在,并且符合外部依賴類、字段、方法的訪問性。

準(zhǔn)備

準(zhǔn)備階段正式為類的字段變量(被static修飾的類變量)分配內(nèi)存并設(shè)置初始值。這些變量存儲在方法區(qū)中。當(dāng)類字段為常量類型(即被static final修飾),由于字段的值已經(jīng)確定,并不會在后面修改,此時會直接賦值為指定的值。

解析

解析階段將常量池中的符號引用替換為直接引用。在字節(jié)碼文件中,類、接口、字段、方法等類型都是由一組符號來表示。其形式由java虛擬機(jī)規(guī)范中的Class文件格式定義。在虛擬機(jī)執(zhí)行 指定指令之前,需要將符號引用轉(zhuǎn)化為目標(biāo)的指針、相對偏移量或者句柄,這樣可以通過此類直接引用在內(nèi)存中定位調(diào)用的具體位置。

初始化

在類的class文件中。包含兩個特殊的方法:clinit和init,這兩方法由編譯器自動生成,分別代表類構(gòu)造器和構(gòu)造函數(shù),其中構(gòu)造函數(shù)編程實(shí)現(xiàn),初始化階段就是負(fù)責(zé)調(diào)用類構(gòu)造器,來初始化 變量和資源。

clinit方法由編譯器自動收集類的賦值動作和靜態(tài)語句塊(static)中的語句合并生成的,有以下特點(diǎn):

1、編譯器收集順序又代碼順序決定,靜態(tài)語句塊只能訪問它之前定義的變量,在它之后定義的變量只能進(jìn)行賦值不能訪問。

2、虛擬機(jī)保證在子類的clinit方法執(zhí)行前,父類的clinit已經(jīng)執(zhí)行完畢。

3、clinit不是必須的,如果一個類或接口沒有變量賦值和靜態(tài)代碼塊,則編譯器可以不生成clinit。

4、虛擬機(jī)會保證clinit方法在多線程中被正確的加鎖和同步。如果多個線程同時初始化一個類,那么只有一個線程執(zhí)行clinit,其他線程會被阻塞。

雙親委派模型

類加載器

1、定義:實(shí)現(xiàn)類加載階段的“通過一個里的全限定名來獲取描述此類的二進(jìn)制字節(jié)流”的動作的代碼模塊成為“類加載器”。對于任意一個類,都需要由加載它的類加載器和這個類本身一同確立其在java虛擬機(jī)中的唯一性,每一個類加載器,都擁有一個獨(dú)立的類名稱空間。比較兩個類是否“相等”,只有在這兩個類是同一個類加載器加載的前提下才有意義。

2、類加載器種類
從Java虛擬機(jī)的角度只有兩種類加載器:
(1)啟動類加載器(BootStrap ClassLoader),這個類加載器使用C++語言實(shí)現(xiàn),是虛擬機(jī)自身的一部分。
(2)另一種就是所有其他類的加載器,這些類加載器都是由Java語言實(shí)現(xiàn),獨(dú)立于虛擬機(jī)外部,并且都繼承自抽象類java.lang.ClassLoader。
從Java開發(fā)人員的角度,類加載器還可分為3種系統(tǒng)提供的類加載器和用戶自定義的類加載器。
(1)啟動類加載器(BootStrap ClassLoader):負(fù)責(zé)加載存放java_homelib目錄中的,或者被-Xbootclasspath參數(shù)所指定的路徑中的類。
(2)擴(kuò)展類加載器(Extension ClassLoader):這個加載器sun.misc.LauncherExtClassLoader實(shí)現(xiàn),它負(fù)責(zé)加載javahomelibext目錄中的,或者被java.ext.dirs系統(tǒng)變量所指定的路徑中的所有類庫,開發(fā)者可以直接使用擴(kuò)展類加載器。

(3)應(yīng)用程序類加載器(ApplicationClassLoader):這個類加載器由sun.misc.LauncherExtClassLoader實(shí)現(xiàn),它負(fù)責(zé)加載java_homelibext目錄中的,或者被java.ext.dirs系統(tǒng)變量所指定的路徑中的所有類庫,開發(fā)者可以直接使用擴(kuò)展類加載器。 如果應(yīng)用程序中沒有自定義的類加載器,一般情況下 這個就是程序中默認(rèn)的類加載器。
(4)自定義類加載器(User ClassLoader):用戶自定義的類加載器。用戶在編寫自己定義的類加載器時,如果需要把請求委派給引導(dǎo)類加載器,那直接使用numm代替即可。要創(chuàng)建用戶自己 的類加載器,只需要繼承java.lang.ClassLoader,然后覆蓋它的findClass(String name)方法即可。如果要符合雙親委派模型,則重寫findClass()方法。如果要破壞的話,則重寫 loadClass()方法。

雙親委派模型

上圖展示的類加載器之間的這種層次關(guān)系稱為類加載器的雙親委派模型。1、雙親委派模型要求除了頂層的啟動類加載器之外,其余的類加載器都應(yīng)當(dāng)有自己的父類加載器。

2、類加載器的雙親委派模型在jdk1.2被引入,但它不是一個強(qiáng)制性的約束模型,而是Java設(shè)計者推薦給開發(fā)者的一種類加載器的實(shí)現(xiàn)方式。

雙親委派模型的工作過程如下:

1、如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成。
2、每一層的類加載器都重復(fù)第一步,因此所有的類加載請求最終都傳送到了頂層的類加載器中。
3、只有父類加載器返回自己無法完成這個加載請求,子加載器才會嘗試自己去加載。

對象的創(chuàng)建、存儲和訪問

對象的創(chuàng)建

1、類加載檢查:虛擬機(jī)遇到一條new指令,首先檢查這個指令的參數(shù)是否能在常量池中(Class文件的靜態(tài)常量池)定位到這個類的符號引用,并且檢查這個符號引用代表的類是否 已經(jīng)被加載、解析和初始化過。如果沒有,那必須先執(zhí)行相應(yīng)的類加載過程。

2、分配內(nèi)存:對象所需內(nèi)存大小在類加載完成后便可完全確定,為對象分配空間的任務(wù)等同于把一塊確定大小的內(nèi)存從Java堆中劃分出來。但是不同垃圾回收器的算法會導(dǎo)致堆內(nèi)存存在兩種情況:絕對規(guī)整和相互交錯。(比如標(biāo)記清楚算法和標(biāo)記整理算法)
(1)指針碰撞:假設(shè)Java堆內(nèi)存是絕對規(guī)整的,所有用過的內(nèi)存都存放在一起,空閑的內(nèi)存存放在另一邊,中間放著一個指示器作為分界點(diǎn)的指示器,所分配的內(nèi)存就僅僅是把那個指針向空閑空間那邊挪動一段與對象大小相等的距離,這種分配方式成為”指針碰撞“。
(2)空閑列表:如果是相互交錯的,那么虛擬機(jī)會維護(hù)一個列表,記錄哪些內(nèi)存塊是可用的,在分配的時候從列表中找到一塊足夠大的空間劃給對象實(shí)例,并更新列表上的記錄。這種分配方式成為”空閑列表“。

3、分配內(nèi)存的并發(fā)問題:即使是僅僅修改一個指針?biāo)赶虻奈恢?#xff0c;在并發(fā)情況下也不是線程安全的,可能出現(xiàn)正在給對象A分配內(nèi)存,指針還沒來得及修改,對象B又同時使用了原來的 指針來分配內(nèi)存的情況。針對這個問題有兩種解決方案:
(1)失敗重試:對分配內(nèi)存空間的動作進(jìn)行同步處理,虛擬機(jī)采用CAS和失敗重試機(jī)制保證更新操作的原子性。
(2)本地線程分配緩存:哪個線程要分配內(nèi)存,就在哪個線程的TLAB(Thread Local Allocation Buffer)上分配,只有TLAB用完并分配新的TLAB時,才需要同步鎖定。

4、內(nèi)存空間初始化零值:內(nèi)存分配完成后,虛擬機(jī)需要將分配到的內(nèi)存空間都初始化零值,這一步操作保證了對象的實(shí)例字段(成員變量)在Java代碼中可以不賦值就直接使用,程序能夠訪問到這些字段的數(shù)據(jù)類型所對應(yīng)的零值。

5、對象設(shè)置:接下來虛擬機(jī)會對對象進(jìn)行必要的設(shè)置,例如這個對象是哪個類的實(shí)例,如何才能找到類的元數(shù)據(jù)信息、對象的哈希嗎、對象的GC分代年齡等信息。這些信息存放在對象頭中。至此一個新的對象產(chǎn)生了。

6、實(shí)例構(gòu)造器的init方法:雖然對象產(chǎn)生了,但是init方法并沒有執(zhí)行,所欲字段還需要賦值(包括成員變量賦值,普通語句塊執(zhí)行,構(gòu)造函數(shù)執(zhí)行等。)

Clinit和init

Clinit

類構(gòu)造器的方法,與類的初始化有關(guān)。例如靜態(tài)變量(類變量)和靜態(tài)對象賦值,靜態(tài)語句塊的執(zhí)行。如果一個類中沒有靜態(tài)語句塊,也沒有靜態(tài)變量或靜態(tài)對象的賦值, 那么編譯器可以不為這個類生成方法。

init

實(shí)例構(gòu)造器(即成員變量,成員對象等),例如成員變量和成員對象的賦值,普通語句塊的執(zhí)行,構(gòu)造函數(shù)的執(zhí)行。

對象的內(nèi)存布局

在HotSpot虛擬機(jī)中,對象在內(nèi)存中存儲的布局可以分為三個區(qū)域:對象頭、實(shí)例數(shù)據(jù)和對齊填充。

對象頭

對象頭包括兩部分信息:運(yùn)行時數(shù)據(jù)和類型指針。

運(yùn)行時數(shù)據(jù)

第一部分用于存儲對象自身的運(yùn)行時數(shù)據(jù),如哈希嗎(HashCode)、GC分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程ID、偏向時間戳等。

下面是HotSpot虛擬機(jī)對象頭Mark Word:

類型指針

對象頭的另一部分是類型指針,即對象指向他元數(shù)據(jù)的指針,虛擬機(jī)可以通過這個指針確定這個對象是哪個類的實(shí)例。但是如果對象是一個Java數(shù)組,那么在對象頭中還必須有一塊用于記錄數(shù)據(jù)長度的數(shù)據(jù)。

對象的實(shí)例數(shù)據(jù)

接著數(shù)據(jù)頭的是對象的實(shí)例數(shù)據(jù),這部分是真正存儲的有效信息。無論是從父類中繼承下來的還是在子類中定義的,都需要記錄下來。

對齊填充

最后一部分對齊填充并不是必然存在的,也沒有特別的含義,僅僅起著占位符的作用。由于HotSpot虛擬機(jī)的自動內(nèi)存管理系統(tǒng)要求對象的起始地址必須是8字節(jié)的整數(shù)倍,也就是 對象的大小必須是8字節(jié)的整數(shù)倍。而對象頭部分是8字節(jié)的倍數(shù),當(dāng)實(shí)例數(shù)據(jù)沒有對齊的時候,需要對齊填充湊夠8字節(jié)的整數(shù)倍。

對象的訪問定位

建立對象是為了使用對象,我們的Java程序需要通過棧上的引用數(shù)據(jù)來操作堆上的具體對象。對象的訪問方式取決于虛擬機(jī)的實(shí)現(xiàn),目前主流的訪問方式有使用句柄和直接指針兩種。

句柄引用和直接引用不同在于:使用句柄引用的話,那么Java對堆中將會劃分出一塊內(nèi)存來作為句柄池,引用中存儲的就是對象的句柄地址,但是直接引用引用中存儲的直接就是對象地址。Java使用的是直接指針訪問對象的方式,因?yàn)樗畲蟮暮锰幘褪撬俣雀?#xff0c;它節(jié)省了一次指針定位的時間開銷,由于對象的訪問在Java中非常頻繁,因此這類開銷積少成多后也是一項(xiàng) 非常可觀的執(zhí)行成本。

下面是通過直接指針訪問對象

總結(jié)

本文講解了運(yùn)行時數(shù)據(jù)區(qū)域,內(nèi)存溢出,如何判斷對象是否存活,垃圾回收算法和垃圾收集器,類加載機(jī)制和雙親委派模型以及對象的創(chuàng)建存儲和訪問幾個方面,涵蓋jvm的核心考點(diǎn),希望你有所收獲。

來源:掘金

作者:堅持就是勝利

鏈接:https://juejin.im/user/1943592288657022

總結(jié)

以上是生活随笔為你收集整理的浮点数例外 (核心已转储)_15000 字梳理 JVM 的核心知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

九九九在线观看 | 激情综合啪| 最新亚洲视频 | 亚洲国产成人在线 | 国产香蕉久久 | 激情婷婷亚洲 | 成人h视频在线播放 | 亚洲国产三级在线观看 | 久久99在线观看 | 中文字幕资源网在线观看 | 国产99久久精品一区二区永久免费 | 国产又粗又猛又爽又黄的视频免费 | 久久99国产精品 | 免费a级黄色毛片 | 国产午夜麻豆影院在线观看 | 网站免费黄色 | 久久老司机精品视频 | 久久综合九色综合97婷婷女人 | 久久综合婷婷 | 99久久日韩精品免费热麻豆美女 | 免费国产在线观看 | 人人干人人添 | av官网 | 国产午夜精品一区二区三区在线观看 | 黄色福利网 | 99久久精品国产一区二区成人 | 亚洲精品视频在线看 | 欧美精品v国产精品 | 久久99精品久久久久久久久久久久 | 2022久久国产露脸精品国产 | 日本久久影视 | 久久久久一区 | 久久精品成人 | 97看片| 欧美午夜久久 | 久久久久亚洲精品男人的天堂 | 粉嫩av一区二区三区入口 | 夜夜躁日日躁狠狠久久88av | 久久综合九色综合欧美就去吻 | 成人免费看片网址 | 国产 日韩 中文字幕 | 国产黄色片免费观看 | 天天色影院 | 国产福利资源 | 一区二区三区中文字幕在线观看 | 超碰人人草 | 国产日韩欧美综合在线 | 99久视频| 99热最新| 精品视频久久 | 玖玖在线观看视频 | 日韩一区精品 | 在线国产福利 | 99在线热播精品免费 | 欧美国产精品一区二区 | 99视频国产在线 | 一区二区高清在线 | 午夜精品一二三区 | 国产一区在线视频观看 | 人人草在线视频 | 91日韩在线专区 | 天天曰视频| 在线播放精品一区二区三区 | 精品国产乱码久久久久久浪潮 | 日韩精品一区二区三区第95 | 99精品亚洲 | 久久成人午夜视频 | 精品久久综合 | 久久精品国产一区二区三区 | 久久免费国产精品 | 国产精品久久99 | 国产亚洲视频系列 | 国产区高清在线 | 国产欧美中文字幕 | 九九久久免费 | 中文字幕二区在线观看 | 国产乱码精品一区二区三区介绍 | 在线免费观看黄色 | 国产精品69av | 五月婷婷丁香 | 久久成人国产 | 久久伦理| 色网站在线免费观看 | 久久国产精品系列 | 色爱成人网| www.亚洲精品在线 | 亚洲精品国产精品乱码在线观看 | 超碰在线人 | 天天操天天干天天干 | 国产在线国偷精品产拍 | 日韩免费av网址 | 亚洲专区视频在线观看 | 亚洲黄色app | 黄色网址国产 | 91成人在线免费观看 | 久久成年人网站 | 天天干天天操天天爱 | 超碰官网| 中文字幕第一页av | 日韩,中文字幕 | 亚洲精品系列 | 国产午夜精品一区二区三区嫩草 | 天天拍天天操 | 欧美成人在线免费 | 国产短视频在线播放 | 久久免费黄色网址 | 综合色伊人 | 天天色天天操综合网 | 日韩毛片在线免费观看 | 久久99欧美 | 日韩理论电影在线 | 91自拍视频在线 | 国产黑丝一区二区三区 | 超碰最新网址 | 成人国产一区 | 精品嫩模福利一区二区蜜臀 | 欧美一区二视频在线免费观看 | 久久久免费看片 | 久久久久久久久久久网站 | 能在线看的av | 成人国产精品免费 | 日韩在线免费视频 | 精品久久国产一区 | 西西4444www大胆无视频 | 九九久久久久久久久激情 | 亚洲一区二区精品 | 日韩在线在线 | 国产黄色精品在线观看 | 91中文在线 | 在线观看中文字幕亚洲 | 国产精品综合久久久久 | 成人国产精品免费观看 | 99国内精品 | 成年人在线电影 | 五月婷婷开心中文字幕 | 日韩免费小视频 | 99精品视频在线播放免费 | 国产一区二区三区在线 | 成人免费网站视频 | 超碰在线天天 | 国产成人精品一区二区 | 九九久久久久久久久激情 | 天堂中文在线视频 | 在线视频a | 久久免费公开视频 | 国产精品黑丝在线观看 | 久久综合免费视频影院 | 色婷五月 | 午夜 在线 | 国产精品免费视频久久久 | 韩国av免费观看 | 久久国产麻豆 | 97人人澡人人添人人爽超碰 | 日韩在线观看小视频 | 国产二区av | 久久精品视频网 | 亚洲一区二区三区精品在线观看 | 久久激情精品 | 免费看麻豆 | 久久精品视频中文字幕 | 麻豆传媒视频在线播放 | 日韩综合视频在线观看 | 9热精品| 亚洲伦理精品 | 中文字幕日韩有码 | 亚洲欧洲精品在线 | 一区二区三区四区在线 | 亚洲国产日韩一区 | 欧美精品中文在线免费观看 | 中国黄色一级大片 | 亚洲午夜久久久综合37日本 | 国产精品视频全国免费观看 | 色小说在线 | 91精品爽啪蜜夜国产在线播放 | 一区二区三区四区五区在线 | 一级国产视频 | a天堂一码二码专区 | 免费下载高清毛片 | 国产中文字幕视频 | 亚洲a网| 亚洲精品久久久久58 | 8x成人免费视频 | 精品在线视频一区 | 中文字幕亚洲国产 | 91丨九色丨丝袜 | 三级免费黄 | 欧美激情精品久久 | 精品国产乱子伦一区二区 | 视频福利在线观看 | 99视频在线精品国自产拍免费观看 | 久久综合久久综合久久 | 国产美腿白丝袜足在线av | 亚洲日本va中文字幕 | 国产一区国产精品 | 天天鲁一鲁摸一摸爽一爽 | 黄色毛片一级片 | avove黑丝 | 天天干夜夜干 | 丁香资源影视免费观看 | 麻豆av一区二区三区在线观看 | 五月婷婷六月丁香激情 | 国产xxxx| 成人性生交视频 | 日韩a欧美 | 亚洲 精品在线视频 | 久草在线欧美 | 国产视频一区二区三区在线 | 国产精品亚洲综合久久 | 日韩高清不卡一区二区三区 | 四虎影视成人 | 国产久草在线 | 天天综合网国产 | 国产中文字幕在线视频 | 欧美色插 | 久草视频国产 | 日本资源中文字幕在线 | 亚洲精品久久久久999中文字幕 | 日韩精品免费一区二区在线观看 | 欧美视频在线二区 | 国产又粗又猛又黄视频 | 999视频在线播放 | 在线免费色视频 | 中文字幕最新精品 | 婷婷亚洲五月色综合 | 久久久午夜电影 | 亚洲综合射| 国产麻豆精品一区二区 | 国产成人福利在线 | 五月天综合 | 综合久久久久久久 | 一区二区三区四区影院 | 久久无码av一区二区三区电影网 | 国产黄色精品在线 | 中字幕视频在线永久在线观看免费 | 日本激情中文字幕 | 天天天天天天天天操 | 国产美女被啪进深处喷白浆视频 | 久久久亚洲国产精品麻豆综合天堂 | 狠狠的日日| 久久久久免费精品国产 | aa一级片 | 三级性生活视频 | 曰本免费av| 国产精品久久综合 | 亚洲片在线 | 国产99久久久精品 | 免费一级片在线观看 | 色视频网址 | 91成人破解版 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 国产一级二级三级视频 | 久久视频精品在线 | 超碰97人人在线 | 欧美a级片免费看 | 日日夜夜人人天天 | 国产999视频在线观看 | 丁香久久五月 | 日韩中文字 | 免费福利视频网站 | 国产精品18久久久久久久 | 午夜精品福利一区二区三区蜜桃 | 在线三级av| 欧美日韩精品免费观看 | 国产亚洲人成网站在线观看 | 国产高h视频 | 国产精品久久久久久久久久妇女 | 亚洲午夜av| 色噜噜噜噜 | 国产黄色精品视频 | 欧美激情综合五月 | 国产综合精品一区二区三区 | 96久久久 | 亚洲专区视频在线观看 | 中文字幕在线播放日韩 | 久久你懂得 | 亚洲乱码精品久久久久 | 亚洲一区二区三区毛片 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 人人爽人人爽人人爽人人爽 | 天天av综合网| 久艹视频免费观看 | 超碰在线观看av.com | 久久婷综合 | 亚洲精品午夜久久久久久久久久久 | 色欧美日韩 | 爱射综合 | 国产午夜视频在线观看 | 91久久爱热色涩涩 | 国产成人免费精品 | 国产91在线免费视频 | 日韩高清一区在线 | 成人九九视频 | 91天天操 | 国产黄色精品 | 黄色小网站在线 | 亚洲精品黄色片 | 国内精品小视频 | 在线观看成人 | 中文字幕中文字幕在线中文字幕三区 | 国产第一页在线播放 | 黄色国产高清 | 中文字幕在线观看不卡 | www.在线看片.com | 99精品在线免费视频 | 久久99精品国产麻豆宅宅 | 国产免费叼嘿网站免费 | 99热国产精品 | 99精品视频免费 | 国产精品高清免费在线观看 | 亚洲高清视频在线播放 | 超碰在线最新网址 | 久久99深爱久久99精品 | 91av原创| 99热手机在线观看 | 国产xx在线 | avhd高清在线谜片 | 超碰免费公开 | 欧美精品在线观看免费 | 国产在线a | 特及黄色片 | 亚洲 欧洲av | 草久久久久 | av解说在线观看 | 亚洲二区精品 | 免费福利视频网站 | 午夜精品一区二区三区免费视频 | 免费网站观看www在线观看 | 久久婷婷综合激情 | 伊人久在线 | 91成人免费 | 国产玖玖精品视频 | 在线婷婷 | 午夜三级毛片 | 久久亚洲成人网 | 亚洲成人精品久久久 | a√资源在线 | 国产精品久久久久一区二区三区共 | 国色天香第二季 | 日韩精品一卡 | 91网站免费观看 | 麻豆视频国产 | 国产免费成人av | 国产伦理久久 | 日韩三级视频在线观看 | 婷婷爱五月天 | 亚洲国内精品 | 欧美日韩在线视频观看 | 久久狠狠亚洲综合 | 一本色道久久综合亚洲二区三区 | www.亚洲黄色 | 狠狠色丁香婷婷综合久小说久 | 中文综合在线 | 国产精品久久久久久吹潮天美传媒 | 精品国产区在线 | av视屏在线 | 国产黄a三级 | 国产亚洲精品免费 | 国产精品亚洲视频 | 女人高潮特级毛片 | 香蕉视频18 | 欧美激情xxxx | 国产精品美女久久 | 中文字幕在线观看免费高清电影 | 欧美日韩精品在线观看 | 草久视频在线 | 一区二区三区视频 | 九九有精品 | 亚洲专区视频在线观看 | 亚洲最大在线视频 | 成人欧美亚洲 | 亚洲欧美成人在线 | 久久免费av电影 | 最新在线你懂的 | 欧美亚洲另类在线视频 | 美女视频黄色免费 | 操老逼免费视频 | 色多多视频在线观看 | 国产免费xvideos视频入口 | 国产理伦在线 | 国产一二三在线视频 | 久久久国产在线视频 | 欧美一级性生活 | 黄色一及电影 | 97免费视频在线 | 亚洲色影爱久久精品 | 国产亚洲综合在线 | 免费av片在线 | 国产午夜一区二区 | 日韩午夜高清 | 视频福利在线观看 | 97超碰资源站 | av在线com| 一区二区精品在线观看 | aaa黄色毛片| 日韩毛片在线播放 | 欧美大荫蒂xxx | www.色在线| 在线观看成人小视频 | 亚洲理论片在线观看 | 国产综合片| 国产成人精品999在线观看 | 国产精品第10页 | 久久综合久久综合这里只有精品 | 91精品福利在线 | 国产99久| 99精品久久只有精品 | 久久美女免费视频 | 国产精品午夜在线观看 | 亚洲久草在线 | 午夜婷婷在线观看 | 国产高清精| 国产一二区视频 | 亚洲国产色一区 | 国产一区国产二区在线观看 | 日韩成人在线一区二区 | 日韩在线国产 | av女优中文字幕在线观看 | av一级免费| 在线观看黄a| 97超碰超碰久久福利超碰 | 欧美精品久久久久久久免费 | 日韩美女免费线视频 | 国产96av| 六月丁香久久 | 激情久久综合 | 午夜久久精品 | 国产午夜剧场 | 精品视频专区 | av黄色国产| 久久精品中文字幕一区二区三区 | 福利一区在线 | 天天操欧美 | 日韩欧美一区二区三区黑寡妇 | 欧美精品免费一区二区 | 丁香六月五月婷婷 | 色九色 | 黄色的网站在线 | 国产人成一区二区三区影院 | 草久在线观看视频 | 婷婷狠狠操 | 国产精品精品久久久 | 一级性生活片 | 色偷偷av男人天堂 | 激情视频一区二区三区 | 精品久久片 | 黄色在线免费观看网站 | 国产91精品高清一区二区三区 | 精品国产成人 | 黄色av一级片 | 成人黄大片视频在线观看 | 久久男人免费视频 | 欧美亚洲三级 | 99久久网站 | 国产色视频一区 | 国产人成在线观看 | 久久综合九色综合欧美就去吻 | 国产裸体bbb视频 | 激情文学丁香 | 亚洲免费色 | 丝袜制服综合网 | 日韩在线精品视频 | 久久精品精品电影网 | 欧美激情片在线观看 | 99视频这里有精品 | 天天射天天操天天干 | 国产成人精品国内自产拍免费看 | 欧美一级性视频 | 日韩一区正在播放 | 成人在线播放网站 | 天天操天操| av资源免费观看 | 国产精品亚洲综合久久 | 国产在线视频一区 | 欧美精品一区二区在线播放 | 视频在线观看99 | 亚洲1区 在线| 久久精品久久精品 | 999国产| 日韩电影一区二区三区在线观看 | 不卡的av片 | 国产视频18 | 国产一级特黄电影 | 成人试看120秒 | 亚洲观看黄色网 | 人人精品| 午夜精品一区二区三区免费视频 | 在线观看日韩精品视频 | 在线天堂中文在线资源网 | 69av国产| 美女视频免费精品 | 看v片| 夜夜澡人模人人添人人看 | 日韩在线精品视频 | 91亚洲精品国偷拍 | 日韩一区在线播放 | 久久久久夜色 | 五月婷婷色综合 | 成年人免费在线播放 | 五月天久久狠狠 | 五月亚洲综合 | 日韩久久久久久久久久久久 | 黄色一级在线免费观看 | 日本精品一区二区三区在线观看 | 亚洲女同videos | 99精品福利| 天天干天天想 | av电影免费在线播放 | 久久免费美女视频 | 91精品国产乱码在线观看 | 欧美国产日韩激情 | 久草国产视频 | 久久久久女教师免费一区 | 人人射人人澡 | 久草视频免费观 | 首页国产精品 | 欧美日韩不卡一区二区三区 | 成人国产电影在线观看 | 在线电影日韩 | 国产精品mv在线观看 | 国产小视频免费在线网址 | 亚洲精品视频在线观看免费视频 | 国产精品免费一区二区三区在线观看 | 国产亚洲精品福利 | 亚洲成人午夜av | 一区二区三区视频 | 天天夜夜亚洲 | 日日干天天 | 亚洲 欧洲 国产 日本 综合 | 欧美日韩在线看 | 婷婷丁香狠狠爱 | 色小说av | 亚洲成人av一区 | 成年人免费在线观看网站 | 成人福利在线播放 | 黄色网免费 | 精品在线二区 | 成人黄性视频 | 免费瑟瑟网站 | 中文字幕在线看片 | 亚洲一级片在线观看 | 99精品热视频只有精品10 | 国产精品久久久久久久久免费 | 精品 一区 在线 | 99精品国产99久久久久久福利 | 在线免费观看黄色 | 久久免费视频这里只有精品 | 日韩精品一区电影 | 国产黄色精品在线 | 成人在线观看av | 日韩精品一区二区三区免费观看视频 | 国产在线观看午夜 | 久久久久久久久久久网站 | 中文久草 | 天天操夜夜操夜夜操 | 伊人资源视频在线 | 国产又粗又猛又黄又爽的视频 | 日韩sese | 亚洲资源在线网 | 精品一二三四在线 | 麻豆久久久 | 精品国产免费人成在线观看 | 国产正在播放 | 91豆花在线观看 | 日本一区二区高清不卡 | 免费99精品国产自在在线 | 色婷婷综合久久久久中文字幕1 | 久久久首页 | 欧美一区二区在线刺激视频 | 色婷婷欧美 | 国产伦理一区二区三区 | 97影视| 免费毛片一区二区三区久久久 | 日日摸日日 | 日韩欧美综合在线视频 | 91精品人成在线观看 | 青青草国产免费 | 996久久国产精品线观看 | 96精品视频| 97视频免费 | 2021国产精品| 又大又硬又黄又爽视频在线观看 | 欧美色婷 | 91精品国自产在线偷拍蜜桃 | 999久久久精品视频 日韩高清www | 国产精品久久久久国产精品日日 | 成年人免费在线观看网站 | 在线看免费 | 夜夜操网站 | 亚洲精品视频在线观看免费视频 | 91精品国产99久久久久 | 91在线视频一区 | 国产高清在线a视频大全 | 亚洲精品免费在线观看 | 亚洲 精品在线视频 | 激情综合色综合久久 | 国产日产高清dvd碟片 | 国产成人精品综合久久久 | 天天曰视频 | 国产精品欧美久久 | 在线观看色网站 | 久草精品电影 | 精品麻豆 | 国产麻豆视频在线观看 | 噜噜色官网 | 婷婷性综合| 久久久午夜电影 | 国产 字幕 制服 中文 在线 | 欧美91成人网 | 亚洲激情影院 | 国产精品完整版 | 国产成人精品一区二区三区在线 | 日本中文乱码卡一卡二新区 | 日韩资源在线播放 | 免费国产在线视频 | 色综合天天综合网国产成人网 | 日韩av电影一区 | 中文字幕在线成人 | 91精品国产综合久久福利不卡 | 激情婷婷在线观看 | 国产亚洲欧美在线视频 | 在线观看免费一级片 | 日本精品视频在线 | 亚洲区精品 | 亚洲精品美女视频 | 欧美日韩不卡一区 | 麻豆成人精品视频 | 99在线看| 亚洲午夜精品在线观看 | 丁香婷婷激情 | 国产中出在线观看 | 日韩国产精品毛片 | 日韩美女免费线视频 | 国产精品视频app | 蜜臀久久99精品久久久酒店新书 | 成人片在线播放 | 91亚洲国产成人 | 亚洲免费视频观看 | 国产老妇av| 波多野结衣在线观看一区 | 欧美综合色在线图区 | 视频国产 | 中文字幕日本特黄aa毛片 | 99精品久久久久久久 | 97免费在线观看视频 | 日本黄色免费在线 | 久久人人97超碰精品888 | 亚洲狠狠婷婷 | 国产成人精品久久久 | 色婷婷综合成人av | 在线色吧 | 国产精品专区在线 | 国产美女在线精品免费观看 | 懂色av一区二区在线播放 | 国产精品久久久久一区二区三区 | 亚洲日本黄色 | 亚洲一区久久久 | 99热这里有| 超碰97人人爱 | 国产精品9区 | 成人欧美一区二区三区黑人麻豆 | 国产在线播放观看 | 人人舔人人舔 | 亚洲综合网 | 国产黄色高清 | 99久久久久久久久久 | 国产理论影院 | 久久精品—区二区三区 | 日韩高清无线码2023 | 国产美女精品人人做人人爽 | 成人国产精品电影 | 亚洲国产精品久久 | 久久久久国产精品免费网站 | 色综合天天综合在线视频 | 久草视频手机在线 | 高清一区二区三区 | 国产福利电影网址 | av在线免费在线观看 | 精品欧美日韩 | 午夜视频在线网站 | 中文字幕乱视频 | 免费成人在线视频网站 | 久久久999免费视频 日韩网站在线 | 久久伊人操| 久久69精品 | 久草在线视频国产 | www.av免费| 99久久久国产免费 | 91色蜜桃| 国产精品国产三级国产aⅴ9色 | 99国产精品久久久久久久久久 | 在线 精品 国产 | 波多野结衣一区 | 久久福利小视频 | 成人免费在线观看入口 | 日本黄色免费电影网站 | 成人av动漫在线观看 | 丁香综合av | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 欧美片一区二区三区 | 午夜av大片 | 国产亚洲视频系列 | 香蕉视频色 | 奇人奇案qvod | 视频在线精品 | 亚洲午夜久久久久久久久 | 青青河边草观看完整版高清 | 黄色在线观看免费网站 | 成人免费一区二区三区在线观看 | 国产精品你懂的在线观看 | 奇米导航 | 久久伦理电影 | 福利视频网址 | 色午夜影院 | 九九热精品视频在线观看 | 色成人亚洲网 | av日韩精品 | 香蕉视频网址 | 五月婷婷香蕉 | 久久久激情网 | 亚洲无线视频 | 免费看黄网站在线 | 午夜av大片| 91片网| 91精品国产麻豆国产自产影视 | 国产精品自拍在线 | 黄色软件在线观看视频 | 国产精品系列在线观看 | 久艹在线播放 | 成人91视频| 黄色三级久久 | 国产淫a | 日韩视频一区二区在线观看 | 国产精品久久久久久一二三四五 | 午夜av片 | 亚洲国产精品久久久久婷婷884 | 日韩在线观看第一页 | 高潮毛片无遮挡高清免费 | 中文字幕av在线免费 | 久久激情电影 | 97在线视频免费 | 九九九热 | 亚洲精品黄色在线观看 | 看黄色91| 天天操天天插 | 国产精品免费久久久久久久久久中文 | 中文字幕在线免费观看视频 | 91精品久| 日韩影视在线观看 | 免费看日韩 | 夜色资源网 | 久久久久久久久久久网 | 色www免费视频 | 国产视频在线免费观看 | 黄色小网站免费看 | 亚洲国产成人在线 | 在线精品视频免费观看 | 欧美另类交人妖 | 樱空桃av| 亚洲不卡av一区二区三区 | 成片视频在线观看 | 国产亚洲字幕 | 一区二区三区韩国免费中文网站 | 久久九九影视 | 国产在线精品国自产拍影院 | 成人中文字幕+乱码+中文字幕 | 久久精品成人 | 欧美亚洲一区二区在线 | 亚洲精品视频在线观看免费视频 | 亚洲天堂网在线视频 | 亚洲综合在线发布 | 免费在线观看黄色网 | 国产精品嫩草在线 | 99精品久久久久久久久久综合 | 国产va精品免费观看 | a在线免费观看视频 | 日韩美av在线 | 日韩电影精品 | 91黄色在线看 | 在线观看免费高清视频大全追剧 | 天天操天天干天天综合网 | 久久综合九色欧美综合狠狠 | 在线中文字幕网站 | 玖玖视频在线 | 国产特级毛片aaaaaaa高清 | 亚洲爱爱视频 | 亚洲性xxxx | 国模视频一区二区 | 久久国产精品免费观看 | 一区三区在线欧 | 日韩在线观看的 | 国产精品久久艹 | 亚洲精品在线资源 | 久久免费99 | 在线观看日本韩国电影 | av日韩精品 | 色婷婷亚洲婷婷 | 国产在线免费观看 | 五月天婷婷在线观看视频 | 亚洲黄色在线观看 | 手机av在线网站 | 亚洲成人资源网 | 中国一级片在线播放 | 久久精视频 | 国产黄色片一级三级 | 免费能看的黄色片 | 天天躁日日躁狠狠躁av麻豆 | 成年人免费观看在线视频 | 中文字幕免 | 高清不卡一区二区三区 | 欧美一区二区在线免费观看 | 日韩大片免费在线观看 | 亚色视频在线观看 | 欧美日韩网站 | 亚洲免费资源 | 国产精品久久久 | 婷婷国产在线 | 黄色网中文字幕 | 欧美日韩国产亚洲乱码字幕 | 中文在线最新版天堂 | 在线三级播放 | 亚洲国产精品va在线看黑人动漫 | 国产99在线免费 | 天天操夜夜操夜夜操 | 亚洲国产三级在线观看 | 亚洲国产精品视频在线观看 | 久久久久久久久久网站 | 精品久久久久久一区二区里番 | 欧美日韩在线精品 | 亚洲精品视频在线 | 久久黄色免费观看 | 亚洲成av片人久久久 | 国产黄网站在线观看 | 日韩羞羞 | 中文字幕在线久一本久 | 日韩在线无| 免费 在线 中文 日本 | 三级午夜片 | 日韩欧美视频在线观看免费 | 国产成人三级在线观看 | 91影视成人| 国产午夜精品理论片在线 | 在线高清一区 | 国产精品小视频网站 | av免费网站在线观看 | 99视频在线精品免费观看2 | 粉嫩av一区二区三区四区 | 97超碰在线久草超碰在线观看 | 99视频在线播放 | 天天天天爽 | 五月婷婷丁香在线观看 | 激情欧美丁香 | 色中文字幕在线观看 | 伊色综合久久之综合久久 | 激情丁香久久 | 国产一级二级在线播放 | 亚洲精品视频免费看 | 99精品免费在线观看 | 国产精品免费看久久久8精臀av | 久久久久久久久久国产精品 | 激情影院在线 | av电影中文字幕在线观看 | 99在线观看 | 2022久久国产露脸精品国产 | 免费在线观看国产精品 | 手机版av在线 | 国产一级黄 | 黄色大片视频网站 | 97人人澡人人添人人爽超碰 | 永久免费观看视频 | 婷婷亚洲激情 | 国产中文字幕精品 | 国产精品99久久久久久小说 | 91av久久| 久久免费视频一区 | 国产白浆视频 | 欧美一级免费在线 | 97视频在线免费播放 | 在线国产日本 | 99九九视频 | 久久不卡免费视频 | 伊人看片 | 日韩二区在线 | 天天干天天射天天操 | 国产精品免费观看在线 | 久草在线国产 | 国产精品av久久久久久无 | 成人小视频在线观看免费 | 久久久久国产精品免费 | 91精品在线视频 | 日韩成人精品一区二区三区 | 视频在线观看99 | 人人草在线视频 | 精品在线免费视频 | 亚洲国产福利视频 | 在线观看黄 | 国产亚洲精品久久久久久无几年桃 | 亚洲精品一区二区久 | 久久久久久蜜桃一区二区 | 亚洲伦理一区 | 久久精品一区二区三区四区 | 久草成人在线 | 日韩成人在线一区二区 | 天天干夜夜想 | www五月| 97激情影院 | 91精品国产99久久久久 | 久久婷婷亚洲 | 青草视频在线 | 500部大龄熟乱视频使用方法 | 成人在线观看免费视频 | 永久免费av在线播放 | av最新资源 | 国产精品中文字幕在线观看 | 国产精品视频在线看 | 国产在线高清 | 青青久草在线 | 国产在线观看,日本 | 蜜臀av免费一区二区三区 | 天天曰视频 | 狠狠激情中文字幕 | 91精品视频免费在线观看 | 久久人人插 | a天堂免费 | 天天在线视频色 | 亚洲黄色在线免费观看 | 国产伦精品一区二区三区无广告 | 午夜免费电影院 | 国产精品久久久久亚洲影视 | 国产免费又爽又刺激在线观看 | 亚洲国产中文字幕在线观看 | 日韩视频一区二区三区在线播放免费观看 | 亚洲影院色 | 日韩欧美在线综合网 | 四虎永久精品在线 | 五月开心激情 | 日韩在线三级 | 成人动漫精品一区二区 | 96亚洲精品久久 | 在线天堂视频 | 国产精品电影在线 | 波多野结衣电影一区二区三区 | 黄色av大片| 911国产在线观看 | 欧美日韩亚洲一 | 午夜视频在线观看一区二区三区 | 一级免费黄视频 | 国产成人久久久久 | 久久久久观看 | 国产成人黄色av | 精品久久久影院 | 欧美色插 | 免费电影播放 | 性色av香蕉一区二区 | 日韩区欠美精品av视频 | www色com| 成人免费观看大片 | 日韩欧美一区视频 | 超碰在线国产 | 国产在线2020 | 久久成人综合 | 色婷婷激情电影 | 美女黄频视频大全 | 国产成人一级电影 | 亚洲国产色一区 | 久久精品久久精品久久 | 91精品视频在线 | 欧美粗又大 | 欧美日韩在线看 | 91久久电影 | 亚洲无吗天堂 | av色网站 | 国产麻豆精品在线观看 | av中文字幕网 | 国产精品久久久久久久久久久不卡 | a级免费观看 | 亚州精品天堂中文字幕 | 国产亚洲va综合人人澡精品 | 国产精品免费不 | 天天视频亚洲 | 欧美成人精品欧美一级乱 | 国产色综合天天综合网 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 成人免费在线网 | 亚洲视频免费视频 | 天天拍天天爽 | 综合激情av | 亚洲一区av | 不卡av免费在线观看 | 久久视频6| 丁香六月中文字幕 | 国产一区二区精品 | 日韩1页| 手机看国产毛片 | 亚洲国产美女久久久久 | 国产女人40精品一区毛片视频 | 夜夜骑天天操 | 亚洲精品乱码久久久久久9色 | 麻豆视频免费看 |