国产亚洲精品久久久久动-影视先锋中文字幕-av网站在线观看一区-亚洲视频 在线观看-久久亚洲不卡-欧美精品一区在线观看-欧美乱淫视频-欧美熟妇另类久久久久久不卡-粉嫩av一区二区三区四区五区-日韩欧美操

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openjdk(HOTSPOT)垃圾回收源码解读

發布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openjdk(HOTSPOT)垃圾回收源码解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼位置:


gc_interface 接口和gc_implementation


這是jdk1.7 幾種垃圾回收器


先看公共接口類中的 代碼:collectedHeap.cpp

/** Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "gc_implementation/shared/vmGCOperations.hpp" #include "gc_interface/collectedHeap.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/init.hpp" #include "services/heapDumper.hpp" #ifdef TARGET_OS_FAMILY_linux # include "thread_linux.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_solaris # include "thread_solaris.inline.hpp" #endif #ifdef TARGET_OS_FAMILY_windows # include "thread_windows.inline.hpp" #endif#ifdef ASSERT int CollectedHeap::_fire_out_of_memory_count = 0; #endifsize_t CollectedHeap::_filler_array_max_size = 0;// Memory state functions.CollectedHeap::CollectedHeap() : _n_par_threads(0){const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT));const size_t elements_per_word = HeapWordSize / sizeof(jint);_filler_array_max_size = align_object_size(filler_array_hdr_size() +max_len * elements_per_word);_barrier_set = NULL;_is_gc_active = false;_total_collections = _total_full_collections = 0;_gc_cause = _gc_lastcause = GCCause::_no_gc;NOT_PRODUCT(_promotion_failure_alot_count = 0;)NOT_PRODUCT(_promotion_failure_alot_gc_number = 0;)if (UsePerfData) {EXCEPTION_MARK;// create the gc cause jvmstat counters_perf_gc_cause = PerfDataManager::create_string_variable(SUN_GC, "cause",80, GCCause::to_string(_gc_cause), CHECK);_perf_gc_lastcause =PerfDataManager::create_string_variable(SUN_GC, "lastCause",80, GCCause::to_string(_gc_lastcause), CHECK);}_defer_initial_card_mark = false; // strengthened by subclass in pre_initialize() below. }void CollectedHeap::pre_initialize() {// Used for ReduceInitialCardMarks (when COMPILER2 is used);// otherwise remains unused. #ifdef COMPILER2_defer_initial_card_mark = ReduceInitialCardMarks && can_elide_tlab_store_barriers()&& (DeferInitialCardMark || card_mark_must_follow_store()); #elseassert(_defer_initial_card_mark == false, "Who would set it?"); #endif }#ifndef PRODUCT void CollectedHeap::check_for_bad_heap_word_value(HeapWord* addr, size_t size) {if (CheckMemoryInitialization && ZapUnusedHeapArea) {for (size_t slot = 0; slot < size; slot += 1) {assert((*(intptr_t*) (addr + slot)) != ((intptr_t) badHeapWordVal),"Found badHeapWordValue in post-allocation check");}} }void CollectedHeap::check_for_non_bad_heap_word_value(HeapWord* addr, size_t size) {if (CheckMemoryInitialization && ZapUnusedHeapArea) {for (size_t slot = 0; slot < size; slot += 1) {assert((*(intptr_t*) (addr + slot)) == ((intptr_t) badHeapWordVal),"Found non badHeapWordValue in pre-allocation check");}} } #endif // PRODUCT#ifdef ASSERT void CollectedHeap::check_for_valid_allocation_state() {Thread *thread = Thread::current();// How to choose between a pending exception and a potential// OutOfMemoryError? Don't allow pending exceptions.// This is a VM policy failure, so how do we exhaustively test it?assert(!thread->has_pending_exception(),"shouldn't be allocating with pending exception");if (StrictSafepointChecks) {assert(thread->allow_allocation(),"Allocation done by thread for which allocation is blocked ""by No_Allocation_Verifier!");// Allocation of an oop can always invoke a safepoint,// hence, the true argumentthread->check_for_valid_safepoint_state(true);} } #endifHeapWord* CollectedHeap::allocate_from_tlab_slow(Thread* thread, size_t size) {// Retain tlab and allocate object in shared space if// the amount free in the tlab is too large to discard.if (thread->tlab().free() > thread->tlab().refill_waste_limit()) {thread->tlab().record_slow_allocation(size);return NULL;}// Discard tlab and allocate a new one.// To minimize fragmentation, the last TLAB may be smaller than the rest.size_t new_tlab_size = thread->tlab().compute_size(size);thread->tlab().clear_before_allocation();if (new_tlab_size == 0) {return NULL;}// Allocate a new TLAB...HeapWord* obj = Universe::heap()->allocate_new_tlab(new_tlab_size);if (obj == NULL) {return NULL;}if (ZeroTLAB) {// ..and clear it.Copy::zero_to_words(obj, new_tlab_size);} else {// ...and clear just the allocated object.Copy::zero_to_words(obj, size);}thread->tlab().fill(obj, obj + size, new_tlab_size);return obj; }void CollectedHeap::flush_deferred_store_barrier(JavaThread* thread) {MemRegion deferred = thread->deferred_card_mark();if (!deferred.is_empty()) {assert(_defer_initial_card_mark, "Otherwise should be empty");{// Verify that the storage points to a parsable object in heapDEBUG_ONLY(oop old_obj = oop(deferred.start());)assert(is_in(old_obj), "Not in allocated heap");assert(!can_elide_initializing_store_barrier(old_obj),"Else should have been filtered in new_store_pre_barrier()");assert(!is_in_permanent(old_obj), "Sanity: not expected");assert(old_obj->is_oop(true), "Not an oop");assert(old_obj->is_parsable(), "Will not be concurrently parsable");assert(deferred.word_size() == (size_t)(old_obj->size()),"Mismatch: multiple objects?");}BarrierSet* bs = barrier_set();assert(bs->has_write_region_opt(), "No write_region() on BarrierSet");bs->write_region(deferred);// "Clear" the deferred_card_mark fieldthread->set_deferred_card_mark(MemRegion());}assert(thread->deferred_card_mark().is_empty(), "invariant"); }// Helper for ReduceInitialCardMarks. For performance, // compiled code may elide card-marks for initializing stores // to a newly allocated object along the fast-path. We // compensate for such elided card-marks as follows: // (a) Generational, non-concurrent collectors, such as // GenCollectedHeap(ParNew,DefNew,Tenured) and // ParallelScavengeHeap(ParallelGC, ParallelOldGC) // need the card-mark if and only if the region is // in the old gen, and do not care if the card-mark // succeeds or precedes the initializing stores themselves, // so long as the card-mark is completed before the next // scavenge. For all these cases, we can do a card mark // at the point at which we do a slow path allocation // in the old gen, i.e. in this call. // (b) GenCollectedHeap(ConcurrentMarkSweepGeneration) requires // in addition that the card-mark for an old gen allocated // object strictly follow any associated initializing stores. // In these cases, the memRegion remembered below is // used to card-mark the entire region either just before the next // slow-path allocation by this thread or just before the next scavenge or // CMS-associated safepoint, whichever of these events happens first. // (The implicit assumption is that the object has been fully // initialized by this point, a fact that we assert when doing the // card-mark.) // (c) G1CollectedHeap(G1) uses two kinds of write barriers. When a // G1 concurrent marking is in progress an SATB (pre-write-)barrier is // is used to remember the pre-value of any store. Initializing // stores will not need this barrier, so we need not worry about // compensating for the missing pre-barrier here. Turning now // to the post-barrier, we note that G1 needs a RS update barrier // which simply enqueues a (sequence of) dirty cards which may // optionally be refined by the concurrent update threads. Note // that this barrier need only be applied to a non-young write, // but, like in CMS, because of the presence of concurrent refinement // (much like CMS' precleaning), must strictly follow the oop-store. // Thus, using the same protocol for maintaining the intended // invariants turns out, serendepitously, to be the same for both // G1 and CMS. // // For any future collector, this code should be reexamined with // that specific collector in mind, and the documentation above suitably // extended and updated. oop CollectedHeap::new_store_pre_barrier(JavaThread* thread, oop new_obj) {// If a previous card-mark was deferred, flush it now.flush_deferred_store_barrier(thread);if (can_elide_initializing_store_barrier(new_obj)) {// The deferred_card_mark region should be empty// following the flush above.assert(thread->deferred_card_mark().is_empty(), "Error");} else {MemRegion mr((HeapWord*)new_obj, new_obj->size());assert(!mr.is_empty(), "Error");if (_defer_initial_card_mark) {// Defer the card markthread->set_deferred_card_mark(mr);} else {// Do the card markBarrierSet* bs = barrier_set();assert(bs->has_write_region_opt(), "No write_region() on BarrierSet");bs->write_region(mr);}}return new_obj; }size_t CollectedHeap::filler_array_hdr_size() {return size_t(align_object_offset(arrayOopDesc::header_size(T_INT))); // align to Long }size_t CollectedHeap::filler_array_min_size() {return align_object_size(filler_array_hdr_size()); // align to MinObjAlignment }size_t CollectedHeap::filler_array_max_size() {return _filler_array_max_size; }#ifdef ASSERT void CollectedHeap::fill_args_check(HeapWord* start, size_t words) {assert(words >= min_fill_size(), "too small to fill");assert(words % MinObjAlignment == 0, "unaligned size");assert(Universe::heap()->is_in_reserved(start), "not in heap");assert(Universe::heap()->is_in_reserved(start + words - 1), "not in heap"); }void CollectedHeap::zap_filler_array(HeapWord* start, size_t words, bool zap) {if (ZapFillerObjects && zap) {Copy::fill_to_words(start + filler_array_hdr_size(),words - filler_array_hdr_size(), 0XDEAFBABE);} } #endif // ASSERTvoid CollectedHeap::fill_with_array(HeapWord* start, size_t words, bool zap) {assert(words >= filler_array_min_size(), "too small for an array");assert(words <= filler_array_max_size(), "too big for a single object");const size_t payload_size = words - filler_array_hdr_size();const size_t len = payload_size * HeapWordSize / sizeof(jint);// Set the length first for concurrent GC.((arrayOop)start)->set_length((int)len);post_allocation_setup_common(Universe::intArrayKlassObj(), start, words);DEBUG_ONLY(zap_filler_array(start, words, zap);) }void CollectedHeap::fill_with_object_impl(HeapWord* start, size_t words, bool zap) {assert(words <= filler_array_max_size(), "too big for a single object");if (words >= filler_array_min_size()) {fill_with_array(start, words, zap);} else if (words > 0) {assert(words == min_fill_size(), "unaligned size");post_allocation_setup_common(SystemDictionary::Object_klass(), start,words);} }void CollectedHeap::fill_with_object(HeapWord* start, size_t words, bool zap) {DEBUG_ONLY(fill_args_check(start, words);)HandleMark hm; // Free handles before leaving.fill_with_object_impl(start, words, zap); }void CollectedHeap::fill_with_objects(HeapWord* start, size_t words, bool zap) {DEBUG_ONLY(fill_args_check(start, words);)HandleMark hm; // Free handles before leaving.#ifdef _LP64// A single array can fill ~8G, so multiple objects are needed only in 64-bit.// First fill with arrays, ensuring that any remaining space is big enough to// fill. The remainder is filled with a single object.const size_t min = min_fill_size();const size_t max = filler_array_max_size();while (words > max) {const size_t cur = words - max >= min ? max : max - min;fill_with_array(start, cur, zap);start += cur;words -= cur;} #endiffill_with_object_impl(start, words, zap); }HeapWord* CollectedHeap::allocate_new_tlab(size_t size) {guarantee(false, "thread-local allocation buffers not supported");return NULL; }void CollectedHeap::ensure_parsability(bool retire_tlabs) {// The second disjunct in the assertion below makes a concession// for the start-up verification done while the VM is being// created. Callers be careful that you know that mutators// aren't going to interfere -- for instance, this is permissible// if we are still single-threaded and have either not yet// started allocating (nothing much to verify) or we have// started allocating but are now a full-fledged JavaThread// (and have thus made our TLAB's) available for filling.assert(SafepointSynchronize::is_at_safepoint() ||!is_init_completed(),"Should only be called at a safepoint or at start-up"" otherwise concurrent mutator activity may make heap "" unparsable again");const bool use_tlab = UseTLAB;const bool deferred = _defer_initial_card_mark;// The main thread starts allocating via a TLAB even before it// has added itself to the threads list at vm boot-up.assert(!use_tlab || Threads::first() != NULL,"Attempt to fill tlabs before main thread has been added"" to threads list is doomed to failure!");for (JavaThread *thread = Threads::first(); thread; thread = thread->next()) {if (use_tlab) thread->tlab().make_parsable(retire_tlabs); #ifdef COMPILER2// The deferred store barriers must all have been flushed to the// card-table (or other remembered set structure) before GC starts// processing the card-table (or other remembered set).if (deferred) flush_deferred_store_barrier(thread); #elseassert(!deferred, "Should be false");assert(thread->deferred_card_mark().is_empty(), "Should be empty"); #endif} }void CollectedHeap::accumulate_statistics_all_tlabs() {if (UseTLAB) {assert(SafepointSynchronize::is_at_safepoint() ||!is_init_completed(),"should only accumulate statistics on tlabs at safepoint");ThreadLocalAllocBuffer::accumulate_statistics_before_gc();} }void CollectedHeap::resize_all_tlabs() {if (UseTLAB) {assert(SafepointSynchronize::is_at_safepoint() ||!is_init_completed(),"should only resize tlabs at safepoint");ThreadLocalAllocBuffer::resize_all_tlabs();} }void CollectedHeap::pre_full_gc_dump() {if (HeapDumpBeforeFullGC) {TraceTime tt("Heap Dump: ", PrintGCDetails, false, gclog_or_tty);// We are doing a "major" collection and a heap dump before// major collection has been requested.HeapDumper::dump_heap();}if (PrintClassHistogramBeforeFullGC) {TraceTime tt("Class Histogram: ", PrintGCDetails, true, gclog_or_tty);VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */, false /* ! prologue */);inspector.doit();} }void CollectedHeap::post_full_gc_dump() {if (HeapDumpAfterFullGC) {TraceTime tt("Heap Dump", PrintGCDetails, false, gclog_or_tty);HeapDumper::dump_heap();}if (PrintClassHistogramAfterFullGC) {TraceTime tt("Class Histogram", PrintGCDetails, true, gclog_or_tty);VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */, false /* ! prologue */);inspector.doit();} }

gcCause.cpp

Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "gc_interface/gcCause.hpp"const char* GCCause::to_string(GCCause::Cause cause) {switch (cause) {case _java_lang_system_gc:return "System.gc()";case _full_gc_alot:return "FullGCAlot";case _scavenge_alot:return "ScavengeAlot";case _allocation_profiler:return "Allocation Profiler";case _jvmti_force_gc:return "JvmtiEnv ForceGarbageCollection";case _no_gc:return "No GC";case _allocation_failure:return "Allocation Failure";case _gc_locker:return "GCLocker Initiated GC";case _heap_inspection:return "Heap Inspection Initiated GC";case _heap_dump:return "Heap Dump Initiated GC";case _tenured_generation_full:return "Tenured Generation Full";case _permanent_generation_full:return "Permanent Generation Full";case _cms_generation_full:return "CMS Generation Full";case _cms_initial_mark:return "CMS Initial Mark";case _cms_final_remark:return "CMS Final Remark";case _old_generation_expanded_on_last_scavenge:return "Old Generation Expanded On Last Scavenge";case _old_generation_too_full_to_scavenge:return "Old Generation Too Full To Scavenge";case _g1_inc_collection_pause:return "G1 Evacuation Pause";case _last_ditch_collection:return "Last ditch collection";case _last_gc_cause:return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE";default:return "unknown GCCause";}ShouldNotReachHere(); }

parNew 垃圾回收器:


asParNewGeneration.cpp 代碼:

/** Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "gc_implementation/concurrentMarkSweep/cmsAdaptiveSizePolicy.hpp" #include "gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp" #include "gc_implementation/parNew/asParNewGeneration.hpp" #include "gc_implementation/parNew/parNewGeneration.hpp" #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" #include "memory/defNewGeneration.inline.hpp" #include "memory/referencePolicy.hpp" #include "oops/markOop.inline.hpp" #include "oops/oop.pcgc.inline.hpp"ASParNewGeneration::ASParNewGeneration(ReservedSpace rs,size_t initial_byte_size,size_t min_byte_size,int level) :ParNewGeneration(rs, initial_byte_size, level),_min_gen_size(min_byte_size) {}const char* ASParNewGeneration::name() const {return "adaptive size par new generation"; }void ASParNewGeneration::adjust_desired_tenuring_threshold() {assert(UseAdaptiveSizePolicy,"Should only be used with UseAdaptiveSizePolicy"); }void ASParNewGeneration::resize(size_t eden_size, size_t survivor_size) {// Resize the generation if needed. If the generation resize// reports false, do not attempt to resize the spaces.if (resize_generation(eden_size, survivor_size)) {// Then we lay out the spaces inside the generationresize_spaces(eden_size, survivor_size);space_invariants();if (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr("Young generation size: ""desired eden: " SIZE_FORMAT " survivor: " SIZE_FORMAT" used: " SIZE_FORMAT " capacity: " SIZE_FORMAT" gen limits: " SIZE_FORMAT " / " SIZE_FORMAT,eden_size, survivor_size, used(), capacity(),max_gen_size(), min_gen_size());}} }size_t ASParNewGeneration::available_to_min_gen() {assert(virtual_space()->committed_size() >= min_gen_size(), "Invariant");return virtual_space()->committed_size() - min_gen_size(); }// This method assumes that from-space has live data and that // any shrinkage of the young gen is limited by location of // from-space. size_t ASParNewGeneration::available_to_live() const { #undef SHRINKS_AT_END_OF_EDEN #ifdef SHRINKS_AT_END_OF_EDENsize_t delta_in_survivor = 0;ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();const size_t space_alignment = heap->intra_heap_alignment();const size_t gen_alignment = heap->object_heap_alignment();MutableSpace* space_shrinking = NULL;if (from_space()->end() > to_space()->end()) {space_shrinking = from_space();} else {space_shrinking = to_space();}// Include any space that is committed but not included in// the survivor spaces.assert(((HeapWord*)virtual_space()->high()) >= space_shrinking->end(),"Survivor space beyond high end");size_t unused_committed = pointer_delta(virtual_space()->high(),space_shrinking->end(), sizeof(char));if (space_shrinking->is_empty()) {// Don't let the space shrink to 0assert(space_shrinking->capacity_in_bytes() >= space_alignment,"Space is too small");delta_in_survivor = space_shrinking->capacity_in_bytes() - space_alignment;} else {delta_in_survivor = pointer_delta(space_shrinking->end(),space_shrinking->top(),sizeof(char));}size_t delta_in_bytes = unused_committed + delta_in_survivor;delta_in_bytes = align_size_down(delta_in_bytes, gen_alignment);return delta_in_bytes; #else// The only space available for shrinking is in to-space if it// is above from-space.if (to()->bottom() > from()->bottom()) {const size_t alignment = os::vm_page_size();if (to()->capacity() < alignment) {return 0;} else {return to()->capacity() - alignment;}} else {return 0;} #endif }// Return the number of bytes available for resizing down the young // generation. This is the minimum of // input "bytes" // bytes to the minimum young gen size // bytes to the size currently being used + some small extra size_t ASParNewGeneration::limit_gen_shrink (size_t bytes) {// Allow shrinkage into the current eden but keep eden large enough// to maintain the minimum young gen sizebytes = MIN3(bytes, available_to_min_gen(), available_to_live());return align_size_down(bytes, os::vm_page_size()); }// Note that the the alignment used is the OS page size as // opposed to an alignment associated with the virtual space // (as is done in the ASPSYoungGen/ASPSOldGen) bool ASParNewGeneration::resize_generation(size_t eden_size,size_t survivor_size) {const size_t alignment = os::vm_page_size();size_t orig_size = virtual_space()->committed_size();bool size_changed = false;// There used to be this guarantee there.// guarantee ((eden_size + 2*survivor_size) <= _max_gen_size, "incorrect input arguments");// Code below forces this requirement. In addition the desired eden// size and disired survivor sizes are desired goals and may// exceed the total generation size.assert(min_gen_size() <= orig_size && orig_size <= max_gen_size(),"just checking");// Adjust new generation sizeconst size_t eden_plus_survivors =align_size_up(eden_size + 2 * survivor_size, alignment);size_t desired_size = MAX2(MIN2(eden_plus_survivors, max_gen_size()),min_gen_size());assert(desired_size <= max_gen_size(), "just checking");if (desired_size > orig_size) {// Grow the generationsize_t change = desired_size - orig_size;assert(change % alignment == 0, "just checking");if (expand(change)) {return false; // Error if we fail to resize!}size_changed = true;} else if (desired_size < orig_size) {size_t desired_change = orig_size - desired_size;assert(desired_change % alignment == 0, "just checking");desired_change = limit_gen_shrink(desired_change);if (desired_change > 0) {virtual_space()->shrink_by(desired_change);reset_survivors_after_shrink();size_changed = true;}} else {if (Verbose && PrintGC) {if (orig_size == max_gen_size()) {gclog_or_tty->print_cr("ASParNew generation size at maximum: "SIZE_FORMAT "K", orig_size/K);} else if (orig_size == min_gen_size()) {gclog_or_tty->print_cr("ASParNew generation size at minium: "SIZE_FORMAT "K", orig_size/K);}}}if (size_changed) {MemRegion cmr((HeapWord*)virtual_space()->low(),(HeapWord*)virtual_space()->high());GenCollectedHeap::heap()->barrier_set()->resize_covered_region(cmr);if (Verbose && PrintGC) {size_t current_size = virtual_space()->committed_size();gclog_or_tty->print_cr("ASParNew generation size changed: "SIZE_FORMAT "K->" SIZE_FORMAT "K",orig_size/K, current_size/K);}}guarantee(eden_plus_survivors <= virtual_space()->committed_size() ||virtual_space()->committed_size() == max_gen_size(), "Sanity");return true; }void ASParNewGeneration::reset_survivors_after_shrink() {GenCollectedHeap* gch = GenCollectedHeap::heap();HeapWord* new_end = (HeapWord*)virtual_space()->high();if (from()->end() > to()->end()) {assert(new_end >= from()->end(), "Shrinking past from-space");} else {assert(new_end >= to()->bottom(), "Shrink was too large");// Was there a shrink of the survivor space?if (new_end < to()->end()) {MemRegion mr(to()->bottom(), new_end);to()->initialize(mr,SpaceDecorator::DontClear,SpaceDecorator::DontMangle);}} } void ASParNewGeneration::resize_spaces(size_t requested_eden_size,size_t requested_survivor_size) {assert(UseAdaptiveSizePolicy, "sanity check");assert(requested_eden_size > 0 && requested_survivor_size > 0,"just checking");CollectedHeap* heap = Universe::heap();assert(heap->kind() == CollectedHeap::GenCollectedHeap, "Sanity");// We require eden and to space to be emptyif ((!eden()->is_empty()) || (!to()->is_empty())) {return;}size_t cur_eden_size = eden()->capacity();if (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr("ASParNew::resize_spaces(requested_eden_size: "SIZE_FORMAT", requested_survivor_size: " SIZE_FORMAT ")",requested_eden_size, requested_survivor_size);gclog_or_tty->print_cr(" eden: [" PTR_FORMAT ".." PTR_FORMAT ") "SIZE_FORMAT,eden()->bottom(),eden()->end(),pointer_delta(eden()->end(),eden()->bottom(),sizeof(char)));gclog_or_tty->print_cr(" from: [" PTR_FORMAT ".." PTR_FORMAT ") "SIZE_FORMAT,from()->bottom(),from()->end(),pointer_delta(from()->end(),from()->bottom(),sizeof(char)));gclog_or_tty->print_cr(" to: [" PTR_FORMAT ".." PTR_FORMAT ") "SIZE_FORMAT,to()->bottom(),to()->end(),pointer_delta( to()->end(),to()->bottom(),sizeof(char)));}// There's nothing to do if the new sizes are the same as the currentif (requested_survivor_size == to()->capacity() &&requested_survivor_size == from()->capacity() &&requested_eden_size == eden()->capacity()) {if (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr(" capacities are the right sizes, returning");}return;}char* eden_start = (char*)eden()->bottom();char* eden_end = (char*)eden()->end();char* from_start = (char*)from()->bottom();char* from_end = (char*)from()->end();char* to_start = (char*)to()->bottom();char* to_end = (char*)to()->end();const size_t alignment = os::vm_page_size();const bool maintain_minimum =(requested_eden_size + 2 * requested_survivor_size) <= min_gen_size();// Check whether from space is below to spaceif (from_start < to_start) {// Eden, from, toif (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr(" Eden, from, to:");}// Set eden// "requested_eden_size" is a goal for the size of eden// and may not be attainable. "eden_size" below is// calculated based on the location of from-space and// the goal for the size of eden. from-space is// fixed in place because it contains live data.// The calculation is done this way to avoid 32bit// overflow (i.e., eden_start + requested_eden_size// may too large for representation in 32bits).size_t eden_size;if (maintain_minimum) {// Only make eden larger than the requested size if// the minimum size of the generation has to be maintained.// This could be done in general but policy at a higher// level is determining a requested size for eden and that// should be honored unless there is a fundamental reason.eden_size = pointer_delta(from_start,eden_start,sizeof(char));} else {eden_size = MIN2(requested_eden_size,pointer_delta(from_start, eden_start, sizeof(char)));}eden_size = align_size_down(eden_size, alignment);eden_end = eden_start + eden_size;assert(eden_end >= eden_start, "addition overflowed");// To may resize into from space as long as it is clear of live data.// From space must remain page aligned, though, so we need to do some// extra calculations.// First calculate an optimal to-spaceto_end = (char*)virtual_space()->high();to_start = (char*)pointer_delta(to_end, (char*)requested_survivor_size,sizeof(char));// Does the optimal to-space overlap from-space?if (to_start < (char*)from()->end()) {// Calculate the minimum offset possible for from_endsize_t from_size = pointer_delta(from()->top(), from_start, sizeof(char));// Should we be in this method if from_space is empty? Why not the set_space method? FIX ME!if (from_size == 0) {from_size = alignment;} else {from_size = align_size_up(from_size, alignment);}from_end = from_start + from_size;assert(from_end > from_start, "addition overflow or from_size problem");guarantee(from_end <= (char*)from()->end(), "from_end moved to the right");// Now update to_start with the new from_endto_start = MAX2(from_end, to_start);} else {// If shrinking, move to-space down to abut the end of from-space// so that shrinking will move to-space down. If not shrinking// to-space is moving up to allow for growth on the next expansion.if (requested_eden_size <= cur_eden_size) {to_start = from_end;if (to_start + requested_survivor_size > to_start) {to_end = to_start + requested_survivor_size;}}// else leave to_end pointing to the high end of the virtual space.}guarantee(to_start != to_end, "to space is zero sized");if (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr(" [eden_start .. eden_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,eden_start,eden_end,pointer_delta(eden_end, eden_start, sizeof(char)));gclog_or_tty->print_cr(" [from_start .. from_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,from_start,from_end,pointer_delta(from_end, from_start, sizeof(char)));gclog_or_tty->print_cr(" [ to_start .. to_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,to_start,to_end,pointer_delta( to_end, to_start, sizeof(char)));}} else {// Eden, to, fromif (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr(" Eden, to, from:");}// Calculate the to-space boundaries based on// the start of from-space.to_end = from_start;to_start = (char*)pointer_delta(from_start,(char*)requested_survivor_size,sizeof(char));// Calculate the ideal eden boundaries.// eden_end is already at the bottom of the generationassert(eden_start == virtual_space()->low(),"Eden is not starting at the low end of the virtual space");if (eden_start + requested_eden_size >= eden_start) {eden_end = eden_start + requested_eden_size;} else {eden_end = to_start;}// Does eden intrude into to-space? to-space// gets priority but eden is not allowed to shrink// to 0.if (eden_end > to_start) {eden_end = to_start;}// Don't let eden shrink down to 0 or less.eden_end = MAX2(eden_end, eden_start + alignment);assert(eden_start + alignment >= eden_start, "Overflow");size_t eden_size;if (maintain_minimum) {// Use all the space available.eden_end = MAX2(eden_end, to_start);eden_size = pointer_delta(eden_end, eden_start, sizeof(char));eden_size = MIN2(eden_size, cur_eden_size);} else {eden_size = pointer_delta(eden_end, eden_start, sizeof(char));}eden_size = align_size_down(eden_size, alignment);assert(maintain_minimum || eden_size <= requested_eden_size,"Eden size is too large");assert(eden_size >= alignment, "Eden size is too small");eden_end = eden_start + eden_size;// Move to-space down to eden.if (requested_eden_size < cur_eden_size) {to_start = eden_end;if (to_start + requested_survivor_size > to_start) {to_end = MIN2(from_start, to_start + requested_survivor_size);} else {to_end = from_start;}}// eden_end may have moved so again make sure// the to-space and eden don't overlap.to_start = MAX2(eden_end, to_start);// from-spacesize_t from_used = from()->used();if (requested_survivor_size > from_used) {if (from_start + requested_survivor_size >= from_start) {from_end = from_start + requested_survivor_size;}if (from_end > virtual_space()->high()) {from_end = virtual_space()->high();}}assert(to_start >= eden_end, "to-space should be above eden");if (PrintAdaptiveSizePolicy && Verbose) {gclog_or_tty->print_cr(" [eden_start .. eden_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,eden_start,eden_end,pointer_delta(eden_end, eden_start, sizeof(char)));gclog_or_tty->print_cr(" [ to_start .. to_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,to_start,to_end,pointer_delta( to_end, to_start, sizeof(char)));gclog_or_tty->print_cr(" [from_start .. from_end): ""[" PTR_FORMAT " .. " PTR_FORMAT ") " SIZE_FORMAT,from_start,from_end,pointer_delta(from_end, from_start, sizeof(char)));}}guarantee((HeapWord*)from_start <= from()->bottom(),"from start moved to the right");guarantee((HeapWord*)from_end >= from()->top(),"from end moved into live data");assert(is_object_aligned((intptr_t)eden_start), "checking alignment");assert(is_object_aligned((intptr_t)from_start), "checking alignment");assert(is_object_aligned((intptr_t)to_start), "checking alignment");MemRegion edenMR((HeapWord*)eden_start, (HeapWord*)eden_end);MemRegion toMR ((HeapWord*)to_start, (HeapWord*)to_end);MemRegion fromMR((HeapWord*)from_start, (HeapWord*)from_end);// Let's make sure the call to initialize doesn't reset "top"!HeapWord* old_from_top = from()->top();// For PrintAdaptiveSizePolicy block belowsize_t old_from = from()->capacity();size_t old_to = to()->capacity();// If not clearing the spaces, do some checking to verify that// the spaces are already mangled.// Must check mangling before the spaces are reshaped. Otherwise,// the bottom or end of one space may have moved into another// a failure of the check may not correctly indicate which space// is not properly mangled.if (ZapUnusedHeapArea) {HeapWord* limit = (HeapWord*) virtual_space()->high();eden()->check_mangled_unused_area(limit);from()->check_mangled_unused_area(limit);to()->check_mangled_unused_area(limit);}// The call to initialize NULL's the next compaction spaceeden()->initialize(edenMR,SpaceDecorator::Clear,SpaceDecorator::DontMangle);eden()->set_next_compaction_space(from());to()->initialize(toMR ,SpaceDecorator::Clear,SpaceDecorator::DontMangle);from()->initialize(fromMR,SpaceDecorator::DontClear,SpaceDecorator::DontMangle);assert(from()->top() == old_from_top, "from top changed!");if (PrintAdaptiveSizePolicy) {GenCollectedHeap* gch = GenCollectedHeap::heap();assert(gch->kind() == CollectedHeap::GenCollectedHeap, "Sanity");gclog_or_tty->print("AdaptiveSizePolicy::survivor space sizes: ""collection: %d ""(" SIZE_FORMAT ", " SIZE_FORMAT ") -> ""(" SIZE_FORMAT ", " SIZE_FORMAT ") ",gch->total_collections(),old_from, old_to,from()->capacity(),to()->capacity());gclog_or_tty->cr();} }void ASParNewGeneration::compute_new_size() {GenCollectedHeap* gch = GenCollectedHeap::heap();assert(gch->kind() == CollectedHeap::GenCollectedHeap,"not a CMS generational heap");CMSAdaptiveSizePolicy* size_policy =(CMSAdaptiveSizePolicy*)gch->gen_policy()->size_policy();assert(size_policy->is_gc_cms_adaptive_size_policy(),"Wrong type of size policy");size_t survived = from()->used();if (!survivor_overflow()) {// Keep running averages on how much survivedsize_policy->avg_survived()->sample(survived);} else {size_t promoted =(size_t) next_gen()->gc_stats()->avg_promoted()->last_sample();assert(promoted < gch->capacity(), "Conversion problem?");size_t survived_guess = survived + promoted;size_policy->avg_survived()->sample(survived_guess);}size_t survivor_limit = max_survivor_size();_tenuring_threshold =size_policy->compute_survivor_space_size_and_threshold(_survivor_overflow,_tenuring_threshold,survivor_limit);size_policy->avg_young_live()->sample(used());size_policy->avg_eden_live()->sample(eden()->used());size_policy->compute_young_generation_free_space(eden()->capacity(),max_gen_size());resize(size_policy->calculated_eden_size_in_bytes(),size_policy->calculated_survivor_size_in_bytes());if (UsePerfData) {CMSGCAdaptivePolicyCounters* counters =(CMSGCAdaptivePolicyCounters*) gch->collector_policy()->counters();assert(counters->kind() ==GCPolicyCounters::CMSGCAdaptivePolicyCountersKind,"Wrong kind of counters");counters->update_tenuring_threshold(_tenuring_threshold);counters->update_survivor_overflowed(_survivor_overflow);counters->update_young_capacity(capacity());} }#ifndef PRODUCT // Changes from PSYoungGen version // value of "alignment" void ASParNewGeneration::space_invariants() {const size_t alignment = os::vm_page_size();// Currently, our eden size cannot shrink to zeroguarantee(eden()->capacity() >= alignment, "eden too small");guarantee(from()->capacity() >= alignment, "from too small");guarantee(to()->capacity() >= alignment, "to too small");// Relationship of spaces to each otherchar* eden_start = (char*)eden()->bottom();char* eden_end = (char*)eden()->end();char* from_start = (char*)from()->bottom();char* from_end = (char*)from()->end();char* to_start = (char*)to()->bottom();char* to_end = (char*)to()->end();guarantee(eden_start >= virtual_space()->low(), "eden bottom");guarantee(eden_start < eden_end, "eden space consistency");guarantee(from_start < from_end, "from space consistency");guarantee(to_start < to_end, "to space consistency");// Check whether from space is below to spaceif (from_start < to_start) {// Eden, from, toguarantee(eden_end <= from_start, "eden/from boundary");guarantee(from_end <= to_start, "from/to boundary");guarantee(to_end <= virtual_space()->high(), "to end");} else {// Eden, to, fromguarantee(eden_end <= to_start, "eden/to boundary");guarantee(to_end <= from_start, "to/from boundary");guarantee(from_end <= virtual_space()->high(), "from end");}// More checks that the virtual space is consistent with the spacesassert(virtual_space()->committed_size() >=(eden()->capacity() +to()->capacity() +from()->capacity()), "Committed size is inconsistent");assert(virtual_space()->committed_size() <= virtual_space()->reserved_size(),"Space invariant");char* eden_top = (char*)eden()->top();char* from_top = (char*)from()->top();char* to_top = (char*)to()->top();assert(eden_top <= virtual_space()->high(), "eden top");assert(from_top <= virtual_space()->high(), "from top");assert(to_top <= virtual_space()->high(), "to top"); } #endif

parNewGeneration.cpp

/** Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" #include "gc_implementation/parNew/parGCAllocBuffer.hpp" #include "gc_implementation/parNew/parNewGeneration.hpp" #include "gc_implementation/parNew/parOopClosures.inline.hpp" #include "gc_implementation/shared/adaptiveSizePolicy.hpp" #include "gc_implementation/shared/ageTable.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" #include "memory/defNewGeneration.inline.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/genOopClosures.inline.hpp" #include "memory/generation.hpp" #include "memory/generation.inline.hpp" #include "memory/referencePolicy.hpp" #include "memory/resourceArea.hpp" #include "memory/sharedHeap.hpp" #include "memory/space.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" #include "runtime/handles.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" #include "runtime/thread.hpp" #include "utilities/copy.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/workgroup.hpp"#ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable:4355 ) // 'this' : used in base member initializer list #endif ParScanThreadState::ParScanThreadState(Space* to_space_,ParNewGeneration* gen_,Generation* old_gen_,int thread_num_,ObjToScanQueueSet* work_queue_set_,Stack<oop>* overflow_stacks_,size_t desired_plab_sz_,ParallelTaskTerminator& term_) :_to_space(to_space_), _old_gen(old_gen_), _young_gen(gen_), _thread_num(thread_num_),_work_queue(work_queue_set_->queue(thread_num_)), _to_space_full(false),_overflow_stack(overflow_stacks_ ? overflow_stacks_ + thread_num_ : NULL),_ageTable(false), // false ==> not the global age table, no perf data._to_space_alloc_buffer(desired_plab_sz_),_to_space_closure(gen_, this), _old_gen_closure(gen_, this),_to_space_root_closure(gen_, this), _old_gen_root_closure(gen_, this),_older_gen_closure(gen_, this),_evacuate_followers(this, &_to_space_closure, &_old_gen_closure,&_to_space_root_closure, gen_, &_old_gen_root_closure,work_queue_set_, &term_),_is_alive_closure(gen_), _scan_weak_ref_closure(gen_, this),_keep_alive_closure(&_scan_weak_ref_closure),_promotion_failure_size(0),_strong_roots_time(0.0), _term_time(0.0) {#if TASKQUEUE_STATS_term_attempts = 0;_overflow_refills = 0;_overflow_refill_objs = 0;#endif // TASKQUEUE_STATS_survivor_chunk_array =(ChunkArray*) old_gen()->get_data_recorder(thread_num());_hash_seed = 17; // Might want to take time-based random value._start = os::elapsedTime();_old_gen_closure.set_generation(old_gen_);_old_gen_root_closure.set_generation(old_gen_); } #ifdef _MSC_VER #pragma warning( pop ) #endifvoid ParScanThreadState::record_survivor_plab(HeapWord* plab_start,size_t plab_word_size) {ChunkArray* sca = survivor_chunk_array();if (sca != NULL) {// A non-null SCA implies that we want the PLAB data recorded.sca->record_sample(plab_start, plab_word_size);} }bool ParScanThreadState::should_be_partially_scanned(oop new_obj, oop old_obj) const {return new_obj->is_objArray() &&arrayOop(new_obj)->length() > ParGCArrayScanChunk &&new_obj != old_obj; }void ParScanThreadState::scan_partial_array_and_push_remainder(oop old) {assert(old->is_objArray(), "must be obj array");assert(old->is_forwarded(), "must be forwarded");assert(Universe::heap()->is_in_reserved(old), "must be in heap.");assert(!old_gen()->is_in(old), "must be in young generation.");objArrayOop obj = objArrayOop(old->forwardee());// Process ParGCArrayScanChunk elements now// and push the remainder back onto queueint start = arrayOop(old)->length();int end = obj->length();int remainder = end - start;assert(start <= end, "just checking");if (remainder > 2 * ParGCArrayScanChunk) {// Test above combines last partial chunk with a full chunkend = start + ParGCArrayScanChunk;arrayOop(old)->set_length(end);// Push remainder.bool ok = work_queue()->push(old);assert(ok, "just popped, push must be okay");} else {// Restore length so that it can be used if there// is a promotion failure and forwarding pointers// must be removed.arrayOop(old)->set_length(end);}// process our set of indices (include header in first chunk)// should make sure end is even (aligned to HeapWord in case of compressed oops)if ((HeapWord *)obj < young_old_boundary()) {// object is in to_spaceobj->oop_iterate_range(&_to_space_closure, start, end);} else {// object is in old generationobj->oop_iterate_range(&_old_gen_closure, start, end);} }void ParScanThreadState::trim_queues(int max_size) {ObjToScanQueue* queue = work_queue();do {while (queue->size() > (juint)max_size) {oop obj_to_scan;if (queue->pop_local(obj_to_scan)) {if ((HeapWord *)obj_to_scan < young_old_boundary()) {if (obj_to_scan->is_objArray() &&obj_to_scan->is_forwarded() &&obj_to_scan->forwardee() != obj_to_scan) {scan_partial_array_and_push_remainder(obj_to_scan);} else {// object is in to_spaceobj_to_scan->oop_iterate(&_to_space_closure);}} else {// object is in old generationobj_to_scan->oop_iterate(&_old_gen_closure);}}}// For the case of compressed oops, we have a private, non-shared// overflow stack, so we eagerly drain it so as to more evenly// distribute load early. Note: this may be good to do in// general rather than delay for the final stealing phase.// If applicable, we'll transfer a set of objects over to our// work queue, allowing them to be stolen and draining our// private overflow stack.} while (ParGCTrimOverflow && young_gen()->take_from_overflow_list(this)); }bool ParScanThreadState::take_from_overflow_stack() {assert(ParGCUseLocalOverflow, "Else should not call");assert(young_gen()->overflow_list() == NULL, "Error");ObjToScanQueue* queue = work_queue();Stack<oop>* const of_stack = overflow_stack();const size_t num_overflow_elems = of_stack->size();const size_t space_available = queue->max_elems() - queue->size();const size_t num_take_elems = MIN3(space_available / 4,ParGCDesiredObjsFromOverflowList,num_overflow_elems);// Transfer the most recent num_take_elems from the overflow// stack to our work queue.for (size_t i = 0; i != num_take_elems; i++) {oop cur = of_stack->pop();oop obj_to_push = cur->forwardee();assert(Universe::heap()->is_in_reserved(cur), "Should be in heap");assert(!old_gen()->is_in_reserved(cur), "Should be in young gen");assert(Universe::heap()->is_in_reserved(obj_to_push), "Should be in heap");if (should_be_partially_scanned(obj_to_push, cur)) {assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned");obj_to_push = cur;}bool ok = queue->push(obj_to_push);assert(ok, "Should have succeeded");}assert(young_gen()->overflow_list() == NULL, "Error");return num_take_elems > 0; // was something transferred? }void ParScanThreadState::push_on_overflow_stack(oop p) {assert(ParGCUseLocalOverflow, "Else should not call");overflow_stack()->push(p);assert(young_gen()->overflow_list() == NULL, "Error"); }HeapWord* ParScanThreadState::alloc_in_to_space_slow(size_t word_sz) {// Otherwise, if the object is small enough, try to reallocate the// buffer.HeapWord* obj = NULL;if (!_to_space_full) {ParGCAllocBuffer* const plab = to_space_alloc_buffer();Space* const sp = to_space();if (word_sz * 100 <ParallelGCBufferWastePct * plab->word_sz()) {// Is small enough; abandon this buffer and start a new one.plab->retire(false, false);size_t buf_size = plab->word_sz();HeapWord* buf_space = sp->par_allocate(buf_size);if (buf_space == NULL) {const size_t min_bytes =ParGCAllocBuffer::min_size() << LogHeapWordSize;size_t free_bytes = sp->free();while(buf_space == NULL && free_bytes >= min_bytes) {buf_size = free_bytes >> LogHeapWordSize;assert(buf_size == (size_t)align_object_size(buf_size),"Invariant");buf_space = sp->par_allocate(buf_size);free_bytes = sp->free();}}if (buf_space != NULL) {plab->set_word_size(buf_size);plab->set_buf(buf_space);record_survivor_plab(buf_space, buf_size);obj = plab->allocate(word_sz);// Note that we cannot compare buf_size < word_sz below// because of AlignmentReserve (see ParGCAllocBuffer::allocate()).assert(obj != NULL || plab->words_remaining() < word_sz,"Else should have been able to allocate");// It's conceivable that we may be able to use the// buffer we just grabbed for subsequent small requests// even if not for this one.} else {// We're used up._to_space_full = true;}} else {// Too large; allocate the object individually.obj = sp->par_allocate(word_sz);}}return obj; }void ParScanThreadState::undo_alloc_in_to_space(HeapWord* obj,size_t word_sz) {// Is the alloc in the current alloc buffer?if (to_space_alloc_buffer()->contains(obj)) {assert(to_space_alloc_buffer()->contains(obj + word_sz - 1),"Should contain whole object.");to_space_alloc_buffer()->undo_allocation(obj, word_sz);} else {CollectedHeap::fill_with_object(obj, word_sz);} }void ParScanThreadState::print_and_clear_promotion_failure_size() {if (_promotion_failure_size != 0) {if (PrintPromotionFailure) {gclog_or_tty->print(" (%d: promotion failure size = " SIZE_FORMAT ") ",_thread_num, _promotion_failure_size);}_promotion_failure_size = 0;} }class ParScanThreadStateSet: private ResourceArray { public:// Initializes states for the specified number of threads;ParScanThreadStateSet(int num_threads,Space& to_space,ParNewGeneration& gen,Generation& old_gen,ObjToScanQueueSet& queue_set,Stack<oop>* overflow_stacks_,size_t desired_plab_sz,ParallelTaskTerminator& term);~ParScanThreadStateSet() { TASKQUEUE_STATS_ONLY(reset_stats()); }inline ParScanThreadState& thread_state(int i);void reset(bool promotion_failed);void flush();#if TASKQUEUE_STATSstatic voidprint_termination_stats_hdr(outputStream* const st = gclog_or_tty);void print_termination_stats(outputStream* const st = gclog_or_tty);static voidprint_taskqueue_stats_hdr(outputStream* const st = gclog_or_tty);void print_taskqueue_stats(outputStream* const st = gclog_or_tty);void reset_stats();#endif // TASKQUEUE_STATSprivate:ParallelTaskTerminator& _term;ParNewGeneration& _gen;Generation& _next_gen; };ParScanThreadStateSet::ParScanThreadStateSet(int num_threads, Space& to_space, ParNewGeneration& gen,Generation& old_gen, ObjToScanQueueSet& queue_set,Stack<oop>* overflow_stacks,size_t desired_plab_sz, ParallelTaskTerminator& term): ResourceArray(sizeof(ParScanThreadState), num_threads),_gen(gen), _next_gen(old_gen), _term(term) {assert(num_threads > 0, "sanity check!");assert(ParGCUseLocalOverflow == (overflow_stacks != NULL),"overflow_stack allocation mismatch");// Initialize states.for (int i = 0; i < num_threads; ++i) {new ((ParScanThreadState*)_data + i)ParScanThreadState(&to_space, &gen, &old_gen, i, &queue_set,overflow_stacks, desired_plab_sz, term);} }inline ParScanThreadState& ParScanThreadStateSet::thread_state(int i) {assert(i >= 0 && i < length(), "sanity check!");return ((ParScanThreadState*)_data)[i]; }void ParScanThreadStateSet::reset(bool promotion_failed) {_term.reset_for_reuse();if (promotion_failed) {for (int i = 0; i < length(); ++i) {thread_state(i).print_and_clear_promotion_failure_size();}} }#if TASKQUEUE_STATS void ParScanThreadState::reset_stats() {taskqueue_stats().reset();_term_attempts = 0;_overflow_refills = 0;_overflow_refill_objs = 0; }void ParScanThreadStateSet::reset_stats() {for (int i = 0; i < length(); ++i) {thread_state(i).reset_stats();} }void ParScanThreadStateSet::print_termination_stats_hdr(outputStream* const st) {st->print_raw_cr("GC Termination Stats");st->print_raw_cr(" elapsed --strong roots-- ""-------termination-------");st->print_raw_cr("thr ms ms % "" ms % attempts");st->print_raw_cr("--- --------- --------- ------ ""--------- ------ --------"); }void ParScanThreadStateSet::print_termination_stats(outputStream* const st) {print_termination_stats_hdr(st);for (int i = 0; i < length(); ++i) {const ParScanThreadState & pss = thread_state(i);const double elapsed_ms = pss.elapsed_time() * 1000.0;const double s_roots_ms = pss.strong_roots_time() * 1000.0;const double term_ms = pss.term_time() * 1000.0;st->print_cr("%3d %9.2f %9.2f %6.2f ""%9.2f %6.2f " SIZE_FORMAT_W(8),i, elapsed_ms, s_roots_ms, s_roots_ms * 100 / elapsed_ms,term_ms, term_ms * 100 / elapsed_ms, pss.term_attempts());} }// Print stats related to work queue activity. void ParScanThreadStateSet::print_taskqueue_stats_hdr(outputStream* const st) {st->print_raw_cr("GC Task Stats");st->print_raw("thr "); TaskQueueStats::print_header(1, st); st->cr();st->print_raw("--- "); TaskQueueStats::print_header(2, st); st->cr(); }void ParScanThreadStateSet::print_taskqueue_stats(outputStream* const st) {print_taskqueue_stats_hdr(st);TaskQueueStats totals;for (int i = 0; i < length(); ++i) {const ParScanThreadState & pss = thread_state(i);const TaskQueueStats & stats = pss.taskqueue_stats();st->print("%3d ", i); stats.print(st); st->cr();totals += stats;if (pss.overflow_refills() > 0) {st->print_cr(" " SIZE_FORMAT_W(10) " overflow refills "SIZE_FORMAT_W(10) " overflow objects",pss.overflow_refills(), pss.overflow_refill_objs());}}st->print("tot "); totals.print(st); st->cr();DEBUG_ONLY(totals.verify()); } #endif // TASKQUEUE_STATSvoid ParScanThreadStateSet::flush() {// Work in this loop should be kept as lightweight as// possible since this might otherwise become a bottleneck// to scaling. Should we add heavy-weight work into this// loop, consider parallelizing the loop into the worker threads.for (int i = 0; i < length(); ++i) {ParScanThreadState& par_scan_state = thread_state(i);// Flush stats related to To-space PLAB activity and// retire the last buffer.par_scan_state.to_space_alloc_buffer()->flush_stats_and_retire(_gen.plab_stats(),false /* !retain */);// Every thread has its own age table. We need to merge// them all into one.ageTable *local_table = par_scan_state.age_table();_gen.age_table()->merge(local_table);// Inform old gen that we're done._next_gen.par_promote_alloc_done(i);_next_gen.par_oop_since_save_marks_iterate_done(i);}if (UseConcMarkSweepGC && ParallelGCThreads > 0) {// We need to call this even when ResizeOldPLAB is disabled// so as to avoid breaking some asserts. While we may be able// to avoid this by reorganizing the code a bit, I am loathe// to do that unless we find cases where ergo leads to bad// performance.CFLS_LAB::compute_desired_plab_size();} }ParScanClosure::ParScanClosure(ParNewGeneration* g,ParScanThreadState* par_scan_state) :OopsInGenClosure(g), _par_scan_state(par_scan_state), _g(g) {assert(_g->level() == 0, "Optimized for youngest generation");_boundary = _g->reserved().end(); }void ParScanWithBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, true, false); } void ParScanWithBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, true, false); }void ParScanWithoutBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, false, false); } void ParScanWithoutBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, false, false); }void ParRootScanWithBarrierTwoGensClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, true, true); } void ParRootScanWithBarrierTwoGensClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, true, true); }void ParRootScanWithoutBarrierClosure::do_oop(oop* p) { ParScanClosure::do_oop_work(p, false, true); } void ParRootScanWithoutBarrierClosure::do_oop(narrowOop* p) { ParScanClosure::do_oop_work(p, false, true); }ParScanWeakRefClosure::ParScanWeakRefClosure(ParNewGeneration* g,ParScanThreadState* par_scan_state): ScanWeakRefClosure(g), _par_scan_state(par_scan_state) {}void ParScanWeakRefClosure::do_oop(oop* p) { ParScanWeakRefClosure::do_oop_work(p); } void ParScanWeakRefClosure::do_oop(narrowOop* p) { ParScanWeakRefClosure::do_oop_work(p); }#ifdef WIN32 #pragma warning(disable: 4786) /* identifier was truncated to '255' characters in the browser information */ #endifParEvacuateFollowersClosure::ParEvacuateFollowersClosure(ParScanThreadState* par_scan_state_,ParScanWithoutBarrierClosure* to_space_closure_,ParScanWithBarrierClosure* old_gen_closure_,ParRootScanWithoutBarrierClosure* to_space_root_closure_,ParNewGeneration* par_gen_,ParRootScanWithBarrierTwoGensClosure* old_gen_root_closure_,ObjToScanQueueSet* task_queues_,ParallelTaskTerminator* terminator_) :_par_scan_state(par_scan_state_),_to_space_closure(to_space_closure_),_old_gen_closure(old_gen_closure_),_to_space_root_closure(to_space_root_closure_),_old_gen_root_closure(old_gen_root_closure_),_par_gen(par_gen_),_task_queues(task_queues_),_terminator(terminator_) {}void ParEvacuateFollowersClosure::do_void() {ObjToScanQueue* work_q = par_scan_state()->work_queue();while (true) {// Scan to-space and old-gen objs until we run out of both.oop obj_to_scan;par_scan_state()->trim_queues(0);// We have no local work, attempt to steal from other threads.// attempt to steal work from promoted.if (task_queues()->steal(par_scan_state()->thread_num(),par_scan_state()->hash_seed(),obj_to_scan)) {bool res = work_q->push(obj_to_scan);assert(res, "Empty queue should have room for a push.");// if successful, goto Start.continue;// try global overflow list.} else if (par_gen()->take_from_overflow_list(par_scan_state())) {continue;}// Otherwise, offer termination.par_scan_state()->start_term_time();if (terminator()->offer_termination()) break;par_scan_state()->end_term_time();}assert(par_gen()->_overflow_list == NULL && par_gen()->_num_par_pushes == 0,"Broken overflow list?");// Finish the last termination pause.par_scan_state()->end_term_time(); }ParNewGenTask::ParNewGenTask(ParNewGeneration* gen, Generation* next_gen,HeapWord* young_old_boundary, ParScanThreadStateSet* state_set) :AbstractGangTask("ParNewGeneration collection"),_gen(gen), _next_gen(next_gen),_young_old_boundary(young_old_boundary),_state_set(state_set){}void ParNewGenTask::work(int i) {GenCollectedHeap* gch = GenCollectedHeap::heap();// Since this is being done in a separate thread, need new resource// and handle marks.ResourceMark rm;HandleMark hm;// We would need multiple old-gen queues otherwise.assert(gch->n_gens() == 2, "Par young collection currently only works with one older gen.");Generation* old_gen = gch->next_gen(_gen);ParScanThreadState& par_scan_state = _state_set->thread_state(i);par_scan_state.set_young_old_boundary(_young_old_boundary);par_scan_state.start_strong_roots();gch->gen_process_strong_roots(_gen->level(),true, // Process younger gens, if any,// as strong roots.false, // no scope; this is parallel codefalse, // not collecting perm generation.SharedHeap::SO_AllClasses,&par_scan_state.to_space_root_closure(),true, // walk *all* scavengable nmethods&par_scan_state.older_gen_closure());par_scan_state.end_strong_roots();// "evacuate followers".par_scan_state.evacuate_followers_closure().do_void(); }#ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable:4355 ) // 'this' : used in base member initializer list #endif ParNewGeneration:: ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level): DefNewGeneration(rs, initial_byte_size, level, "PCopy"),_overflow_list(NULL),_is_alive_closure(this),_plab_stats(YoungPLABSize, PLABWeight) {NOT_PRODUCT(_overflow_counter = ParGCWorkQueueOverflowInterval;)NOT_PRODUCT(_num_par_pushes = 0;)_task_queues = new ObjToScanQueueSet(ParallelGCThreads);guarantee(_task_queues != NULL, "task_queues allocation failure.");for (uint i1 = 0; i1 < ParallelGCThreads; i1++) {ObjToScanQueue *q = new ObjToScanQueue();guarantee(q != NULL, "work_queue Allocation failure.");_task_queues->register_queue(i1, q);}for (uint i2 = 0; i2 < ParallelGCThreads; i2++)_task_queues->queue(i2)->initialize();_overflow_stacks = NULL;if (ParGCUseLocalOverflow) {_overflow_stacks = NEW_C_HEAP_ARRAY(Stack<oop>, ParallelGCThreads);for (size_t i = 0; i < ParallelGCThreads; ++i) {new (_overflow_stacks + i) Stack<oop>();}}if (UsePerfData) {EXCEPTION_MARK;ResourceMark rm;const char* cname =PerfDataManager::counter_name(_gen_counters->name_space(), "threads");PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_None,ParallelGCThreads, CHECK);} } #ifdef _MSC_VER #pragma warning( pop ) #endif// ParNewGeneration:: ParKeepAliveClosure::ParKeepAliveClosure(ParScanWeakRefClosure* cl) :DefNewGeneration::KeepAliveClosure(cl), _par_cl(cl) {}template <class T> void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT{assert(!oopDesc::is_null(*p), "expected non-null ref");oop obj = oopDesc::load_decode_heap_oop_not_null(p);// We never expect to see a null reference being processed// as a weak reference.assert(obj->is_oop(), "expected an oop while scanning weak refs");} #endif // ASSERT_par_cl->do_oop_nv(p);if (Universe::heap()->is_in_reserved(p)) {oop obj = oopDesc::load_decode_heap_oop_not_null(p);_rs->write_ref_field_gc_par(p, obj);} }void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(oop* p) { ParKeepAliveClosure::do_oop_work(p); } void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(narrowOop* p) { ParKeepAliveClosure::do_oop_work(p); }// ParNewGeneration:: KeepAliveClosure::KeepAliveClosure(ScanWeakRefClosure* cl) :DefNewGeneration::KeepAliveClosure(cl) {}template <class T> void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT{assert(!oopDesc::is_null(*p), "expected non-null ref");oop obj = oopDesc::load_decode_heap_oop_not_null(p);// We never expect to see a null reference being processed// as a weak reference.assert(obj->is_oop(), "expected an oop while scanning weak refs");} #endif // ASSERT_cl->do_oop_nv(p);if (Universe::heap()->is_in_reserved(p)) {oop obj = oopDesc::load_decode_heap_oop_not_null(p);_rs->write_ref_field_gc_par(p, obj);} }void /*ParNewGeneration::*/KeepAliveClosure::do_oop(oop* p) { KeepAliveClosure::do_oop_work(p); } void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); }template <class T> void ScanClosureWithParBarrier::do_oop_work(T* p) {T heap_oop = oopDesc::load_heap_oop(p);if (!oopDesc::is_null(heap_oop)) {oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);if ((HeapWord*)obj < _boundary) {assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?");oop new_obj = obj->is_forwarded()? obj->forwardee(): _g->DefNewGeneration::copy_to_survivor_space(obj);oopDesc::encode_store_heap_oop_not_null(p, new_obj);}if (_gc_barrier) {// If p points to a younger generation, mark the card.if ((HeapWord*)obj < _gen_boundary) {_rs->write_ref_field_gc_par(p, obj);}}} }void ScanClosureWithParBarrier::do_oop(oop* p) { ScanClosureWithParBarrier::do_oop_work(p); } void ScanClosureWithParBarrier::do_oop(narrowOop* p) { ScanClosureWithParBarrier::do_oop_work(p); }class ParNewRefProcTaskProxy: public AbstractGangTask {typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask; public:ParNewRefProcTaskProxy(ProcessTask& task, ParNewGeneration& gen,Generation& next_gen,HeapWord* young_old_boundary,ParScanThreadStateSet& state_set);private:virtual void work(int i);private:ParNewGeneration& _gen;ProcessTask& _task;Generation& _next_gen;HeapWord* _young_old_boundary;ParScanThreadStateSet& _state_set; };ParNewRefProcTaskProxy::ParNewRefProcTaskProxy(ProcessTask& task, ParNewGeneration& gen,Generation& next_gen,HeapWord* young_old_boundary,ParScanThreadStateSet& state_set): AbstractGangTask("ParNewGeneration parallel reference processing"),_gen(gen),_task(task),_next_gen(next_gen),_young_old_boundary(young_old_boundary),_state_set(state_set) { }void ParNewRefProcTaskProxy::work(int i) {ResourceMark rm;HandleMark hm;ParScanThreadState& par_scan_state = _state_set.thread_state(i);par_scan_state.set_young_old_boundary(_young_old_boundary);_task.work(i, par_scan_state.is_alive_closure(),par_scan_state.keep_alive_closure(),par_scan_state.evacuate_followers_closure()); }class ParNewRefEnqueueTaskProxy: public AbstractGangTask {typedef AbstractRefProcTaskExecutor::EnqueueTask EnqueueTask;EnqueueTask& _task;public:ParNewRefEnqueueTaskProxy(EnqueueTask& task): AbstractGangTask("ParNewGeneration parallel reference enqueue"),_task(task){ }virtual void work(int i){_task.work(i);} };void ParNewRefProcTaskExecutor::execute(ProcessTask& task) {GenCollectedHeap* gch = GenCollectedHeap::heap();assert(gch->kind() == CollectedHeap::GenCollectedHeap,"not a generational heap");WorkGang* workers = gch->workers();assert(workers != NULL, "Need parallel worker threads.");ParNewRefProcTaskProxy rp_task(task, _generation, *_generation.next_gen(),_generation.reserved().end(), _state_set);workers->run_task(&rp_task);_state_set.reset(_generation.promotion_failed()); }void ParNewRefProcTaskExecutor::execute(EnqueueTask& task) {GenCollectedHeap* gch = GenCollectedHeap::heap();WorkGang* workers = gch->workers();assert(workers != NULL, "Need parallel worker threads.");ParNewRefEnqueueTaskProxy enq_task(task);workers->run_task(&enq_task); }void ParNewRefProcTaskExecutor::set_single_threaded_mode() {_state_set.flush();GenCollectedHeap* gch = GenCollectedHeap::heap();gch->set_par_threads(0); // 0 ==> non-parallel.gch->save_marks(); }ScanClosureWithParBarrier:: ScanClosureWithParBarrier(ParNewGeneration* g, bool gc_barrier) :ScanClosure(g, gc_barrier) {}EvacuateFollowersClosureGeneral:: EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, int level,OopsInGenClosure* cur,OopsInGenClosure* older) :_gch(gch), _level(level),_scan_cur_or_nonheap(cur), _scan_older(older) {}void EvacuateFollowersClosureGeneral::do_void() {do {// Beware: this call will lead to closure applications via virtual// calls._gch->oop_since_save_marks_iterate(_level,_scan_cur_or_nonheap,_scan_older);} while (!_gch->no_allocs_since_save_marks(_level)); }bool ParNewGeneration::_avoid_promotion_undo = false;void ParNewGeneration::adjust_desired_tenuring_threshold() {// Set the desired survivor size to half the real survivor space_tenuring_threshold =age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize); }// A Generation that does parallel young-gen collection.void ParNewGeneration::collect(bool full,bool clear_all_soft_refs,size_t size,bool is_tlab) {assert(full || size > 0, "otherwise we don't want to collect");GenCollectedHeap* gch = GenCollectedHeap::heap();assert(gch->kind() == CollectedHeap::GenCollectedHeap,"not a CMS generational heap");AdaptiveSizePolicy* size_policy = gch->gen_policy()->size_policy();WorkGang* workers = gch->workers();_next_gen = gch->next_gen(this);assert(_next_gen != NULL,"This must be the youngest gen, and not the only gen");assert(gch->n_gens() == 2,"Par collection currently only works with single older gen.");// Do we have to avoid promotion_undo?if (gch->collector_policy()->is_concurrent_mark_sweep_policy()) {set_avoid_promotion_undo(true);}// If the next generation is too full to accomodate worst-case promotion// from this generation, pass on collection; let the next generation// do it.if (!collection_attempt_is_safe()) {gch->set_incremental_collection_failed(); // slight lie, in that we did not even attempt onereturn;}assert(to()->is_empty(), "Else not collection_attempt_is_safe");init_assuming_no_promotion_failure();if (UseAdaptiveSizePolicy) {set_survivor_overflow(false);size_policy->minor_collection_begin();}TraceTime t1("GC", PrintGC && !PrintGCDetails, true, gclog_or_tty);// Capture heap used before collection (for printing).size_t gch_prev_used = gch->used();SpecializationStats::clear();age_table()->clear();to()->clear(SpaceDecorator::Mangle);gch->save_marks();assert(workers != NULL, "Need parallel worker threads.");ParallelTaskTerminator _term(workers->total_workers(), task_queues());ParScanThreadStateSet thread_state_set(workers->total_workers(),*to(), *this, *_next_gen, *task_queues(),_overflow_stacks, desired_plab_sz(), _term);ParNewGenTask tsk(this, _next_gen, reserved().end(), &thread_state_set);int n_workers = workers->total_workers();gch->set_par_threads(n_workers);gch->rem_set()->prepare_for_younger_refs_iterate(true);// It turns out that even when we're using 1 thread, doing the work in a// separate thread causes wide variance in run times. We can't help this// in the multi-threaded case, but we special-case n=1 here to get// repeatable measurements of the 1-thread overhead of the parallel code.if (n_workers > 1) {GenCollectedHeap::StrongRootsScope srs(gch);workers->run_task(&tsk);} else {GenCollectedHeap::StrongRootsScope srs(gch);tsk.work(0);}thread_state_set.reset(promotion_failed());// Process (weak) reference objects found during scavenge.ReferenceProcessor* rp = ref_processor();IsAliveClosure is_alive(this);ScanWeakRefClosure scan_weak_ref(this);KeepAliveClosure keep_alive(&scan_weak_ref);ScanClosure scan_without_gc_barrier(this, false);ScanClosureWithParBarrier scan_with_gc_barrier(this, true);set_promo_failure_scan_stack_closure(&scan_without_gc_barrier);EvacuateFollowersClosureGeneral evacuate_followers(gch, _level,&scan_without_gc_barrier, &scan_with_gc_barrier);rp->setup_policy(clear_all_soft_refs);if (rp->processing_is_mt()) {ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);rp->process_discovered_references(&is_alive, &keep_alive,&evacuate_followers, &task_executor);} else {thread_state_set.flush();gch->set_par_threads(0); // 0 ==> non-parallel.gch->save_marks();rp->process_discovered_references(&is_alive, &keep_alive,&evacuate_followers, NULL);}if (!promotion_failed()) {// Swap the survivor spaces.eden()->clear(SpaceDecorator::Mangle);from()->clear(SpaceDecorator::Mangle);if (ZapUnusedHeapArea) {// This is now done here because of the piece-meal mangling which// can check for valid mangling at intermediate points in the// collection(s). When a minor collection fails to collect// sufficient space resizing of the young generation can occur// an redistribute the spaces in the young generation. Mangle// here so that unzapped regions don't get distributed to// other spaces.to()->mangle_unused_area();}swap_spaces();// A successful scavenge should restart the GC time limit count which is// for full GC's.size_policy->reset_gc_overhead_limit_count();assert(to()->is_empty(), "to space should be empty now");} else {assert(_promo_failure_scan_stack.is_empty(), "post condition");_promo_failure_scan_stack.clear(true); // Clear cached segments.remove_forwarding_pointers();if (PrintGCDetails) {gclog_or_tty->print(" (promotion failed)");}// All the spaces are in play for mark-sweep.swap_spaces(); // Make life simpler for CMS || rescan; see 6483690.from()->set_next_compaction_space(to());gch->set_incremental_collection_failed();// Inform the next generation that a promotion failure occurred._next_gen->promotion_failure_occurred();// Reset the PromotionFailureALot counters.NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)}// set new iteration safe limit for the survivor spacesfrom()->set_concurrent_iteration_safe_limit(from()->top());to()->set_concurrent_iteration_safe_limit(to()->top());adjust_desired_tenuring_threshold();if (ResizePLAB) {plab_stats()->adjust_desired_plab_sz();}if (PrintGC && !PrintGCDetails) {gch->print_heap_change(gch_prev_used);}if (PrintGCDetails && ParallelGCVerbose) {TASKQUEUE_STATS_ONLY(thread_state_set.print_termination_stats());TASKQUEUE_STATS_ONLY(thread_state_set.print_taskqueue_stats());}if (UseAdaptiveSizePolicy) {size_policy->minor_collection_end(gch->gc_cause());size_policy->avg_survived()->sample(from()->used());}update_time_of_last_gc(os::javaTimeMillis());SpecializationStats::print();rp->set_enqueuing_is_done(true);if (rp->processing_is_mt()) {ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);rp->enqueue_discovered_references(&task_executor);} else {rp->enqueue_discovered_references(NULL);}rp->verify_no_references_recorded(); }static int sum; void ParNewGeneration::waste_some_time() {for (int i = 0; i < 100; i++) {sum += i;} }static const oop ClaimedForwardPtr = oop(0x4);// Because of concurrency, there are times where an object for which // "is_forwarded()" is true contains an "interim" forwarding pointer // value. Such a value will soon be overwritten with a real value. // This method requires "obj" to have a forwarding pointer, and waits, if // necessary for a real one to be inserted, and returns it.oop ParNewGeneration::real_forwardee(oop obj) {oop forward_ptr = obj->forwardee();if (forward_ptr != ClaimedForwardPtr) {return forward_ptr;} else {return real_forwardee_slow(obj);} }oop ParNewGeneration::real_forwardee_slow(oop obj) {// Spin-read if it is claimed but not yet written by another thread.oop forward_ptr = obj->forwardee();while (forward_ptr == ClaimedForwardPtr) {waste_some_time();assert(obj->is_forwarded(), "precondition");forward_ptr = obj->forwardee();}return forward_ptr; }#ifdef ASSERT bool ParNewGeneration::is_legal_forward_ptr(oop p) {return(_avoid_promotion_undo && p == ClaimedForwardPtr)|| Universe::heap()->is_in_reserved(p); } #endifvoid ParNewGeneration::preserve_mark_if_necessary(oop obj, markOop m) {if (m->must_be_preserved_for_promotion_failure(obj)) {// We should really have separate per-worker stacks, rather// than use locking of a common pair of stacks.MutexLocker ml(ParGCRareEvent_lock);preserve_mark(obj, m);} }// Multiple GC threads may try to promote an object. If the object // is successfully promoted, a forwarding pointer will be installed in // the object in the young generation. This method claims the right // to install the forwarding pointer before it copies the object, // thus avoiding the need to undo the copy as in // copy_to_survivor_space_avoiding_with_undo.oop ParNewGeneration::copy_to_survivor_space_avoiding_promotion_undo(ParScanThreadState* par_scan_state, oop old, size_t sz, markOop m) {// In the sequential version, this assert also says that the object is// not forwarded. That might not be the case here. It is the case that// the caller observed it to be not forwarded at some time in the past.assert(is_in_reserved(old), "shouldn't be scavenging this oop");// The sequential code read "old->age()" below. That doesn't work here,// since the age is in the mark word, and that might be overwritten with// a forwarding pointer by a parallel thread. So we must save the mark// word in a local and then analyze it.oopDesc dummyOld;dummyOld.set_mark(m);assert(!dummyOld.is_forwarded(),"should not be called with forwarding pointer mark word.");oop new_obj = NULL;oop forward_ptr;// Try allocating obj in to-space (unless too old)if (dummyOld.age() < tenuring_threshold()) {new_obj = (oop)par_scan_state->alloc_in_to_space(sz);if (new_obj == NULL) {set_survivor_overflow(true);}}if (new_obj == NULL) {// Either to-space is full or we decided to promote// try allocating obj tenured// Attempt to install a null forwarding pointer (atomically),// to claim the right to install the real forwarding pointer.forward_ptr = old->forward_to_atomic(ClaimedForwardPtr);if (forward_ptr != NULL) {// someone else beat us to it.return real_forwardee(old);}new_obj = _next_gen->par_promote(par_scan_state->thread_num(),old, m, sz);if (new_obj == NULL) {// promotion failed, forward to self_promotion_failed = true;new_obj = old;preserve_mark_if_necessary(old, m);// Log the size of the maiden promotion failurepar_scan_state->log_promotion_failure(sz);}old->forward_to(new_obj);forward_ptr = NULL;} else {// Is in to-space; do copying ourselves.Copy::aligned_disjoint_words((HeapWord*)old, (HeapWord*)new_obj, sz);forward_ptr = old->forward_to_atomic(new_obj);// Restore the mark word copied above.new_obj->set_mark(m);// Increment age if obj still in new generationnew_obj->incr_age();par_scan_state->age_table()->add(new_obj, sz);}assert(new_obj != NULL, "just checking");if (forward_ptr == NULL) {oop obj_to_push = new_obj;if (par_scan_state->should_be_partially_scanned(obj_to_push, old)) {// Length field used as index of next element to be scanned.// Real length can be obtained from real_forwardee()arrayOop(old)->set_length(0);obj_to_push = old;assert(obj_to_push->is_forwarded() && obj_to_push->forwardee() != obj_to_push,"push forwarded object");}// Push it on one of the queues of to-be-scanned objects.bool simulate_overflow = false;NOT_PRODUCT(if (ParGCWorkQueueOverflowALot && should_simulate_overflow()) {// simulate a stack overflowsimulate_overflow = true;})if (simulate_overflow || !par_scan_state->work_queue()->push(obj_to_push)) {// Add stats for overflow pushes.if (Verbose && PrintGCDetails) {gclog_or_tty->print("queue overflow!\n");}push_on_overflow_list(old, par_scan_state);TASKQUEUE_STATS_ONLY(par_scan_state->taskqueue_stats().record_overflow(0));}return new_obj;}// Oops. Someone beat us to it. Undo the allocation. Where did we// allocate it?if (is_in_reserved(new_obj)) {// Must be in to_space.assert(to()->is_in_reserved(new_obj), "Checking");if (forward_ptr == ClaimedForwardPtr) {// Wait to get the real forwarding pointer value.forward_ptr = real_forwardee(old);}par_scan_state->undo_alloc_in_to_space((HeapWord*)new_obj, sz);}return forward_ptr; }// Multiple GC threads may try to promote the same object. If two // or more GC threads copy the object, only one wins the race to install // the forwarding pointer. The other threads have to undo their copy.oop ParNewGeneration::copy_to_survivor_space_with_undo(ParScanThreadState* par_scan_state, oop old, size_t sz, markOop m) {// In the sequential version, this assert also says that the object is// not forwarded. That might not be the case here. It is the case that// the caller observed it to be not forwarded at some time in the past.assert(is_in_reserved(old), "shouldn't be scavenging this oop");// The sequential code read "old->age()" below. That doesn't work here,// since the age is in the mark word, and that might be overwritten with// a forwarding pointer by a parallel thread. So we must save the mark// word here, install it in a local oopDesc, and then analyze it.oopDesc dummyOld;dummyOld.set_mark(m);assert(!dummyOld.is_forwarded(),"should not be called with forwarding pointer mark word.");bool failed_to_promote = false;oop new_obj = NULL;oop forward_ptr;// Try allocating obj in to-space (unless too old)if (dummyOld.age() < tenuring_threshold()) {new_obj = (oop)par_scan_state->alloc_in_to_space(sz);if (new_obj == NULL) {set_survivor_overflow(true);}}if (new_obj == NULL) {// Either to-space is full or we decided to promote// try allocating obj tenurednew_obj = _next_gen->par_promote(par_scan_state->thread_num(),old, m, sz);if (new_obj == NULL) {// promotion failed, forward to selfforward_ptr = old->forward_to_atomic(old);new_obj = old;if (forward_ptr != NULL) {return forward_ptr; // someone else succeeded}_promotion_failed = true;failed_to_promote = true;preserve_mark_if_necessary(old, m);// Log the size of the maiden promotion failurepar_scan_state->log_promotion_failure(sz);}} else {// Is in to-space; do copying ourselves.Copy::aligned_disjoint_words((HeapWord*)old, (HeapWord*)new_obj, sz);// Restore the mark word copied above.new_obj->set_mark(m);// Increment age if new_obj still in new generationnew_obj->incr_age();par_scan_state->age_table()->add(new_obj, sz);}assert(new_obj != NULL, "just checking");// Now attempt to install the forwarding pointer (atomically).// We have to copy the mark word before overwriting with forwarding// ptr, so we can restore it below in the copy.if (!failed_to_promote) {forward_ptr = old->forward_to_atomic(new_obj);}if (forward_ptr == NULL) {oop obj_to_push = new_obj;if (par_scan_state->should_be_partially_scanned(obj_to_push, old)) {// Length field used as index of next element to be scanned.// Real length can be obtained from real_forwardee()arrayOop(old)->set_length(0);obj_to_push = old;assert(obj_to_push->is_forwarded() && obj_to_push->forwardee() != obj_to_push,"push forwarded object");}// Push it on one of the queues of to-be-scanned objects.bool simulate_overflow = false;NOT_PRODUCT(if (ParGCWorkQueueOverflowALot && should_simulate_overflow()) {// simulate a stack overflowsimulate_overflow = true;})if (simulate_overflow || !par_scan_state->work_queue()->push(obj_to_push)) {// Add stats for overflow pushes.push_on_overflow_list(old, par_scan_state);TASKQUEUE_STATS_ONLY(par_scan_state->taskqueue_stats().record_overflow(0));}return new_obj;}// Oops. Someone beat us to it. Undo the allocation. Where did we// allocate it?if (is_in_reserved(new_obj)) {// Must be in to_space.assert(to()->is_in_reserved(new_obj), "Checking");par_scan_state->undo_alloc_in_to_space((HeapWord*)new_obj, sz);} else {assert(!_avoid_promotion_undo, "Should not be here if avoiding.");_next_gen->par_promote_alloc_undo(par_scan_state->thread_num(),(HeapWord*)new_obj, sz);}return forward_ptr; }#ifndef PRODUCT // It's OK to call this multi-threaded; the worst thing // that can happen is that we'll get a bunch of closely // spaced simulated oveflows, but that's OK, in fact // probably good as it would exercise the overflow code // under contention. bool ParNewGeneration::should_simulate_overflow() {if (_overflow_counter-- <= 0) { // just being defensive_overflow_counter = ParGCWorkQueueOverflowInterval;return true;} else {return false;} } #endif// In case we are using compressed oops, we need to be careful. // If the object being pushed is an object array, then its length // field keeps track of the "grey boundary" at which the next // incremental scan will be done (see ParGCArrayScanChunk). // When using compressed oops, this length field is kept in the // lower 32 bits of the erstwhile klass word and cannot be used // for the overflow chaining pointer (OCP below). As such the OCP // would itself need to be compressed into the top 32-bits in this // case. Unfortunately, see below, in the event that we have a // promotion failure, the node to be pushed on the list can be // outside of the Java heap, so the heap-based pointer compression // would not work (we would have potential aliasing between C-heap // and Java-heap pointers). For this reason, when using compressed // oops, we simply use a worker-thread-local, non-shared overflow // list in the form of a growable array, with a slightly different // overflow stack draining strategy. If/when we start using fat // stacks here, we can go back to using (fat) pointer chains // (although some performance comparisons would be useful since // single global lists have their own performance disadvantages // as we were made painfully aware not long ago, see 6786503). #define BUSY (oop(0x1aff1aff)) void ParNewGeneration::push_on_overflow_list(oop from_space_obj, ParScanThreadState* par_scan_state) {assert(is_in_reserved(from_space_obj), "Should be from this generation");if (ParGCUseLocalOverflow) {// In the case of compressed oops, we use a private, not-shared// overflow stack.par_scan_state->push_on_overflow_stack(from_space_obj);} else {assert(!UseCompressedOops, "Error");// if the object has been forwarded to itself, then we cannot// use the klass pointer for the linked list. Instead we have// to allocate an oopDesc in the C-Heap and use that for the linked list.// XXX This is horribly inefficient when a promotion failure occurs// and should be fixed. XXX FIX ME !!! #ifndef PRODUCTAtomic::inc_ptr(&_num_par_pushes);assert(_num_par_pushes > 0, "Tautology"); #endifif (from_space_obj->forwardee() == from_space_obj) {oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1);listhead->forward_to(from_space_obj);from_space_obj = listhead;}oop observed_overflow_list = _overflow_list;oop cur_overflow_list;do {cur_overflow_list = observed_overflow_list;if (cur_overflow_list != BUSY) {from_space_obj->set_klass_to_list_ptr(cur_overflow_list);} else {from_space_obj->set_klass_to_list_ptr(NULL);}observed_overflow_list =(oop)Atomic::cmpxchg_ptr(from_space_obj, &_overflow_list, cur_overflow_list);} while (cur_overflow_list != observed_overflow_list);} }bool ParNewGeneration::take_from_overflow_list(ParScanThreadState* par_scan_state) {bool res;if (ParGCUseLocalOverflow) {res = par_scan_state->take_from_overflow_stack();} else {assert(!UseCompressedOops, "Error");res = take_from_overflow_list_work(par_scan_state);}return res; }// *NOTE*: The overflow list manipulation code here and // in CMSCollector:: are very similar in shape, // except that in the CMS case we thread the objects // directly into the list via their mark word, and do // not need to deal with special cases below related // to chunking of object arrays and promotion failure // handling. // CR 6797058 has been filed to attempt consolidation of // the common code. // Because of the common code, if you make any changes in // the code below, please check the CMS version to see if // similar changes might be needed. // See CMSCollector::par_take_from_overflow_list() for // more extensive documentation comments. bool ParNewGeneration::take_from_overflow_list_work(ParScanThreadState* par_scan_state) {ObjToScanQueue* work_q = par_scan_state->work_queue();// How many to take?size_t objsFromOverflow = MIN2((size_t)(work_q->max_elems() - work_q->size())/4,(size_t)ParGCDesiredObjsFromOverflowList);assert(!UseCompressedOops, "Error");assert(par_scan_state->overflow_stack() == NULL, "Error");if (_overflow_list == NULL) return false;// Otherwise, there was something there; try claiming the list.oop prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);// Trim off a prefix of at most objsFromOverflow itemsThread* tid = Thread::current();size_t spin_count = (size_t)ParallelGCThreads;size_t sleep_time_millis = MAX2((size_t)1, objsFromOverflow/100);for (size_t spin = 0; prefix == BUSY && spin < spin_count; spin++) {// someone grabbed it before we did ...// ... we spin for a short while...os::sleep(tid, sleep_time_millis, false);if (_overflow_list == NULL) {// nothing left to takereturn false;} else if (_overflow_list != BUSY) {// try and grab the prefixprefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list);}}if (prefix == NULL || prefix == BUSY) {// Nothing to take or waited long enoughif (prefix == NULL) {// Write back the NULL in case we overwrote it with BUSY above// and it is still the same value.(void) Atomic::cmpxchg_ptr(NULL, &_overflow_list, BUSY);}return false;}assert(prefix != NULL && prefix != BUSY, "Error");size_t i = 1;oop cur = prefix;while (i < objsFromOverflow && cur->klass_or_null() != NULL) {i++; cur = oop(cur->klass());}// Reattach remaining (suffix) to overflow listif (cur->klass_or_null() == NULL) {// Write back the NULL in lieu of the BUSY we wrote// above and it is still the same value.if (_overflow_list == BUSY) {(void) Atomic::cmpxchg_ptr(NULL, &_overflow_list, BUSY);}} else {assert(cur->klass_or_null() != BUSY, "Error");oop suffix = oop(cur->klass()); // suffix will be put back on global listcur->set_klass_to_list_ptr(NULL); // break off suffix// It's possible that the list is still in the empty(busy) state// we left it in a short while ago; in that case we may be// able to place back the suffix.oop observed_overflow_list = _overflow_list;oop cur_overflow_list = observed_overflow_list;bool attached = false;while (observed_overflow_list == BUSY || observed_overflow_list == NULL) {observed_overflow_list =(oop) Atomic::cmpxchg_ptr(suffix, &_overflow_list, cur_overflow_list);if (cur_overflow_list == observed_overflow_list) {attached = true;break;} else cur_overflow_list = observed_overflow_list;}if (!attached) {// Too bad, someone else got in in between; we'll need to do a splice.// Find the last item of suffix listoop last = suffix;while (last->klass_or_null() != NULL) {last = oop(last->klass());}// Atomically prepend suffix to current overflow listobserved_overflow_list = _overflow_list;do {cur_overflow_list = observed_overflow_list;if (cur_overflow_list != BUSY) {// Do the splice ...last->set_klass_to_list_ptr(cur_overflow_list);} else { // cur_overflow_list == BUSYlast->set_klass_to_list_ptr(NULL);}observed_overflow_list =(oop)Atomic::cmpxchg_ptr(suffix, &_overflow_list, cur_overflow_list);} while (cur_overflow_list != observed_overflow_list);}}// Push objects on prefix list onto this thread's work queueassert(prefix != NULL && prefix != BUSY, "program logic");cur = prefix;ssize_t n = 0;while (cur != NULL) {oop obj_to_push = cur->forwardee();oop next = oop(cur->klass_or_null());cur->set_klass(obj_to_push->klass());// This may be an array object that is self-forwarded. In that case, the list pointer// space, cur, is not in the Java heap, but rather in the C-heap and should be freed.if (!is_in_reserved(cur)) {// This can become a scaling bottleneck when there is work queue overflow coincident// with promotion failure.oopDesc* f = cur;FREE_C_HEAP_ARRAY(oopDesc, f);} else if (par_scan_state->should_be_partially_scanned(obj_to_push, cur)) {assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned");obj_to_push = cur;}bool ok = work_q->push(obj_to_push);assert(ok, "Should have succeeded");cur = next;n++;}TASKQUEUE_STATS_ONLY(par_scan_state->note_overflow_refill(n)); #ifndef PRODUCTassert(_num_par_pushes >= n, "Too many pops?");Atomic::add_ptr(-(intptr_t)n, &_num_par_pushes); #endifreturn true; } #undef BUSYvoid ParNewGeneration::ref_processor_init() {if (_ref_processor == NULL) {// Allocate and initialize a reference processor_ref_processor =new ReferenceProcessor(_reserved, // spanParallelRefProcEnabled && (ParallelGCThreads > 1), // mt processing(int) ParallelGCThreads, // mt processing degreerefs_discovery_is_mt(), // mt discovery(int) ParallelGCThreads, // mt discovery degreerefs_discovery_is_atomic(), // atomic_discoveryNULL, // is_alive_non_headerfalse); // write barrier for next field updates} }const char* ParNewGeneration::name() const {return "par new generation"; }bool ParNewGeneration::in_use() {return UseParNewGC && ParallelGCThreads > 0; }

parCardTableModRefBS.cpp?

Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "memory/allocation.inline.hpp" #include "memory/cardTableModRefBS.hpp" #include "memory/cardTableRS.hpp" #include "memory/sharedHeap.hpp" #include "memory/space.inline.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/virtualspace.hpp"void CardTableModRefBS::non_clean_card_iterate_parallel_work(Space* sp, MemRegion mr,OopsInGenClosure* cl,CardTableRS* ct,int n_threads) {assert(n_threads > 0, "Error: expected n_threads > 0");assert((n_threads == 1 && ParallelGCThreads == 0) ||n_threads <= (int)ParallelGCThreads,"# worker threads != # requested!");// Make sure the LNC array is valid for the space.jbyte** lowest_non_clean;uintptr_t lowest_non_clean_base_chunk_index;size_t lowest_non_clean_chunk_size;get_LNC_array_for_space(sp, lowest_non_clean,lowest_non_clean_base_chunk_index,lowest_non_clean_chunk_size);int n_strides = n_threads * ParGCStridesPerThread;SequentialSubTasksDone* pst = sp->par_seq_tasks();pst->set_n_threads(n_threads);pst->set_n_tasks(n_strides);int stride = 0;while (!pst->is_task_claimed(/* reference */ stride)) {process_stride(sp, mr, stride, n_strides, cl, ct,lowest_non_clean,lowest_non_clean_base_chunk_index,lowest_non_clean_chunk_size);}if (pst->all_tasks_completed()) {// Clear lowest_non_clean array for next time.intptr_t first_chunk_index = addr_to_chunk_index(mr.start());uintptr_t last_chunk_index = addr_to_chunk_index(mr.last());for (uintptr_t ch = first_chunk_index; ch <= last_chunk_index; ch++) {intptr_t ind = ch - lowest_non_clean_base_chunk_index;assert(0 <= ind && ind < (intptr_t)lowest_non_clean_chunk_size,"Bounds error");lowest_non_clean[ind] = NULL;}} }void CardTableModRefBS:: process_stride(Space* sp,MemRegion used,jint stride, int n_strides,OopsInGenClosure* cl,CardTableRS* ct,jbyte** lowest_non_clean,uintptr_t lowest_non_clean_base_chunk_index,size_t lowest_non_clean_chunk_size) {// We go from higher to lower addresses here; it wouldn't help that much// because of the strided parallelism pattern used here.// Find the first card address of the first chunk in the stride that is// at least "bottom" of the used region.jbyte* start_card = byte_for(used.start());jbyte* end_card = byte_after(used.last());uintptr_t start_chunk = addr_to_chunk_index(used.start());uintptr_t start_chunk_stride_num = start_chunk % n_strides;jbyte* chunk_card_start;if ((uintptr_t)stride >= start_chunk_stride_num) {chunk_card_start = (jbyte*)(start_card +(stride - start_chunk_stride_num) *ParGCCardsPerStrideChunk);} else {// Go ahead to the next chunk group boundary, then to the requested stride.chunk_card_start = (jbyte*)(start_card +(n_strides - start_chunk_stride_num + stride) *ParGCCardsPerStrideChunk);}while (chunk_card_start < end_card) {// Even though we go from lower to higher addresses below, the// strided parallelism can interleave the actual processing of the// dirty pages in various ways. For a specific chunk within this// stride, we take care to avoid double scanning or missing a card// by suitably initializing the "min_done" field in process_chunk_boundaries()// below, together with the dirty region extension accomplished in// DirtyCardToOopClosure::do_MemRegion().jbyte* chunk_card_end = chunk_card_start + ParGCCardsPerStrideChunk;// Invariant: chunk_mr should be fully contained within the "used" region.MemRegion chunk_mr = MemRegion(addr_for(chunk_card_start),chunk_card_end >= end_card ?used.end() : addr_for(chunk_card_end));assert(chunk_mr.word_size() > 0, "[chunk_card_start > used_end)");assert(used.contains(chunk_mr), "chunk_mr should be subset of used");DirtyCardToOopClosure* dcto_cl = sp->new_dcto_cl(cl, precision(),cl->gen_boundary());ClearNoncleanCardWrapper clear_cl(dcto_cl, ct);// Process the chunk.process_chunk_boundaries(sp,dcto_cl,chunk_mr,used,lowest_non_clean,lowest_non_clean_base_chunk_index,lowest_non_clean_chunk_size);// We want the LNC array updates above in process_chunk_boundaries// to be visible before any of the card table value changes as a// result of the dirty card iteration below.OrderAccess::storestore();// We do not call the non_clean_card_iterate_serial() version because// we want to clear the cards: clear_cl here does the work of finding// contiguous dirty ranges of cards to process and clear.clear_cl.do_MemRegion(chunk_mr);// Find the next chunk of the stride.chunk_card_start += ParGCCardsPerStrideChunk * n_strides;} }// If you want a talkative process_chunk_boundaries, // then #define NOISY(x) x #ifdef NOISY #error "Encountered a global preprocessor flag, NOISY, which might clash with local definition to follow" #else #define NOISY(x) #endifvoid CardTableModRefBS:: process_chunk_boundaries(Space* sp,DirtyCardToOopClosure* dcto_cl,MemRegion chunk_mr,MemRegion used,jbyte** lowest_non_clean,uintptr_t lowest_non_clean_base_chunk_index,size_t lowest_non_clean_chunk_size) {// We must worry about non-array objects that cross chunk boundaries,// because such objects are both precisely and imprecisely marked:// .. if the head of such an object is dirty, the entire object// needs to be scanned, under the interpretation that this// was an imprecise mark// .. if the head of such an object is not dirty, we can assume// precise marking and it's efficient to scan just the dirty// cards.// In either case, each scanned reference must be scanned precisely// once so as to avoid cloning of a young referent. For efficiency,// our closures depend on this property and do not protect against// double scans.uintptr_t cur_chunk_index = addr_to_chunk_index(chunk_mr.start());cur_chunk_index = cur_chunk_index - lowest_non_clean_base_chunk_index;NOISY(tty->print_cr("===========================================================================");)NOISY(tty->print_cr(" process_chunk_boundary: Called with [" PTR_FORMAT "," PTR_FORMAT ")",chunk_mr.start(), chunk_mr.end());)// First, set "our" lowest_non_clean entry, which would be// used by the thread scanning an adjoining left chunk with// a non-array object straddling the mutual boundary.// Find the object that spans our boundary, if one exists.// first_block is the block possibly straddling our left boundary.HeapWord* first_block = sp->block_start(chunk_mr.start());assert((chunk_mr.start() != used.start()) || (first_block == chunk_mr.start()),"First chunk should always have a co-initial block");// Does the block straddle the chunk's left boundary, and is it// a non-array object?if (first_block < chunk_mr.start() // first block straddles left bdry&& sp->block_is_obj(first_block) // first block is an object&& !(oop(first_block)->is_objArray() // first block is not an array (arrays are precisely dirtied)|| oop(first_block)->is_typeArray())) {// Find our least non-clean card, so that a left neighbour// does not scan an object straddling the mutual boundary// too far to the right, and attempt to scan a portion of// that object twice.jbyte* first_dirty_card = NULL;jbyte* last_card_of_first_obj =byte_for(first_block + sp->block_size(first_block) - 1);jbyte* first_card_of_cur_chunk = byte_for(chunk_mr.start());jbyte* last_card_of_cur_chunk = byte_for(chunk_mr.last());jbyte* last_card_to_check =(jbyte*) MIN2((intptr_t) last_card_of_cur_chunk,(intptr_t) last_card_of_first_obj);// Note that this does not need to go beyond our last card// if our first object completely straddles this chunk.for (jbyte* cur = first_card_of_cur_chunk;cur <= last_card_to_check; cur++) {jbyte val = *cur;if (card_will_be_scanned(val)) {first_dirty_card = cur; break;} else {assert(!card_may_have_been_dirty(val), "Error");}}if (first_dirty_card != NULL) {NOISY(tty->print_cr(" LNC: Found a dirty card at " PTR_FORMAT " in current chunk",first_dirty_card);)assert(0 <= cur_chunk_index && cur_chunk_index < lowest_non_clean_chunk_size,"Bounds error.");assert(lowest_non_clean[cur_chunk_index] == NULL,"Write exactly once : value should be stable hereafter for this round");lowest_non_clean[cur_chunk_index] = first_dirty_card;} NOISY(else {tty->print_cr(" LNC: Found no dirty card in current chunk; leaving LNC entry NULL");// In the future, we could have this thread look for a non-NULL value to copy from its// right neighbour (up to the end of the first object).if (last_card_of_cur_chunk < last_card_of_first_obj) {tty->print_cr(" LNC: BEWARE!!! first obj straddles past right end of chunk:\n"" might be efficient to get value from right neighbour?");}})} else {// In this case we can help our neighbour by just asking them// to stop at our first card (even though it may not be dirty).NOISY(tty->print_cr(" LNC: first block is not a non-array object; setting LNC to first card of current chunk");)assert(lowest_non_clean[cur_chunk_index] == NULL, "Write once : value should be stable hereafter");jbyte* first_card_of_cur_chunk = byte_for(chunk_mr.start());lowest_non_clean[cur_chunk_index] = first_card_of_cur_chunk;}NOISY(tty->print_cr(" process_chunk_boundary: lowest_non_clean[" INTPTR_FORMAT "] = " PTR_FORMAT" which corresponds to the heap address " PTR_FORMAT,cur_chunk_index, lowest_non_clean[cur_chunk_index],(lowest_non_clean[cur_chunk_index] != NULL)? addr_for(lowest_non_clean[cur_chunk_index]): NULL);)NOISY(tty->print_cr("---------------------------------------------------------------------------");)// Next, set our own max_to_do, which will strictly/exclusively bound// the highest address that we will scan past the right end of our chunk.HeapWord* max_to_do = NULL;if (chunk_mr.end() < used.end()) {// This is not the last chunk in the used region.// What is our last block? We check the first block of// the next (right) chunk rather than strictly check our last block// because it's potentially more efficient to do so.HeapWord* const last_block = sp->block_start(chunk_mr.end());assert(last_block <= chunk_mr.end(), "In case this property changes.");if ((last_block == chunk_mr.end()) // our last block does not straddle boundary|| !sp->block_is_obj(last_block) // last_block isn't an object|| oop(last_block)->is_objArray() // last_block is an array (precisely marked)|| oop(last_block)->is_typeArray()) {max_to_do = chunk_mr.end();NOISY(tty->print_cr(" process_chunk_boundary: Last block on this card is not a non-array object;\n"" max_to_do left at " PTR_FORMAT, max_to_do);)} else {assert(last_block < chunk_mr.end(), "Tautology");// It is a non-array object that straddles the right boundary of this chunk.// last_obj_card is the card corresponding to the start of the last object// in the chunk. Note that the last object may not start in// the chunk.jbyte* const last_obj_card = byte_for(last_block);const jbyte val = *last_obj_card;if (!card_will_be_scanned(val)) {assert(!card_may_have_been_dirty(val), "Error");// The card containing the head is not dirty. Any marks on// subsequent cards still in this chunk must have been made// precisely; we can cap processing at the end of our chunk.max_to_do = chunk_mr.end();NOISY(tty->print_cr(" process_chunk_boundary: Head of last object on this card is not dirty;\n"" max_to_do left at " PTR_FORMAT,max_to_do);)} else {// The last object must be considered dirty, and extends onto the// following chunk. Look for a dirty card in that chunk that will// bound our processing.jbyte* limit_card = NULL;const size_t last_block_size = sp->block_size(last_block);jbyte* const last_card_of_last_obj =byte_for(last_block + last_block_size - 1);jbyte* const first_card_of_next_chunk = byte_for(chunk_mr.end());// This search potentially goes a long distance looking// for the next card that will be scanned, terminating// at the end of the last_block, if no earlier dirty card// is found.assert(byte_for(chunk_mr.end()) - byte_for(chunk_mr.start()) == ParGCCardsPerStrideChunk,"last card of next chunk may be wrong");for (jbyte* cur = first_card_of_next_chunk;cur <= last_card_of_last_obj; cur++) {const jbyte val = *cur;if (card_will_be_scanned(val)) {NOISY(tty->print_cr(" Found a non-clean card " PTR_FORMAT " with value 0x%x",cur, (int)val);)limit_card = cur; break;} else {assert(!card_may_have_been_dirty(val), "Error: card can't be skipped");}}if (limit_card != NULL) {max_to_do = addr_for(limit_card);assert(limit_card != NULL && max_to_do != NULL, "Error");NOISY(tty->print_cr(" process_chunk_boundary: Found a dirty card at " PTR_FORMAT" max_to_do set at " PTR_FORMAT " which is before end of last block in chunk: "PTR_FORMAT " + " PTR_FORMAT " = " PTR_FORMAT,limit_card, max_to_do, last_block, last_block_size, (last_block+last_block_size));)} else {// The following is a pessimistic value, because it's possible// that a dirty card on a subsequent chunk has been cleared by// the time we get to look at it; we'll correct for that further below,// using the LNC array which records the least non-clean card// before cards were cleared in a particular chunk.limit_card = last_card_of_last_obj;max_to_do = last_block + last_block_size;assert(limit_card != NULL && max_to_do != NULL, "Error");NOISY(tty->print_cr(" process_chunk_boundary: Found no dirty card before end of last block in chunk\n"" Setting limit_card to " PTR_FORMAT" and max_to_do " PTR_FORMAT " + " PTR_FORMAT " = " PTR_FORMAT,limit_card, last_block, last_block_size, max_to_do);)}assert(0 < cur_chunk_index+1 && cur_chunk_index+1 < lowest_non_clean_chunk_size,"Bounds error.");// It is possible that a dirty card for the last object may have been// cleared before we had a chance to examine it. In that case, the value// will have been logged in the LNC for that chunk.// We need to examine as many chunks to the right as this object// covers.const uintptr_t last_chunk_index_to_check = addr_to_chunk_index(last_block + last_block_size - 1)- lowest_non_clean_base_chunk_index;DEBUG_ONLY(const uintptr_t last_chunk_index = addr_to_chunk_index(used.last())- lowest_non_clean_base_chunk_index;)assert(last_chunk_index_to_check <= last_chunk_index,err_msg("Out of bounds: last_chunk_index_to_check " INTPTR_FORMAT" exceeds last_chunk_index " INTPTR_FORMAT,last_chunk_index_to_check, last_chunk_index));for (uintptr_t lnc_index = cur_chunk_index + 1;lnc_index <= last_chunk_index_to_check;lnc_index++) {jbyte* lnc_card = lowest_non_clean[lnc_index];if (lnc_card != NULL) {// we can stop at the first non-NULL entry we findif (lnc_card <= limit_card) {NOISY(tty->print_cr(" process_chunk_boundary: LNC card " PTR_FORMAT " is lower than limit_card " PTR_FORMAT," max_to_do will be lowered to " PTR_FORMAT " from " PTR_FORMAT,lnc_card, limit_card, addr_for(lnc_card), max_to_do);)limit_card = lnc_card;max_to_do = addr_for(limit_card);assert(limit_card != NULL && max_to_do != NULL, "Error");}// In any case, we break nowbreak;} // else continue to look for a non-NULL entry if any}assert(limit_card != NULL && max_to_do != NULL, "Error");}assert(max_to_do != NULL, "OOPS 1 !");}assert(max_to_do != NULL, "OOPS 2!");} else {max_to_do = used.end();NOISY(tty->print_cr(" process_chunk_boundary: Last chunk of this space;\n"" max_to_do left at " PTR_FORMAT,max_to_do);)}assert(max_to_do != NULL, "OOPS 3!");// Now we can set the closure we're using so it doesn't to beyond// max_to_do.dcto_cl->set_min_done(max_to_do); #ifndef PRODUCTdcto_cl->set_last_bottom(max_to_do); #endifNOISY(tty->print_cr("===========================================================================\n");) }#undef NOISYvoid CardTableModRefBS:: get_LNC_array_for_space(Space* sp,jbyte**& lowest_non_clean,uintptr_t& lowest_non_clean_base_chunk_index,size_t& lowest_non_clean_chunk_size) {int i = find_covering_region_containing(sp->bottom());MemRegion covered = _covered[i];size_t n_chunks = chunks_to_cover(covered);// Only the first thread to obtain the lock will resize the// LNC array for the covered region. Any later expansion can't affect// the used_at_save_marks region.// (I observed a bug in which the first thread to execute this would// resize, and then it would cause "expand_and_allocate" that would// increase the number of chunks in the covered region. Then a second// thread would come and execute this, see that the size didn't match,// and free and allocate again. So the first thread would be using a// freed "_lowest_non_clean" array.)// Do a dirty read here. If we pass the conditional then take the rare// event lock and do the read again in case some other thread had already// succeeded and done the resize.int cur_collection = Universe::heap()->total_collections();if (_last_LNC_resizing_collection[i] != cur_collection) {MutexLocker x(ParGCRareEvent_lock);if (_last_LNC_resizing_collection[i] != cur_collection) {if (_lowest_non_clean[i] == NULL ||n_chunks != _lowest_non_clean_chunk_size[i]) {// Should we delete the old?if (_lowest_non_clean[i] != NULL) {assert(n_chunks != _lowest_non_clean_chunk_size[i],"logical consequence");FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i]);_lowest_non_clean[i] = NULL;}// Now allocate a new one if necessary.if (_lowest_non_clean[i] == NULL) {_lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks);_lowest_non_clean_chunk_size[i] = n_chunks;_lowest_non_clean_base_chunk_index[i] = addr_to_chunk_index(covered.start());for (int j = 0; j < (int)n_chunks; j++)_lowest_non_clean[i][j] = NULL;}}_last_LNC_resizing_collection[i] = cur_collection;}}// In any case, now do the initialization.lowest_non_clean = _lowest_non_clean[i];lowest_non_clean_base_chunk_index = _lowest_non_clean_base_chunk_index[i];lowest_non_clean_chunk_size = _lowest_non_clean_chunk_size[i]; }

parGCAllocBuffer.cpp

Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.**/#include "precompiled.hpp" #include "gc_implementation/parNew/parGCAllocBuffer.hpp" #include "memory/sharedHeap.hpp" #include "oops/arrayOop.hpp" #include "oops/oop.inline.hpp"ParGCAllocBuffer::ParGCAllocBuffer(size_t desired_plab_sz_) :_word_sz(desired_plab_sz_), _bottom(NULL), _top(NULL),_end(NULL), _hard_end(NULL),_retained(false), _retained_filler(),_allocated(0), _wasted(0) {assert (min_size() > AlignmentReserve, "Inconsistency!");// arrayOopDesc::header_size depends on command line initialization.FillerHeaderSize = align_object_size(arrayOopDesc::header_size(T_INT));AlignmentReserve = oopDesc::header_size() > MinObjAlignment ? FillerHeaderSize : 0; }size_t ParGCAllocBuffer::FillerHeaderSize;// If the minimum object size is greater than MinObjAlignment, we can // end up with a shard at the end of the buffer that's smaller than // the smallest object. We can't allow that because the buffer must // look like it's full of objects when we retire it, so we make // sure we have enough space for a filler int array object. size_t ParGCAllocBuffer::AlignmentReserve;void ParGCAllocBuffer::retire(bool end_of_gc, bool retain) {assert(!retain || end_of_gc, "Can only retain at GC end.");if (_retained) {// If the buffer had been retained shorten the previous filler object.assert(_retained_filler.end() <= _top, "INVARIANT");CollectedHeap::fill_with_object(_retained_filler);// Wasted space book-keeping, otherwise (normally) done in invalidate()_wasted += _retained_filler.word_size();_retained = false;}assert(!end_of_gc || !_retained, "At this point, end_of_gc ==> !_retained.");if (_top < _hard_end) {CollectedHeap::fill_with_object(_top, _hard_end);if (!retain) {invalidate();} else {// Is there wasted space we'd like to retain for the next GC?if (pointer_delta(_end, _top) > FillerHeaderSize) {_retained = true;_retained_filler = MemRegion(_top, FillerHeaderSize);_top = _top + FillerHeaderSize;} else {invalidate();}}} }void ParGCAllocBuffer::flush_stats(PLABStats* stats) {assert(ResizePLAB, "Wasted work");stats->add_allocated(_allocated);stats->add_wasted(_wasted);stats->add_unused(pointer_delta(_end, _top)); }// Compute desired plab size and latch result for later // use. This should be called once at the end of parallel // scavenge; it clears the sensor accumulators. void PLABStats::adjust_desired_plab_sz() {assert(ResizePLAB, "Not set");if (_allocated == 0) {assert(_unused == 0, "Inconsistency in PLAB stats");_allocated = 1;}double wasted_frac = (double)_unused/(double)_allocated;size_t target_refills = (size_t)((wasted_frac*TargetSurvivorRatio)/TargetPLABWastePct);if (target_refills == 0) {target_refills = 1;}_used = _allocated - _wasted - _unused;size_t plab_sz = _used/(target_refills*ParallelGCThreads);if (PrintPLAB) gclog_or_tty->print(" (plab_sz = %d ", plab_sz);// Take historical weighted average_filter.sample(plab_sz);// Clip from above and below, and align to object boundaryplab_sz = MAX2(min_size(), (size_t)_filter.average());plab_sz = MIN2(max_size(), plab_sz);plab_sz = align_object_size(plab_sz);// Latch the resultif (PrintPLAB) gclog_or_tty->print(" desired_plab_sz = %d) ", plab_sz);if (ResizePLAB) {_desired_plab_sz = plab_sz;}// Now clear the accumulators for next round:// note this needs to be fixed in the case where we// are retaining across scavenges. FIX ME !!! XXX_allocated = 0;_wasted = 0;_unused = 0; }#ifndef PRODUCT void ParGCAllocBuffer::print() {gclog_or_tty->print("parGCAllocBuffer: _bottom: %p _top: %p _end: %p _hard_end: %p""_retained: %c _retained_filler: [%p,%p)\n",_bottom, _top, _end, _hard_end,"FT"[_retained], _retained_filler.start(), _retained_filler.end()); } #endif // !PRODUCTconst size_t ParGCAllocBufferWithBOT::ChunkSizeInWords = MIN2(CardTableModRefBS::par_chunk_heapword_alignment(),((size_t)Generation::GenGrain)/HeapWordSize); const size_t ParGCAllocBufferWithBOT::ChunkSizeInBytes = MIN2(CardTableModRefBS::par_chunk_heapword_alignment() * HeapWordSize,(size_t)Generation::GenGrain);ParGCAllocBufferWithBOT::ParGCAllocBufferWithBOT(size_t word_sz,BlockOffsetSharedArray* bsa) :ParGCAllocBuffer(word_sz),_bsa(bsa),_bt(bsa, MemRegion(_bottom, _hard_end)),_true_end(_hard_end) {}// The buffer comes with its own BOT, with a shared (obviously) underlying // BlockOffsetSharedArray. We manipulate this BOT in the normal way // as we would for any contiguous space. However, on accasion we // need to do some buffer surgery at the extremities before we // start using the body of the buffer for allocations. Such surgery // (as explained elsewhere) is to prevent allocation on a card that // is in the process of being walked concurrently by another GC thread. // When such surgery happens at a point that is far removed (to the // right of the current allocation point, top), we use the "contig" // parameter below to directly manipulate the shared array without // modifying the _next_threshold state in the BOT. void ParGCAllocBufferWithBOT::fill_region_with_block(MemRegion mr,bool contig) {CollectedHeap::fill_with_object(mr);if (contig) {_bt.alloc_block(mr.start(), mr.end());} else {_bt.BlockOffsetArray::alloc_block(mr.start(), mr.end());} }HeapWord* ParGCAllocBufferWithBOT::allocate_slow(size_t word_sz) {HeapWord* res = NULL;if (_true_end > _hard_end) {assert((HeapWord*)align_size_down(intptr_t(_hard_end),ChunkSizeInBytes) == _hard_end,"or else _true_end should be equal to _hard_end");assert(_retained, "or else _true_end should be equal to _hard_end");assert(_retained_filler.end() <= _top, "INVARIANT");CollectedHeap::fill_with_object(_retained_filler);if (_top < _hard_end) {fill_region_with_block(MemRegion(_top, _hard_end), true);}HeapWord* next_hard_end = MIN2(_true_end, _hard_end + ChunkSizeInWords);_retained_filler = MemRegion(_hard_end, FillerHeaderSize);_bt.alloc_block(_retained_filler.start(), _retained_filler.word_size());_top = _retained_filler.end();_hard_end = next_hard_end;_end = _hard_end - AlignmentReserve;res = ParGCAllocBuffer::allocate(word_sz);if (res != NULL) {_bt.alloc_block(res, word_sz);}}return res; }void ParGCAllocBufferWithBOT::undo_allocation(HeapWord* obj, size_t word_sz) {ParGCAllocBuffer::undo_allocation(obj, word_sz);// This may back us up beyond the previous threshold, so reset._bt.set_region(MemRegion(_top, _hard_end));_bt.initialize_threshold(); }void ParGCAllocBufferWithBOT::retire(bool end_of_gc, bool retain) {assert(!retain || end_of_gc, "Can only retain at GC end.");if (_retained) {// We're about to make the retained_filler into a block._bt.BlockOffsetArray::alloc_block(_retained_filler.start(),_retained_filler.end());}// Reset _hard_end to _true_end (and update _end)if (retain && _hard_end != NULL) {assert(_hard_end <= _true_end, "Invariant.");_hard_end = _true_end;_end = MAX2(_top, _hard_end - AlignmentReserve);assert(_end <= _hard_end, "Invariant.");}_true_end = _hard_end;HeapWord* pre_top = _top;ParGCAllocBuffer::retire(end_of_gc, retain);// Now any old _retained_filler is cut back to size, the free part is// filled with a filler object, and top is past the header of that// object.if (retain && _top < _end) {assert(end_of_gc && retain, "Or else retain should be false.");// If the lab does not start on a card boundary, we don't want to// allocate onto that card, since that might lead to concurrent// allocation and card scanning, which we don't support. So we fill// the first card with a garbage object.size_t first_card_index = _bsa->index_for(pre_top);HeapWord* first_card_start = _bsa->address_for_index(first_card_index);if (first_card_start < pre_top) {HeapWord* second_card_start =_bsa->inc_by_region_size(first_card_start);// Ensure enough room to fill with the smallest blocksecond_card_start = MAX2(second_card_start, pre_top + AlignmentReserve);// If the end is already in the first card, don't go beyond it!// Or if the remainder is too small for a filler object, gobble it up.if (_hard_end < second_card_start ||pointer_delta(_hard_end, second_card_start) < AlignmentReserve) {second_card_start = _hard_end;}if (pre_top < second_card_start) {MemRegion first_card_suffix(pre_top, second_card_start);fill_region_with_block(first_card_suffix, true);}pre_top = second_card_start;_top = pre_top;_end = MAX2(_top, _hard_end - AlignmentReserve);}// If the lab does not end on a card boundary, we don't want to// allocate onto that card, since that might lead to concurrent// allocation and card scanning, which we don't support. So we fill// the last card with a garbage object.size_t last_card_index = _bsa->index_for(_hard_end);HeapWord* last_card_start = _bsa->address_for_index(last_card_index);if (last_card_start < _hard_end) {// Ensure enough room to fill with the smallest blocklast_card_start = MIN2(last_card_start, _hard_end - AlignmentReserve);// If the top is already in the last card, don't go back beyond it!// Or if the remainder is too small for a filler object, gobble it up.if (_top > last_card_start ||pointer_delta(last_card_start, _top) < AlignmentReserve) {last_card_start = _top;}if (last_card_start < _hard_end) {MemRegion last_card_prefix(last_card_start, _hard_end);fill_region_with_block(last_card_prefix, false);}_hard_end = last_card_start;_end = MAX2(_top, _hard_end - AlignmentReserve);_true_end = _hard_end;assert(_end <= _hard_end, "Invariant.");}// At this point:// 1) we had a filler object from the original top to hard_end.// 2) We've filled in any partial cards at the front and back.if (pre_top < _hard_end) {// Now we can reset the _bt to do allocation in the given area.MemRegion new_filler(pre_top, _hard_end);fill_region_with_block(new_filler, false);_top = pre_top + ParGCAllocBuffer::FillerHeaderSize;// If there's no space left, don't retain.if (_top >= _end) {_retained = false;invalidate();return;}_retained_filler = MemRegion(pre_top, _top);_bt.set_region(MemRegion(_top, _hard_end));_bt.initialize_threshold();assert(_bt.threshold() > _top, "initialize_threshold failed!");// There may be other reasons for queries into the middle of the// filler object. When such queries are done in parallel with// allocation, bad things can happen, if the query involves object// iteration. So we ensure that such queries do not involve object// iteration, by putting another filler object on the boundaries of// such queries. One such is the object spanning a parallel card// chunk boundary.// "chunk_boundary" is the address of the first chunk boundary less// than "hard_end".HeapWord* chunk_boundary =(HeapWord*)align_size_down(intptr_t(_hard_end-1), ChunkSizeInBytes);assert(chunk_boundary < _hard_end, "Or else above did not work.");assert(pointer_delta(_true_end, chunk_boundary) >= AlignmentReserve,"Consequence of last card handling above.");if (_top <= chunk_boundary) {assert(_true_end == _hard_end, "Invariant.");while (_top <= chunk_boundary) {assert(pointer_delta(_hard_end, chunk_boundary) >= AlignmentReserve,"Consequence of last card handling above.");_bt.BlockOffsetArray::alloc_block(chunk_boundary, _hard_end);CollectedHeap::fill_with_object(chunk_boundary, _hard_end);_hard_end = chunk_boundary;chunk_boundary -= ChunkSizeInWords;}_end = _hard_end - AlignmentReserve;assert(_top <= _end, "Invariant.");// Now reset the initial filler chunk so it doesn't overlap with// the one(s) inserted above.MemRegion new_filler(pre_top, _hard_end);fill_region_with_block(new_filler, false);}} else {_retained = false;invalidate();}} else {assert(!end_of_gc ||(!_retained && _true_end == _hard_end), "Checking.");}assert(_end <= _hard_end, "Invariant.");assert(_top < _end || _top == _hard_end, "Invariant"); }




總結

以上是生活随笔為你收集整理的openjdk(HOTSPOT)垃圾回收源码解读的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

gogo午夜高清免费摄影 | 日本激情网站 | 特级黄一级播放 | 成人福利视频在线观看 | 中文字幕 国产精品 | 日本午夜在线 | 欧美v日韩v国产v | 亚洲va久久久噜噜噜久久天堂 | 日韩成人午夜电影 | 日本看黄网站 | 欧美videos另类精品 | 欧美国产成人精品 | 婷婷五月情 | 麻豆成人av在线 | 9色视频在线观看 | 久久久不卡 | 同桌扒开我腿用震蛋器折磨我 | 午夜色场 | 裸体美女免费视频网站 | 免费看黄色的网址 | 欧美一区二区三区视频 | 欧美伊人精品成人久久综合97 | 日韩在线不卡 | 在线观看一区二区视频 | www视频在线看 | 99在线视频精品 | eeuss一区二区三区 | 日韩美女网 | 国产又爽又黄的激情精品视频 | 99久久婷婷国产精品综合 | 天堂伊人网 | 日本一区二区三区四区在线视频 | 欧美日韩一区二区不卡 | 欧美 亚洲 | 成人综合一区 | 欧美极品xxx | 久草五月天 | 美女自卫慰免费视频www免费 | 日韩一区二区三区视频在线 | 亚洲精品国产a久久久久久 在线激情网址 | 先锋av资源网 | 四虎国产精品成人免费影视 | 中文在线观看免费 | 谁有av网址 | 日韩 国产在线 | 在线观看国产麻豆 | 特级西西人体444www高清大胆 | 97视频在线看 | 日韩精选视频 | 日本大胆人体视频 | 在线1区| 黄色床戏视频 | 国产欧美精品国产国产专区 | 色婷婷一二三四 | 男人天堂社区 | 一区二区国产视频 | 欧美激情视频一区二区三区 | 浮力屁屁影院 | 欧美日韩在线一区 | 国模一二三区 | 国产寡妇色xxⅹ交肉视频 | 亚洲女同志亚洲女同女同 | 国产观看 | 午夜视频一区二区 | 裸体女网站 | 99久久99久久精品国产片桃花 | 日韩电影av在线 | 神马影院一区二区 | 精品亚洲一区二区三区四区五区 | 一区二区视频在线观看 | 欧美丰满老妇 | 欧美久久综合 | 筱田步美番号 | 欧美日韩性视频 | 看片黄网站 | 夜趣福利社 | 最新中文字幕av | 美女视频黄全免费 | 爆操白丝美女 | 两口子交换真实刺激高潮 | 午夜av电影院 | 亚洲激情中文字幕 | 狂野欧美激情性xxxx欧美 | 精品成人av| 中文字幕av网 | 亚洲乱码国产乱码精品精98午夜 | 亚洲电影 中文字幕 | 国产午夜精品在线 | 欧美一级片一区 | 成人在线免费视频 | 免费在线播放黄色 | 人与禽一级全黄 | 亚洲精品888 | 日韩视频免费观看 | 精品伦理一区二区 | 新婚之夜高潮hd | 瑟瑟视频免费看 | 免费国产又色又爽又黄的网站 | 乱亲女h秽乱长久久久 | 国模杨依粉嫩蝴蝶150p | 午夜欧美精品久久久久久久 | 成人午夜激情网 | 日韩av综合 | 日韩精品中文字幕在线播放 | 色妞在线| 一卡二卡三卡在线观看 | 欧美日韩免费视频 | 自拍毛片 | 成人黄色激情网 | 一区二区三区久久精品 | 中文字幕一级 | 中文字幕综合在线 | 日本色资源 | 制服丝袜电影av | 午夜性刺激免费看视频 | 中文字幕第一 | 亚洲视频a | 国产毛片av | 啪啪av大全导航福利 | 性高潮网站 | 亚洲色图 激情小说 | 精品国产乱码久久久久久久 | 日本一区二区在线 | www国产精品视频 | 国产乱码精品一区二区三区忘忧草 | 黄骗免费网站 | 天天爱夜夜爽 | 午夜视频国产 | 久久久精品国产一区二区三区 | 成人免费福利视频 | av成人资源网 | 中文字幕亚洲激情 | 亚洲精品ww久久久久久p站 | 麻豆网站免费在线观看 | 欧美在线观看一区二区 | 日韩av电影网址 | 国产乱淫av麻豆国产免费 | 最新av电影网 | 国产精品一区二区不卡 | 亚洲免费a | 午夜国产精品一区 | 色吊丝av中文字幕 | 色综合狠狠操 | 精品视频一区在线 | 91视频免费播放 | 自拍偷拍亚洲区 | 日日爽日日操 | 扩阴视频| av资源库 | 亚洲欧美日韩成人 | 色资源在线播放 | 欧美精产国品一二三区 | 色视频免费在线观看 | 男女搞黄网站 | 亚洲自拍偷拍二区 | 国产激情视频在线播放 | 国产欧美日韩综合精品一区二区 | 色xxx 在线播放 | 影音先锋 国产精品 | 69日本xxxxxxxxx59| 亚洲成人免费在线观看 | 国产精品人人做人人爽人人添 | 隔壁老王av| 欧美日韩一二区 | 国产激情99 | 色av网站在线 | 72种无遮挡啪啪的姿势 | 国产黄色成人av | 精品国产免费久久久久久尖叫 | 国产 日韩 一区 | av五月婷婷 | 日本高清视频在线 | feel性丰满白嫩嫩hd | 动漫av在线播放 | 欧美一级专区免费大片 | 久久久久久久久久国产精品 | 老鸭窝av在线 | 性刺激视频在线观看 | 97在线视频免费 | heyzo在线播放 | 国产精东传媒成人av电影 | 色婷婷激情综合 | 国产精品久久999 | 日韩在线观看免费网站 | 日韩三级在线 | 欧美综合国产 | 69中国xxxxxxxxx69 欧美成人午夜77777 | 久久伊人热 | 欧美极品少妇xxxxⅹ裸体艺术 | 成人在线视频一区 | 免费a网站| 三级网站视频 | 欧美日韩国产成人高清视频 | 欧美黑人激情 | 欧美 日韩 国产 在线 | 91亚洲国产成人精品一区二三 | 蜜桃视频在线网站 | 献给魔王伊伏洛基亚吧动漫在线观看 | 成人激情开心 | 奇米97| 日韩国产精品久久久久久亚洲 | 99国产在线观看 | 日本xx网站 | 中文字幕av免费观看 | 亚洲 欧美 日韩 国产综合 在线 | 影音先锋在线一区 | 国产精品日本精品 | 日剧网| 已满十八岁免费观看全集动漫 | 午夜伦伦电影理论片费看 | 欧美 日韩 国产在线 | 日韩少妇中文字幕 | 99免费精品 | 欧美激情综合色综合啪啪五月 | 翘臀美女后进啪图 | 日韩成人一区 | 黄色的网站免费在线观看 | 久久不射电影网 | 91麻豆国产福利精品 | 在线日本欧美 | 欧美精品资源 | 成人深夜视频 | 欧美成人午夜激情 | 日韩在线观看av | 欧洲丰满少妇做爰 | 青青免费视频 | 女性裸体不遮胸图片 | 欧美国产一区二区 | 好男人www社区在线视频夜恋 | 男人插女人网站 | 国产精品一二三在线 | 羞羞在线观看 | 91久色国产 | 国产精品一区二区久久久久 | 美女搞黄免费网站 | 破处av | 美女大胸视频网站 | 18女人毛片| 亚洲精品视频在线观看视频 | 91精品入口 | 91九色国产视频 | 萌白酱福利视频 | 黄色片网站免费观看 | 毛茸茸熟妇丰满张开腿呻吟性视频 | 国产精品视频永久免费播放 | 在线观看美女视频 | av黄色天堂 | 欧美日韩一级黄 | 神奇图书馆动画片免费观看完整版 | 欧美精品在线播放 | 成人精品一区二区三区电影黑人 | 欧美大片黄色 | 欧美黑人一级爽快片淫片高清 | 台湾av在线免费观看 | 国产成人无遮挡在线视频 | 成人在线视频网 | 日本黄色网页 | 国产 福利 在线 | 欧美日韩在线观看视频 | 久久九九电影 | 免费一级视频在线观看 | 久久久久在线观看 | 国产性―交一乱―色―情人 | 国产高清日韩欧美 | 四虎影院一区二区三区 | 影音先锋中文字幕在线 | 免费成人美女在线观看. | 成人动漫影音先锋 | 黄色片网站免费 | 免费在线观看av网 | 青色网 | 女生被艹在线观看 | 亚洲激情图片小说视频 | 福利视频一二区 | 国产精选在线观看 | 黄上黄在线观看 | 欧美一区二区三区免费看 | 欧美极品xxxx | 中文字幕一区在线观看 | av在线成人 | 久久久久久国产精品免费免费 | h网站免费在线观看 | 日韩精品2区 | 福利视频免费在线 | 午夜久久久久久久久久一区二区 | 欧美激情欧美激情在线五月 | 欧美精品黑人猛交高潮 | 不卡一区二区三区四区 | 色婷婷av一区二区三区软件 | 特大黑人巨交吊性xxxx视频 | 福利网站导航 | 91在线观看免费网站 | 性猛进少妇xxxx富婆 | 美女被艹视频网站 | 欧美亚洲激情视频 | 麻豆成人av在线 | 国产的av | 亚洲精品国产视频 | 亚洲精品电影在线 | 娇妻被老王脔到高潮失禁视频 | 欧美日韩一区二区视频在线观看 | 亚洲图色av | 午夜一区二区视频 | 亚洲精品美女久久 | 日本青青草视频 | 狠狠操一区 | 国产精品久久久久aaaa九色 | 久久精品视频一区二区三区 | 国产黑丝一区 | 欧美老少伦 | 一区二区精品在线观看 | 在线视频欧美一区 | 免费看的黄色的网站 | 精品国产欧美一区二区 | 久久人人爽人人爽人人片av高清 | 91麻豆精品久久久久蜜臀 | 99国产精品久久久久老师 | 亚洲精品成a人在线观看 | av电影资源网 | 枫花恋在线观看 | 欧美一级片在线播放 | 不卡一区视频 | 97视频在线免费观看 | 国产精品传媒视频 | 激情视频一区二区三区 | av在线网页 | 国产黄大片在线观看 | 中文字幕日本在线观看 | 欧美精品一本久久男人的天堂 | 先锋影音av网 | 一二三区视频 | 久久久久99 | 天天做天天摸天天爽天天爱 | 欧美大尺度电影在线观看 | 欧美激情视频免费观看 | 日韩资源 | 在线播放91 | 91高清免费视频 | 美女在线免费视频 | 国产极品在线视频 | av在线电影免费观看 | 精品国产老女人乱码 | 成人一级视频 | 青娱乐av | 亚洲一区二区精品在线 | 日本在线色视频 | 国产黄色大片在线观看 | 献给魔王伊伏洛基亚吧动漫在线观看 | 国产精品视屏 | 黑人影音先锋 | 欧美日韩一二三四五区 | 很黄的视频网站 | 制服.丝袜.亚洲.中文.综合 | 精选视频| 国产在线视频一区二区三区 | 久久91亚洲人成电影网站 | 久久九九99 | 亚洲 在线 | 导航福利导正品 | 午夜婷婷国产麻豆精品 | 涩涩av在线 | 97se亚洲国产综合在线 | 91豆花在线 | 精品国产91乱码一区二区三区 | 波多野结衣在线看 | 国产剧情久久久久久 | 精品久久久久久久久久久下田 | av中文字幕免费在线观看 | 亚洲性图久久 | 国产一区在线看 | 超碰人人在线 | 让人下面流水的视频 | 在线视频一区二区三区 | 日韩欧美视频在线 | 亚洲在线免费观看 | 国产黄色a | 香蕉久久一区二区不卡无毒影院 | 国产福利在线 | 天天躁狠狠躁狠狠躁夜夜躁68 | 日韩欧美在线一区二区三区 | 成人在线播放网站 | 日本波多野结衣在线观看 | 视频一区二区国产 | 亚洲成人精品在线 | 欧美激情一二三区 | 韩国精品一区二区 | 国产精品 亚洲一区二区三区 | 国产乱码精品一区二区三区五月婷 | 亚洲最新视频在线 | 亚洲欧美在线一区 | av激情网| 人人干人人草 | 我们好看的2018视频在线观看 | 国模妙妙超大尺度啪啪人体 | 亚洲精品中文字幕av | 找国产毛片看 | 很很草| av最新网址| 国产精品激情 | 综合久久精品 | av在线播放地址 | 大桥未久av在线 | 你懂的在线观看网站 | www.激情五月.com | 久久精品人人做 | 涩涩免费网站 | 亚洲成av人片一区二区 | 国产女人爽到高潮a毛片 | 69式图片| 国产三级精品在线 | 欧美精品在线视频观看 | 久久深夜福利 | 视频在线中文字幕 | 国产精品v一区二区三区 | 欧洲女同| 啪啪福利视频 | 蜜桃a∨噜噜一区二区三区 天堂视频免费在线 | 啪啪福利视频 | 丝袜制服亚洲色图 | 男生操女生的免费网站 | hd极品free性xxx护士 | 日韩久久久久久久久久久久久 | 美女露出让男生揉国产 | 国产女优一区 | 久久国产精品第一页 | 91久久精品网 | 亚洲国产一区二区a毛片 | 日韩久久久久久久久久久久久 | 啦啦啦视频在线观看 | 色网站在线免费 | 亚洲成人av一区二区 | 尤物视频免费观看 | 国产91一区二区三区 | 午夜国产精品一区 | 国产精品麻豆一区二区 | 女女爱爱视频 | 影音先锋中文字幕第一页 | 用白丝玉足帮我爽 | 日韩欧美一区在线 | 国产视频欧美 | 久久99视频 | 91超碰免费在线 | 精品三区视频 | 色视频在线播放 | 色偷偷av一区二区三区 | 美女隐私免费看 | av中文在线 | 国产视频资源在线观看 | 日韩电影 中文字幕 | 国产夜色精品一区二区av | 国产精品作爱 | 欧美日韩一区二区三区在线看 | 亚洲第一激情 | 免费插插视频 | 久久久精品黄色 | 97视频免费 | 中文字幕精品影院 | 黄色小视频在线观看免费 | 精品亚洲成a人在线观看 | 韩国欧美一区二区 | 国产伦子伦对白在线播放观看 | 日韩欧美一区二区三区四区 | 日本综合在线 | 免费亚洲视频 | 欧美亚洲免费 | 国产精品久久久乱弄 | 网站免费在线观看 | 97se亚洲 | 又色又爽又黄 | 巨乳美乳中文字幕 | 四虎影视免费看 | 天天插天天干天天操 | 色就是色网站 | 韩国av电影在线观看 | 中文毛片| 在线免费观看成人网 | 91毛片网 | 怡红院院一区二区 | 色播激情五月 | a级片毛片 | 国产xxxx视频 | 国产精品99999 | 久久久久999| 欧美激情自拍 | 射美女 | 一级黄色网| 男女精品网站 | av在线免费网 | 不卡的毛片 | 高h免费视频 | 美女日批免费视频 | 高清av网 | av理论电影 | 国产成人av一区二区三区在线观看 | 同人动漫在线观看 | 老女人激情 | 色天天干 | 日韩欧美一级二级 | 一本久中文字幕 | 国产视频一二三区 | 一起来看流星雨第三部 | 美日韩在线视频 | 超碰狠狠干 | 俄罗斯特级毛片 | 91精品国产综合久久香蕉 | 已满18岁免费观看电视连续剧 | 女人18毛片九区毛片在线 | 在线观看麻豆视频 | 漫画一区二区三区 | 黄色亚洲精品 | 国产伦精品一区二区三区视频免费 | 亚洲国产精品久久久久久 | 精品成a人在线观看 | 欧美激情女同 | 免费的黄色小视频 | 天堂中文在线观看 | 日韩美女免费线视频 | 在线免费看黄 | 小镇姑娘高清播放视频 | 日本中文字幕在线看 | 欧美操穴视频 | 国产精品久久久久久中文字 | 国产香蕉97碰碰久久人人 | 女人扒开屁股让我添 | 九九热精品视频在线观看 | 先锋影音av资源站 | 国产精品天美传媒 | 久久久国产精品一区 | 香蕉视频日本 | 一区二区三区精品视频在线 | 人人澡人人透人人爽 | 美女无遮挡网站 | 亚洲一区二区三区四区中文字幕 | 美女精品 | 日韩高清中文字幕 | 国产精品国产三级国产aⅴ9色 | 天堂网中文 | av在线亚洲一区 | 男女污污软件 | 国产精品免费一区二区 | 色偷偷人人澡人人爽人人模 | 18岁禁网站 | 视频一区二区三区在线 | 国产日韩欧美a | 91嫩草亚洲精品 | 国产黄色片在线免费观看 | 精品国产91久久久久久久妲己 | 麻豆av免费 | 91麻豆精品国产91久久久更新资源速度超快 | 免费a网 | av一本久道久久波多野结衣 | 深夜福利av在线 | 日日躁夜夜躁狠狠躁 | 久久久久伊人 | 日韩精品 电影一区 亚洲 | 久久嫩草精品久久久久 | 中文字幕欧美国产 | 久久久精品区 | 欧美边添边摸边做边爱免费 | 精品国产乱码久久久久久图片 | 亚洲成年人网站在线观看 | 日韩成人av电影 | 色综久久综合桃花网 | 色乱码一区二区三在线看 | 国偷自产av一区二区三区 | av在线播放网 | 豆花视频一区二区 | 成人性色生活片 | 欧美日韩国产精品一区 | 白浆在线播放 | 最新毛片网站 | 嫩艹视频 | 18视频网站在线观看 | 日本黄色一区二区 | 二区三区偷拍浴室洗澡视频 | 姬川优奈av一区二区在线电影 | 影音先锋伦理片 | 四川丰满少妇被弄到高潮 | 亚洲人成一区 | 天天躁日日躁狠狠很躁 | 亚洲欧洲精品在线观看 | 国产免费激情 | 青青青在线视频 | 亚洲成人黄色在线观看 | 久久久精品中文字幕麻豆发布 | 樱花动漫无圣光 | 自拍偷拍视频在线观看 | 久久久国产成人精品 | 国产黄色片在线观看 | 欧美不卡三区 | 91成人国产 | 精品一区二区国产 | 美女av免费看 | 色婷婷电影网 | 日韩一区二区三区av | 91亚洲精品久久久蜜桃网站 | 日韩在线视频二区 | a级黄色在线观看 | 国产精品久久久一区 | 国产网友自拍 | 麻豆蜜桃在线观看 | 亚洲精品大尺度 | 草莓av| 超碰精品在线观看 | 欧美国产乱视频 | 精品久久毛片 | 日韩三级视频在线看 | 久色一区 | 国产香蕉视频在线观看 | 国产精品三级 | 免费裸体视频女性 | 91亚洲国产成人精品一区二三 | 亚洲精品一区中文字幕乱码 | 操人免费视频 | 欧美在线视频免费 | 青青草免费观看视频 | 在线视频二区 | 久久久久国产一区二区三区 | 亚洲欧美中文日韩在线v日本 | 亚洲欧洲高清在线 | 亚洲影院免费 | 欧美日韩精品久久久免费观看 | 奇米影视狠狠 | 成人免费视频免费观看 | 成人免费在线网站 | 欧美精品乱码久久久久久按摩 | 在线天堂视频 | 又色又爽又黄的网站 | 国产精品不卡一区 | 午夜精品免费在线观看 | av一区二区不卡 | av日韩免费在线观看 | 国产精品丝袜高跟 | 天狂传说之巴啦啦小魔仙 | 夜夜操天天操 | 午夜影院在线播放 | 国产在线视频一区二区三区 | 国产中文字幕在线免费观看 | 这里只有精品99re | 男人天堂新 | 国产日本在线 | 五月天777 | 亚洲激情五月 | 国产视频在线观看免费 | 黄色网页在线免费观看 | 国产美日韩| 中文字幕日韩在线观看 | 在线观看国产精品91 | av成人动漫在线观看 | 欧美亚洲国产另类 | 老汉av影院| 另类av小说 | 欧美白人做受xxxx视频 | 色135综合网 | 蜜臀久久99精品久久久久久宅男 | 色七七桃花综合影院 | 狼人av在线| 四虎国产精品永久 | 久久成人亚洲 | 国产富婆一区二区三区 | 欧美a一区| 在线免费观看黄色片 | 日韩欧美综合在线 | 神马午夜在线视频 | 91婷婷韩国欧美一区二区 | 欧美一级二级三级视频 | 国产第一亚洲 | 成人美女在线观看 | 欧美成人免费 | av岬奈奈美一区二区三区 | 中文字幕一二三 | 日韩av二区 | 亚洲黄色区 | 国产最新在线观看 | 美女草逼视频 | 国产人免费人成免费视频 | 疯狂做受xxxx高潮欧美日本 | av一区二区在线看 | 中文字幕高清在线 | 亚洲福利视频二区 | 久久精品1 | 波多野视频在线 | a∨av白浆导航 | 在线日韩一区二区 | 亚洲美女视频一区 | 亚洲视频成人 | 精品伦精品一区二区三区视频 | 日韩女同互慰一区二区 | 萌白酱国产 | 四虎884aa成人精品 | 午夜av电影在线观看 | 日韩av中文字幕一区二区三区 | 国产日韩av一区 | 精品久久久久久久久中文字幕 | 中国老师69xxxx高清hd | 亚洲国产精品电影在线观看 | 日本亚洲欧美 | 欧美成人免费一级人片100 | 欧美国产精品 | 亚洲欧美丝袜 | 韩国伦理在线 | 亚洲成人自拍 | 欲色淫香| 欧美热逼| 久草资源 | 五月天婷婷在线视频 | 国产夫妻视频 | 男人操女人网址 | 成年人黄色在线观看 | 国产亚洲视频在线 | 在线观看h视频 | 51ⅴ精品国产91久久久久久 | 91高清网站 | 黄色美女av| 法国free嫩白的18sex性 | 免费 av 在线 | 男男互操视频网站 | 美女大胸视频网站 | 一区二区三区欧美在线 | 中文字幕欧美日韩精品 | 老熟妇毛片| 久草香蕉在线 | 91情侣在线视频 | 久久99九九 | 黄色永久免费网站 | 日韩综合网 | 大地资源二中文在线影视免费观看 | 日韩高清不卡av | 夜夜躁日日躁狠狠 | 在线成人黄色 | 国产在线观看一区 | 视频一区二区三区在线 | 亚洲国产精品久久久久婷婷老年 | 精品一区二区日本 | 亚洲超碰在线 | 不卡的av在线播放 | 日本一区二区三区在线视频 | 日本一区二区免费高清 | 黄网站免费观看视频 | 亚洲色中色| 国产污视频在线 | 草草视频免费观看18 | av福利在线播放 | 天天干夜夜爽 | 91麻豆福利 | 国产精品毛片久久久久久 | 十八岁世界在线观看高清免费韩剧 | 亚洲成人久久久久 | av大帝在线观看 | 午夜影院先 | 欧美123区 | 在线观看av中文字幕 | 麻豆视频网站在线观看 | 草莓视频app在线观看 | 免费观看av网站 | 开心激情久久 | 18+视频网站 | 激情久久五月 | 免费看黄禁片 | 欧美午夜久久 | а√天堂8资源在线官网 | 亚洲综合色成人 | 99热国产在线观看 | 精品久久久久久中文字幕 | 醉酒的老板gl漫画免费阅读全集 | 99精品偷自拍 | 欧美日产国产成人免费图片 | 中文av一区 | www.亚洲成人 | 欧美午夜寂寞影院 | 校园春色亚洲激情 | 精品国产一区探花在线观看 | 亚洲色大成网站www久久九九 | 丁香激情综合 | 91蜜臀 | 张筱雨一区二区 | 精品欧美一区二区三区 | 国产一区在线播放 | 亚洲精品20p | 欧美日韩一区,二区,三区,久久精品 | 国产免费小视频 | 免费看60分钟黄视频 | 国产www在线 | 亚洲综合中文 | av电影在线观看 | 无套爆插 | 香蕉久久99| 美日韩免费视频 | 亚洲精品网站在线播放gif | 深爱五月激情网 | 日韩精品免费视频 | 色妞在线综合亚洲欧美 | 免费97视频 | 婷婷综合激情 | 一区二区三区高清视频在线观看 | 日韩欧美二区三区 | 久久99精品久久久水蜜桃 | 希岛爱理av一区二区三区 | 亚洲三级免费观看 | 99国内精品久久久久久久 | 欧美成人一二三 | 国产人妖ts重口系列网站观看 | av资源每日更新 | 国内精品久久影院 | 亚洲欧美tv | 青青草视频免费看 | 久久天堂网站 | 欧美日韩成人精品 | 91热久久 | 狠狠操视频在线观看 | 日本在线精品 | 免费一级视频在线播放 | 成人精品网站在线观看 | 免费视频国产 | 国产在线女主播 | 福利色导航 | 91精品国产欧美一区二区成人 | 亚洲第一黄色网 | 伊人激情av一区二区三区 | 日本成人在线一区 | 国产精品伦一区二区三级视频 | 亚洲精品小视频 | 裸体 惩罚 拍击 打屁股 | 麻豆国产欧美日韩综合精品二区 | 91中文在线 | 国产ts人妖系列高潮 | 免费裸体视频女性 | 亚洲黄色av | 色婷婷一二三四 | 毛片视频网站 | 猎艳山村丰满少妇 | 欧美性xxxxx极品娇小 | 息与子猛烈交尾一区二区 | 操碰97| 欧美a精品 | 日韩精品在线免费观看视频 | 久久精品九九 | 伊人国产在线 | 欧美少妇激情 | 欧洲成人午夜免费大片 | 亚州精品天堂中文字幕 | 国产精品久久999 | 白石茉莉奈番号 | 久操资源| 国产日韩欧美中文 | 国内精品一区二区 | 国内外成人免费激情在线视频 | 美女国产视频 | 丰满放荡岳乱妇91www | 国产伦理一区二区三区 | 青娱乐精品在线视频 | 男男受被啪到高潮自述 | 欧亚av| 国产精品久久久久久婷婷天堂 | 美女被草出水 | 黄页在线观看免费 | 一级黄色免费 | 久久久久一区二区三区 | 隔壁老王国产在线精品 | 91久久久久久久久久 | 老司机精品视频在线 | 国产伦理久久久 | 成人h在线观看 | 狠狠操天天干 | 男欢女爱久石 | 她的花蒂道具调教1v1 | 亚洲成人欧美 | 日韩视频在线观看免费 | 国产一区二区久久久 | 香蕉av一区二区 | 免费在线播放黄色 | 天天色小说 | 人人综合网| 捆绑无遮挡打光屁股调教女仆 | av怡红院 | 福利在线免费观看 | 疯狂憋尿自拍失禁网站 | 国内精品在线播放 | 九九精品久久 | 亚洲国产精品视频 | 99久久免费国产 | 白虎av在线 | 伊人网精品 | 一区二区三区 视频 | 亚洲综合图片区 | 日本视频一区在线观看 | 日本一区视频在线观看 | 久久疯狂做爰流白浆xx | 国产精品日日摸夜夜摸av | 免费91在线观看 | 捆绑调教在线 | 国产最新视频在线 | 伊人影院在线播放 | 黑丝美女被草视频 | 欧美视频在线观看 | 色女人av| 制服丝袜中文字幕电影 | 亚洲欧美伊人 | 天天干天天操av | 爱情岛黄色 | 中文字幕 欧美 日韩 | 性调教视频 | 欧美在线日韩精品 | 亚洲天堂成人网 | 婷婷电影网 | 三上悠亚 电影 | 欧美精品久久久久久久 | 二区在线播放 | 国产精品果冻传媒潘 | 天天摸天天碰天天爽天天弄 | 国产农村妇女精品一区二区 | 98精品国产高清在线xxxx天堂 | 亚洲情侣在线 | av五十路 | 国产日韩一区 | a资源在线 | 亚洲中国色老太 | 高清欧美性猛交xxxx | 女女爱爱视频 | 欧美区一区二区三区 | 精品福利影院 | 亚洲成人精品视频在线观看 | 先锋啪啪 | 亚洲在线观看免费视频 | 国产成人精品午夜视频免费 | 伊人久久大香线蕉av一区 | 初恋视频污 | 日本男插女 | 日本精品久久久 | 就要草 | 日韩欧美亚洲国产精品字幕久久久 | 国产福利精品一区 | 超污巨黄的小短文 | 中文字幕第一区 | 欧美精品一区在线 | 欧美乱性| 精品久久国产字幕高潮 | 日本在线看片 | 色婷婷综合久久 | 天天爽天天操 | 午夜精品久久久久久久久久久久 | 亚洲午夜网| 亚洲开心激情网 | 日韩美女三级 | 久久久国产91 | 超高清av| 深爱激情综合网 | 超在线视频 | 成年人在线播放 | 麻豆国产一区 | 亚洲精品在线观看视频 | 成人午夜在线播放 | av天天在线| 美女日批免费视频 | 免费在线一区二区 | 国内自拍在线 | 色综合天天狠天天透天天伊人 | √天堂8资源中文在线 | av视在线| 桃色视频免费在线观看 | 国产理论片在线观看 | 国产一区二区三区久久 | 精彩视频一区二区三区 | 国产在线一区二 | 国产午夜三级 | 日韩三级成人 | 男女涩涩| 日韩欧美福利视频 | 欧美污网站| 韩国女主播一区二区 | 欧美久久免费观看 | 大片免费播放在线观看视频 | 91免费看片网站 | 久久伊人亚洲 | 免费黄色日本 | 九九国产精品视频 | 黄色av网页 | 日本欧美久久久久免费播放网 | av成人综合 | 日韩欧美日韩 | 中文字幕在线观看一区二区三区 | 在线永久免费观看黄网站 | 美女视频一区二区三区 | 电影午夜精品一区二区三区 | av电影不卡在线观看 | 国产高清在线免费 | 欧美激情片在线观看 | 日韩欧美视频一区二区 | 男人操女人下面 | 日韩国产精品久久 | 丰满少妇在线观看 | 岛国毛片在线播放 | 久久综合亚洲 | 日韩一页 | 国产男男网站 | 貂蝉被到爽流白浆在线观看 | 黄色小视频网页 | 免费的黄色网 | 亚洲色图 欧美 | 自拍视频国产 | 久久国产精品久久精品国产 | 国产精品福利一区二区三区 | 国产精品影音先锋 | 黄网在线观看免费 | 黄瓜色视频 | 国产探花在线精品一区二区 | 国产chinese中国hdxxxx| 欧美性理论片在线观看片免费 | 欧美男人操女人 | 人成在线播放 | 亚洲精品在线不卡 | 色偷偷偷偷偷 | 国产午夜视频 | 欧美色拍 | 在线看黄色av | 亚洲春色另类小说 | 综合色区偷拍 | av一本| 一级黄色在线 | 都市激情自拍偷拍 | 在线中文字幕第一页 | 亚洲综合日韩精品 | 国产精品电影一区二区三区 | 国产一二三视频 | 亚洲人一区 | 99re热这里只有精品视频 | 孕妇xxxxx孕交xxxxx | 99久久精品免费看国产免费软件 | 91在线免费网站 | av网在线 | 香蕉文化书免费阅读在线阅读 | 日本成人三级在线观看 | 男女污污网站 | 波多野结衣久久 | 国产成人免费 | av免费电影网站 | 在线导航福利 | 国产精品成人av性教育 | 韩国伦理大片 | 国产1区2区 | 和朋友一起3p娇妻高潮 | 日本国产一区二区三区 | 国产精品视频永久免费播放 | 日韩精品在线观看视频 | av男人天堂av | 午夜毛片视频 | 久久久久久久国产精品 | 草莓视频在线观看污 | 美女张开腿让男人操 | 欧洲精品亚洲精品 | 激情在线看 | 亚洲深夜福利在线 | 视频福利在线观看 | 亚洲大尺度视频在线观看 | 一区二区自拍 | 欧美jizzhd精品欧美18 | 亚洲国产精品久久精品怡红院 | 粉嫩av在线播放 | 国产精品国产精品国产专区蜜臀ah | 亚洲一区 中文字幕 | 看毛片网站| 日本成人在线网站 | 北条麻妃一区二区三区 | av在线免费不卡 | 免费成人高清在线视频 | av成人资源 | 美国少妇在线观看免费 | 性av网站| 中文字幕久久亚洲 | 欧美伊人精品成人久久综合97 | 久久亚洲精品国产亚洲老地址 | 色久综合视频 | 日韩久久久精品 | 精品久久国产字幕高潮 | 91国产丝袜在线播放 | 亚洲成人激情小说 | 欧美精品777| av大片在线 | 特级西西444www大精品视频 | 大香依人| 成av人在线观看 | 欧美色图天堂 | 欧美体内she精视频 av站长推荐 | 又黄又免费 | 男女污污视频在线观看 | 最好看的中文视频 | 精品国产91洋老外米糕 | 国产精品久久久久无码av | 久久综合狠狠综合 | 美女扒开粉嫩的尿囗给男生桶 | 欧美专区 在线 | 色综合网站在线 | 女人下部全棵看视频 | 先锋影音av资源网 | 国产黄网站 | 精品极品在线 | 国自产拍偷拍福利精品免费一 | 国产免费一区 | 国产激情一区二区三区四区 | 麻豆亚洲精品 | 日韩女优在线 | 久操视频在线播放 | 久久久伦理片 | 欧美 日本 在线 | 黄色小说视频在线 | 麻豆免费观看网站 | 大黑人交交护士xxxxhd | 91麻豆免费视频 | 在线免费观看黄色网址 | 人人爱人人草 | 在线观看视频99 | 91麻豆网站 | 韩日免费视频 | 成人亚洲免费 | 国产精品久久77777 | 日本少妇裸体大胆私密照片 | 在线视频 成人 | 香港三日本三级少妇66 | 国产成人亚洲精品狼色在线 | 自拍视频在线播放 | 天天操人人看 | 国产精品成人免费精品自在线观看 | 综合色站导航 | 一级片免费 | 特级毛片在线观看 | 精品视频在线免费 | 亚洲电影av在线 | aaa亚洲精品| 久久久久久亚洲精品杨幂换脸 | 国产主播精品在线 | 亚洲福利视频专区 | 中文字幕亚洲精品在线观看 | 色视频导航 | 国产伦子伦对白在线播放观看 | 久久aaa| 丝袜av一区 | 在线免费福利视频 | 欧美有码在线观看 | 姬川优奈av一区二区在线电影 | 丁香婷婷激情网 | 午夜两性 | 激情综合久久 | proumb性欧美在线观看 | 亚洲精品美女久久 | 最新中文字幕在线 | 午夜欧美精品久久久久久久 | 久草免费在线观看 | 99视频免费在线观看 | 美女扒开粉嫩的尿囗给男生桶 | 牧场另类重口videosex | 日本精品在线 | 欧美精品一区在线观看 | 俺也去噜噜噜噜色 | 性高潮视频在线观看 | 亚洲乱码一区二区三区 | 精品久久视频 | 色播五月婷婷 | 成人h黄小游戏在线玩 | 黄色网免费在线观看 | 四虎影视永久地址 | 青青草视频官网 | 成人午夜激情视频 | 亚洲砖区区免费 | 热久久国产精品 | 久久人人爽人人爽人人片av高清 | 日产精品久久久久久久性色 | 国产在线观看网站 | 亚洲午夜网| 成人精品亚洲人成在线 | 99久久国产综合精品麻豆 | 亚欧精品在线 | 宅男噜噜噜666在线观看 | 肉性天堂 | 青草视频网站 | 红桃视频成人在线 | 超碰在线免费公开 | 中文字幕日韩精品一区 | 色偷偷成人 | 成人福利在线视频 | 亚洲福利在线播放 | 手机av在线播放 | 久久精品无码一区二区三区 | 欧美专区视频 | 99中文字幕 | 美女扒开屁股让男人桶 | 一女被多男玩喷潮3p免费视频 | 美女国内精品自产拍在线播放 | 国产成人精品免高潮在线观看 | 女人与公拘交酡全过女免费 | 精品欧美一区二区久久 | 一区二区久久久久久 | 特级西西444www大胆免费看 | 国产亚洲在线播放 | 又色又爽 | 成人av电影在线观看 | 欧美亚洲一区二区在线观看 | 日本欧美在线视频 | 深夜网址 | 天天躁日日躁aaaaxxxx | 超薄肉色丝袜脚交一区二区 | 日韩区在线观看 | 在线观看小视频 | 国产亚洲字幕 | 靠逼网站 | 影音先锋中文字幕资源在线 | 亚洲 视频一区 | 国产日产欧美精品 | 国产精品国产自产拍高清av | 日韩欧美网 | 午夜电影网一区 | 国产视频二区在线观看 | 九九国产精品视频 | 色播丁香 | 精品久久久久久综合日本 | 欧美精品区| 黄色在线观看网址 | 欧美福利专区 | 欧美高清视频 | 国产一区二区三区久久久 | 蜜臀在线一区 | 九九亚洲精品 | 精品视频区 | 国产在线一区二区 | 成人77777 | 久久精品99国产精品日本 | 精品亚洲国产成av人片传媒 | 国产夫妻精品视频 | 日本女人性视频 | av高清不卡| 亚洲日本韩国一区 | 国产第一福利 | 在线免费色视频 | 深爱激情av | 小小姑娘电影大全免费播放 | 亚洲精品你懂的 | 成人av中文字幕 | 老熟妇午夜毛片一区二区三区 | 欧美美女视频在线观看 | 欧美激情自拍偷拍 | 亚洲另类xxxx | 在线综合亚洲 | 欧美黄色一区二区 | 看黄免费网站 | 欧美精品一区二区三区久久久 | 受虐m奴xxx在线观看 | 在线视频91 | 伊人欧美 | av在线综合网 | av一本| 日韩av偷拍| 四虎av在线| 亚洲精品一区二区三区中文字幕 | 制服丝袜中文字幕在线 | 在线亚洲免费视频 | 日日操夜夜| 很黄很色的视频 | 神马午夜伦理 | 日韩精品在线观看一区 | 老司机精品视频网 | 美女屁股网站 | 欧美一区二区三区四区在线观看地址 | 女同性做受全过程动图 | 久久69av | 亚洲一二三区精品 | 国产福利一区二区三区 | www.成人在线| 国产精品入口麻豆九色 | 丰满放荡岳乱妇呻吟视频 | 九色porny自拍视频 | 又黄又免费的视频 | 日本女人一区二区三区 | 精品一性一色一乱农村 | 欧美黄色网 | 亚洲色图 校园春色 | 一区二区日本 | 亚洲黄色网页 | 久久久久久久爱 | 在线观看色视频 | 国产 日韩 欧美 在线 | 一区二区成人精品 | 欧美精品一区二区久久婷婷 | 自拍黄色 | 99精品视频在线免费观看 | av导航网站 | 丝袜白浆 | 欧美影院久久 | 色丁香婷婷| 一二三四av| 久久99精品国产91久久来源 | 亚洲欧美中文日韩在线v日本 | 超碰人人搞 | 国产高清视频免费观看 | 樱花动漫无圣光 | 天天躁夜夜躁狠狠躁2022 | 一区二区三区视频在线 | 日韩免费中文 | 先锋影音国产一区 | 男人的天堂久久精品 | 美女试爆场恐怖电影在线观看 | 69**夜色精品国产69乱 | 日本护士又紧又爽水又多 | 在线看黄色网址 | 色香蕉在线视频 | 亚洲国产精品人人做人人爽 | 国产成人av电影 | 水中色av综合 | 男女高潮又爽又黄又无遮挡 | 国产欧美日本一区二区三区 | 亚州精品天堂中文字幕 | 国产亚洲一区二区精品 | 日韩视频一区二区三区在线播放免费观看 | 色cccwww永久免费 | 日本一级黄色 | 精品国产成人在线 | 四季av在线一区二区三区 | 自拍视频在线播放 | 大战肉丝少妇在线观看 | 日韩毛片中文字幕 | 午夜激情在线视频 | 色干综合| 久久国产日韩欧美 | 波多一区二区 | 日韩一区二区精品 | а√新版天堂资源中文8 | 亚洲一区中文字幕 | 91免费版黄 | 亚洲精选在线观看 | 日韩视频在线观看 | 亚洲欧洲精品成人久久奇米网 | 国精品一区二区 | 久久久久久久av | 国产精品天堂 | 黄色大片免费观看 | 日韩精品一区二区三区视频 | 中文字幕久精品免费视频 | 国产主播在线一区 | 国产人体视频 | 黑料网在线观看 | 免费视频一区二区 | 97超碰人人模人人人爽人人爱 | 午夜福利毛片 | 奇米一区二区 | 极品粉嫩国产48尤物在线播放 | 亚洲福利影视 | 91精彩视频在线观看 | 性感美女被爆操 | 亚洲精品免费av | 国内免费自拍视频 | av免费看片 | 北条麻妃久久精品 | 日韩成人中文字幕在线观看 | 韩国19禁床戏大尺度片 | 私人成片免费观看 | 色七七影院综合 | 麻豆精品国产 | 99色网 | 国产视频一区在线播放 | 国产精品伦子伦免费视频 | 欧美99p| 欧美色资源站 | 91精品一区二区三区久久久久久 | 国产精品v一区二区三区 | 亚洲男人第一网站 | av福利片| av网大全| 成人97| 欧美激情在线观看视频 | 国产激情一二三 | 免费成人高清在线视频 | 美女黄频网站 | 亚洲午夜一区 | 337p粉嫩大胆色噜噜噜噜 | 91精品在线观看视频 | 亚洲xxx自由成熟 | 伊人激情av一区二区三区 | 婷婷综合国产 | 97精品超碰一区二区三区 | 国产视频中文字幕 | 免费av不卡 | 男男抽搐高潮呻吟avgaytv | 精品区一区二区 | 男男成人高潮片免费网站 | 成人av在线播放网址 | 亚洲欧洲精品在线观看 | 国产精品xnxxcom| 亚洲精品中文字幕av | 瑟瑟视频免费看 | 精品国产乱码久久久久久108 | 91亚洲精华国产精华精华液 | 欧美日韩成人网 | 亚洲妇女av | 久久精品视频一区 | 午夜精品视频一区 | 欧美另类极品videosbest最新版本 | 久久五月激情 | 久久中文字幕一区二区 | 91亚洲一区| 少妇视频在线观看 | 国产a自拍 | 狠色综合 | 久久久丝袜 | 亚洲一区二区免费视频 | 中文字幕网站 | av在线短片 | 日韩高清三区 | 国产精品美女久久久久av超清 | 色偷偷超碰av人人做人人爽 | 国产在线看片 | 亚洲成人黄色影院 | 日本一级片免费看 | 最近中文字幕免费mv视频7 | av国产一区二区 | 超碰在线视屏 | 另类视频在线观看+1080p | 国产成人一区二区三区电影 | αv一区二区三区 | 国产多p混交群体交乱 | 黄色小说视频 | 黄色片视频免费 | 国产中文字幕av | 亚洲第一精品在线 | 男女插鸡视频 | 日本视频中文字幕 | 91成人在线视频 | 91国在线 | 欧美日韩激情一区二区三区 | 欧美高清性 | 无吗高清视频 | 91精品网| 蜜桃臀一区二区三区 | 中国老头性行为xxxx | 公车上的奶水 | 在线 亚洲 欧美 | 国产性猛交xxxⅹ交酡全过程 | 奇米影视777第四色 婷婷电影网 | 老妇做爰xxxxhd老少配 | 手机看片1024久久 | 亚洲午夜在线 | 波多野结衣乳巨码无在线观看 | 香蕉视频免费看 | 亚洲人成影院在线观看 | 少妇免费毛片久久久久久久久 | 9999久久久久 | 在线观看无遮挡 | 在线视频 日韩 | 亚洲国产精品va在线看黑人 | 影音先锋丝袜制服 | 91视频色 | av免费观看网址 | 美国产一级片 | www.在线看| 深夜福利av| 三级电影网址 | 不卡三区 | 久久婷婷影院 | 青青草十七色 | 欧美深夜影院 | www.夜夜撸.com | 丁香花五月 | 日韩在线观看av | gogo专业国模私拍大尺度 | 亚洲国产高清一区 | 成人免费在线视频网址 | 色视频免费在线观看 | 有码在线视频 | 夜夜操天天 | 另类欧美尿交 | 麻豆传媒在线免费 | 图片区乱熟图片区小说 | 国产精品一,二,三 | 精品国产不卡一区二区三区 | 韩国三级在线播放 | 久久久久久婷 | 亲子乱对白乱都乱了视频 | 日韩综合中文字幕 | 国产激情网 | 国产又大又黄视频 | 黄黄视频在线免费观看 | 久久av中文字幕 | 国产美女www爽爽爽视频 | 午夜啪啪av | 免费网站免费黄 | 青青国产视频 | 欧美精品一区二区三区蜜桃视频 | 懂色av一区二区夜夜嗨 | 成人欧美一区二区三区在线观看 | 亚洲精品美女视频 | аⅴ资源天堂资源库在线 | 黄色美女免费网站 | 日本在线一区二区三区 | 久久精品小视频 | 国产美女白浆 | 女生裸体无遮挡 | 精品久久免费看 | 久久色在线播放 | 好看的国产精品 | 成人久久一区二区三区 | 99国产精品一区二区 | 国产美女在线观看 | 国产精品一区二区在线看 | 顶级尤物极品女神福利视频 | 777色婷婷 | 久久国产精品一区二区 | 精品国产黑色丝袜高跟鞋 | 亚洲niry欣赏pics大全 | 久久综合色婷婷 | 成人自拍偷拍 | 日韩一区二区高清 | 美女福利影院 | 秒播福利视频 | 精品国产18久久久久久二百 | 18岁禁网站| 爆操一线天 | avhd101高清老司机 | 黄色av免费在线 | 又粗又大又黄又爽的免费视频 | 国产又爽又黄免费动画 | 国产精品国产三级国产三级人妇 | 美女搞黄视频在线观看 | 色视频免费在线 | 色妹子av | 久久久xxx| 天天久久夜夜 | 国产成人久久精品 | 亚洲成av人片 | 欧美日韩精品电影 | 4虎最新网址 | 日韩欧美国产高清 | 99久久99久久免费精品蜜臀 | 日本成人黄色片 | 激情视频激情小说 | 在线视频一区二区三区 | 色偷偷成人 | 黄色小说免费观看 | 亚洲精品一品区二品区三品区 | 男人操女人的软件 | 美女扒开尿口给男人看 | 亚洲小说欧美激情另类 | 成年美女黄网站色大免费视频 | 国产成人亚洲精品狼色在线 | 日韩专区 在线观看 | 久久精品一区二区三区av | 日韩一区二区电影在线观看 | 在线 日本 制服 中文 欧美 | 国内精品久久久久影院薰衣草 | 精品一区二区三区久久 | 337p日本欧洲亚洲大胆精品 | 成人动漫精品一区二区 | 草莓视频在线观看入口w | 精品久久久久久久久久久院品网 | 国产福利一区二区三区在线视频 | 87福利视频 | 午夜在线电影 | 欧美videosex性欧美黑吊 | 美腿丝袜亚洲综合 | 97碰在线观看 | 中文字幕在线观看免费高清 | 亚洲在线看 | 天堂a√中文在线 | 四虎永久免费在线观看 | 91精品91久久久中77777 | 色婷婷综合久久久久 | 久久欧美精品 | 午夜激情福利视频 | 中文字幕高清一区二区 | 欧美 日韩 国产 成人 在线观看 | 懂色av一区二区夜夜嗨 | 亚洲一区二区精品 | 国色天香av | 男女午夜视频在线观看 | 中文字幕xxxxx| 黄色小视频入口 | 日日操狠狠操 | 日韩素人 | av在线免费国产 | 五月婷av | 日本看片网 | 日韩色网| 黄色精品一区二区 | 欧美成aaa人片在线观看蜜臀 | 午夜影院在线观看18 | 国内外成人免费激情在线视频网站 | 成人福利网站在线观看11 | 日本毛片在线观看 | 在线欧美日韩精品 | 中文色av | 在线短视频 | 午夜精品久久久久久久男人的天堂 | 56porn在线视频 | 国产三级免费网站 | 精品国产乱码久久久久久1区2区 | 在线观看黄色av | 伊人成人激情 | 今天成全在线观看免费播放动漫 | 视频福利网 | av制服丝袜在线观看 | 美女扒开下面让男人捅 | 国产露脸91国语对白 | 好吊视频一区二区三区四区 | 最新地址av | 日韩av电影手机在线观看 | 中文字幕日韩av | 总裁边开会边做小娇妻h | 91亚洲精品久久久久久久久久久久 | 巴西丰满白嫩bbwbbw | 午夜视频99 | 欧美一级二级三级 | 国产视频福利 | 欧美日韩国产91 | 日本一级黄 | 国产网站久久 | 亚洲国产成人精品女人久久久 | 正在播放亚洲精品 | 国产在线播放91 | 国产精品毛片久久久久久久 | 日本黄色免费观看 | 色视频中文字幕 | 99久久伊人精品综合观看 | 美女脱光衣服让男人捅 | 日av一区| 99在线精品视频 | 国产在线视频在线观看 | 成人wwwww免费观看 | 免费在线观看的黄色 | 精品一区二区av | 人妖videosex高潮另类 | 国产又色又爽又刺激在线观看 | 久久综合av | 欧美性色a | 91精品国产99久久久久久 | 午夜视频一区二区 | 国产伦精品一区二区三区免费 | 亚洲不卡视频 | 国产成人精品久久 | 欧洲毛片视频 | 欧美精品乱码久久久久久 | 美女av毛片 | 色哟哟亚洲 | av亚州| 怡红院老司机 | 亚洲最新在线视频 | 美女污黄网站 | 免费操人视频 | 韩国黄色av | 欧美一区二区综合 | 黄色网页免费观看 | 日本精品不卡 | 亚洲免费av网站 | 青青草在线视频免费观看 | 红杏导航 | a天堂视频 | 岛国片在线免费观看 | 丝袜无内写真福利视频 | 波多野结衣一区二区三区 | 日韩成人免费电影 | 国产视频一区二区在线 | 欧美极品少妇xxxxⅹ裸体艺术 | 99国内精品 | 国产乱淫av一区二区三区 | 制服.丝袜.亚洲.另类.中文 | 国产白丝av | 欧美日韩国产激情 | 亚洲一区二区三区免费在线观看 | 久久高清一区 | 欧美一级色片 | 性——交——性——乱免费的 | 中文字幕在线网 | 高h少妇 | 亚洲大尺度| 欧美一区二区三区色 | 不卡中文av | 日本二区| 黄频在线免费观看 | 美女精品一区 | 国产精品久久久久av福利动漫 | 99re最新网址 | 黑帮大佬和我的三百六十五天 | 天堂中文网 | 天堂中文字幕免费一区 | 国产精品久久久久久久天堂第1集 | 国产午夜精品一区二区三区嫩草 | 阴蒂高潮大荫蒂毛茸茸 | 久久精品一区二区 | 久久在线91 | 婷婷色狠狠 | 国产黄色tv | 久久久精品免费 | 亚洲成人免费在线观看 | 亚洲精品456 | av电影在线网址 | 国产人妖ts重口系列网站观看 | 天海翼精品久久中文字幕 | 最新中文字幕在线资源 | 成人免费激情视频 | 激情免费 | 成人av二区 | 午夜av黄色 | 黄色国产网站 | 欧美激情亚洲自拍 | 韩国av电影网站 | 97久久精品 | 国产欧美中文字幕 | 色小说在线 | 精品五月天 | 欧美性猛交xxxx偷拍洗澡 | 美美女免费毛片 | 精品不卡一区二区三区 | 日韩性毛片 | 一本大道av伊人久久综合 | 麻豆精品在线 | 国产精品片 | 久久久免费精品视频 | 综合婷婷色 | 激情五月开心婷婷 | 中文字幕亚洲第一 | 国产美女啪啪 | 911精品国产一区二区在线 | 免费观看色 | 亚洲在线视频 | 7777精品伊人久久久大香线蕉超级流畅 | 色中色综合网 | 亚洲电影在线免费观看 | 亚洲区一区二 | 91在线视频网址 | 白虎无毛一线天 | 99在线精品视频在线观看 | 一级黄色大片网站 | 91久色国产 | 中文字幕精品av | 欧美午夜精品久久久久久孕妇 | 精品亚洲成a人在线观看 | 中文不卡在线 | 日本憋尿大量失禁丨vk | 亚洲欧美综合 | 色佬视频在线观看 | 国产精品久久久久久久小唯西川 | 日韩有码在线视频观看 | 99精品国产福利在线观看免费 | 在线成人免费视频 | 黄页网站在线 | 欧美精品1区2区 | 被多个强壮汉灌满精h | 国内精品久久久久影院薰衣草 | 91精品国产色综合久久久蜜香臀 | 被各种性器调教到哭vk | 特黄毛片在线观看 | 字幕网av | av解说在线观看 | 999在线免费观看视频 | 91嫩草在线视频 | av导航大全 | 一区二区三区在线视频播放 | 国产精品丝袜在线 | 免费看黄在线观看 | 亚洲精品乱码久久久久久黑人 | 毛茸茸free性熟hd | 久免费一级suv好看的国产 | 中文字幕在线第一页 | free性护士vidos猛交 | 在线观看黄色片 | av导航在线 | 午夜啊啊啊 | 网址你懂的在线观看 | 日韩成人在线看 | 亚洲成人精品一区 | 免费99视频| 影音先锋伊人 | 国产精品嫩草影院久久久 | 法国空姐在线观看视频 | 色撸撸在线 | 你懂得网站在线观看 | 自拍偷拍亚洲欧美日韩 | 激情中出 | 2021国产精品视频 | 国产麻豆视频一区二区 | 国产91精品一区二区绿帽 | 国产一区二区美女 | 高清不卡av | 自拍偷拍在线播放 | 精品视频久久久 | 99精品在线观看视频 | 久久精品噜噜噜成人av农村 | 五月天丁香综合久久国产 | 岛国成人毛片 | 香港三日本三级少妇66 | 亚洲色欲色欲www在线观看 | 天天操夜夜撸 | 欧美中文字幕一区二区 | 自拍视频在线 | 精品麻豆剧传媒av国产九九九 | 国产不卡在线一区 | 色愁久久 | 91视频精选| 国产在线视频一区二区三区 | 日韩av三级在线观看 | 大黑人交xxxxxhd性爽 | 黄色在线免费播放 | 欧洲av影院 | 国产黄色在线播放 | 美女啪啪免费视频 | 成人福利电影 | 一区二区三区精品视频在线 | 成人网av | 色伊人综合 | 美女被揉胸视频 | av在线看网站 | 国产精品视频999 | 亚洲成人免费影院 | 精品1区2区3区4区 | 亚洲女人被黑人巨大进入 | 国内精品福利 | 久久香蕉国产 | 欧美亚洲高清 | 成品短视频泡芙 | 强乱中文字幕在线 | 日韩精品免费在线视频 | 欧美精品一二 | 香蕉视频免费在线 | 免费一级欧美片在线观看 | 99自拍网| 日本不卡一二三区 | a级片在线免费观看 | 福利视频亚洲 | 亚洲高清资源 | 国产在线有码 | 精精国产xxxx视频在线 | 一区二区三区四区视频在线观看 | 大桥未久恸哭的女教师 | 脱女学生小内内摸了高潮 | 国产字幕侵犯亲女 | 久久综合色网 | 国产精品日韩在线观看 | 美女131爽爽爽 | 国内精品第一页 | 午夜播播 | 日日夜夜艹 | 樱桃视频入口在线观看网站 | 亚洲一区二区动漫 | 国产区视频 | 男生和女生靠逼视频 | 日本成人在线网站 | 天天av天天翘天天综合网 | 男人天堂a | 日韩欧美激情一区 | 成人欧美一区二区三区小说 | 亚洲第一中文字幕在线观看 | 欧美高清视频在线播放 | 黄色av中文字幕 | 孕妇被各种姿势c到高潮视频 | 一区二区国产精品 | 成人av高清在线 | 国产精品污网站 | 亚洲综合av一区二区三区 | 精品国产乱码久久久久久影片 | 91成人免费视频 | 国产精品91在线 | 美女被草出水 | 亚洲欧美福利视频 | 免费在线黄色网 | 蜜桃久久久| 久免费一级suv好看的国产 | 产乳奶汁h文1v1 | 福利一区二区在线观看 | 欧美有码视频 | 中文字幕一区二区三区在线播放 | 欧美日韩国产综合视频在线观看 | 国产成人精品亚洲777人妖 | 婷婷激情欧美 | 国产精品18久久久久久久久 | 米奇影音 | 美女被c出水 | 天天操天天草 | 99国产精品视频免费观看一公开 | 久久久久久久精 | 黄色中文字幕 | 亚洲狠狠 | 欧洲精品久久久 | 欧美午夜精品在线 | 日韩伦理中文字幕 | 欧美激情xxxx性bbbb | 五月激情中文字幕 | 懂色aⅴ精品一区二区三区蜜月 | 国产日韩专区 | 天天综合视频 | 精品第一页 | 国产成人+综合亚洲+天堂 | 日韩视频免费在线 | av在线免费观看的网站 | free性丰满69性欧美hd | av在线男人天堂 | 黄色免费看网站 | 最爽free大尺度人妖 | 激情小说 亚洲色图 | 国产精品一精品二精品三 | 玉女心经是什么意思 | 国产黄色片在线观看 | a级激情片 | 成人漫画网站 | 欧美 丝袜 自拍 制服 另类 | 欧美精品一区二区三区一线天视频 | 日本h在线 | 久久精品国产一区二区三区 | 女性向小h片资源在线观看 成人欧美日韩 | 最近中文字幕 | 性欧美又大又长又硬 | 亚洲一区二区三区中文字幕 | 色网站免费| 999视频| 国产视频一区不卡 | 国产成人精品一区二区三区福利 | 国产精品人成在线观看免费 | 欧美一区二区三区色 | 99国内精品久久久久久久软件 | 日韩欧美三级在线 | 日本欧美黄色 | 久久天堂色 | 国产精品免费观看在线 | 国产v精品 | 淫片网站 | 黑森林福利视频导航 | 一亲二脱三插 | 亚洲破处视频 | 三上悠亚激情av一区二区三区 | 国产在线观看免费网站 | av网址导航大全 | 国产精品中文字幕在线观看 | 欧美与黑人午夜性猛交久久久 | 黄av免费 | 免费99精品国产自在在线 | 樱花电影最新免费观看国语版 | 中国大陆高清aⅴ毛片 | 俄罗斯美女野外性行为 | 国产又大又黄视频 | 黄色a在线| 超碰97人人爱 | 香蕉久久网 | 黄网免费在线 | 国产成人精品一区二区三区四区 | 欧美亚洲另类久久综合 | 99成人精品 | 狠狠躁夜夜躁xxxxaaaa | 中文字幕av免费 | 日韩av在线导航 | 国产1区| 亚洲变态欧美另类捆绑 | 色中文综合| 一本到 | 91精品在线免费观看 | 国产精品美女久久久免费 | 成年男女免费视频网站 | 国产99视频在线观看 | 成年免费视频黄网站在线观看 | 欧美精品免费在线观看 | 国产999精品视频 | 久久久久久国产免费 | 午夜精品电影 | 伊人成综合 | 欧美巨猛xxxx猛交黑人97人 | 国产人妖一区 | 91天堂视频 | 欧美 视频 一区 | 中国女人毛片 | 91成品视频入口 | 天堂av.com | 91精品视频网 | 黄色网址在线免费观看 | 日韩一区二区电影在线 | 天堂成人av在线 | 国产精品色婷婷 | 成人免费毛片app | 午夜视频一区二区 | 成人久久av| 先锋资源在线观看中文字幕 | 精品亚洲二区 | 在线激情视频 | 欧美疯狂做受xxxx高潮 | 777色播| 打开每日更新在线观看 | 欧美做受高潮1 | 9.1人网站| 欧美性白人极品1819hd | 艹男人的日日夜夜 | 久久天堂网站 | 午夜不卡在线视频 | 被各种性器调教到哭vk | 美女扒开下面让男人捅 | 美女被c到爽 | 国产在线免费视频 | 在线观看黄色片 | 亚洲精品乱码久久久久久日本蜜臀 | 日韩欧美国产视频 | 国产日韩欧美精品 | 亚洲一区 在线播放 | 91高清无打码 | 久久精品人人做人人爽 | avtt在线播放 | 国产乱真实合集 | 亚洲欧美日韩视频一区 | 一级片在线免费看 | 国产伊人久久 | 麻豆免费在线观看 | 日韩精品专区 | 国产日韩欧美在线 | 91国内产香蕉 | 看片免费网址 | 亚洲欧美成aⅴ人在线观看 久久综合伊人77777 | 成 人 色综合 | 日韩不卡av | 青草久久视频 | 美女色黄网站 | 日本不卡免费高清视频 | 国产欧美精品一区二区三区 | 免费欧美视频 | 国产一区二区三区在线观看免费视频 | 欧洲女性下面有没有毛发 | 黄色的网站免费观看 | 丰满大乳奶做爰ⅹxx视频 | 国产亚洲一级 | 国产精品自拍一区 | 97色碰| 国内精品久久久久久 | 国产伊人网 | 日韩 欧美 亚洲 | 色婷婷在线观看视频 | 色婷婷综合成人 | 精品99久久久久久 | www在线观看免费视频 | 国产激情一二三区 | 91av看片 | 成年网站在线观看 | 亚洲激情影院 | 97色在线观看| 久久久久在线观看 | 日本午夜精品一区二区三区 | 日日夜夜精品网站 | 色哟哟国产在线 | 视频福利网站 | 欧美日本黄 | 欧美日韩精品一区 | 成人黄色漫画 | 亚洲国产精品福利 | 成年人视频在线观看视频 | 国产自约视频 | 青青在线观看视频 | 亚洲自拍av在线 | 免费观看成人鲁鲁鲁鲁鲁视频 | 97免费在线视频 | av一在线| 激情视频区 | 亚洲欧美另类国产 | 久久综合久色欧美综合狠狠 | 日韩av一区二区三区 | 国产破苞合集 magnet | 国产男男gay体育生白袜 | 亚洲制服av | 亚洲激情小视频 | 中文字幕亚洲国产 | 亚洲国产一区二区三区在线 | 亚洲一二三四在线观看 | 亚洲一区 在线视频 | 一本色道久久88综合日韩精品 | 色婷婷99| 五月婷婷综合网 | 在线观看sm| 中文字幕亚洲视频 | 精品日韩 | 91av免费看| 亚洲性精品 | 国产成人精品久久二区二区91 | 好看的国产精品视频 | 亚洲国产精品女人久久久 | 一边摸上面一边摸下面 | 涩涩涩涩涩涩涩涩涩涩 | 蘑菇福利视频一区播放 | 黑人巨大精品欧美一区二区奶水 | 国产片一区二区 | 亚洲午夜av在线 | 国产伦精品一区二区三区精品视频 | 日本中文字幕高清 | 日本国产视频 | 国产伦精品一区二区三区照片91 | 欧美另类综合 | 国产插插视频 | 另类激情视频 | 日日操日日干 | 四虎毛片 | 日日摸夜夜添夜夜添精品视频 | 四虎成人在线视频 | 国产伦精品一区二区三区四区免费 | 黄色影音 | 亚洲免费色视频 | 玩日本老头很兴奋xxxx | 日韩精品中文字幕在线 | 亚洲在线欧美 | 色婷婷精品国产一区二区三区 | av观看网站| 免费在线国产 | 天堂影院一区二区 | 日韩精品视频网站 | av高清在线观看 | 高清av不卡 | 麻豆av一区 | 激情网站在线观看 | 调教丝袜美女 | 中国国语农村大片 | 中文字幕欧美专区 | 免费看的黄色av | av白浆 | 爱情交叉点 | 午夜色影院 | 性情中人中文网 | 日韩精选在线 | 日韩精品免费电影 | 依人99 | 亚洲www啪成人一区二区麻豆 | 第四色7777| 日本三级黄色录像 | 青青自拍视频 | 97在线视频国产 | 亚洲成人黄色在线 | 桃花岛亚洲 | 色愁愁久久 | 日韩在线观看免费网站 | 大奶av | 欧美激情亚洲激情 | 免费黄视频在线观看 | 亚洲手机视频 | 国产欧美一二三区 | 日韩av影片在线观看 | 成年人看的黄色 | 久久成人免费电影 | 一本大道综合伊人精品热热 | 超91在线 | 国产91久久婷婷一区二区 | 国产欧美一二三区 | 91九色pron| 日韩av资源 | 91视频免费在线 | 美女警花被强糟蹋三级无减 | 99re6这里只有精品 | 伊人222成人综合网 国产成人精品免费网站 | 亚洲区小说区图片区qvod按摩 | 美女av免费 | 国产91免费观看 | 黄色成人在线播放 | 亚洲精品黄色 | 免费成人高清在线视频 | 你懂的午夜在线视频 | 国产高清在线观看 | 亚洲123区 | 俺也去在线 | 日韩在线视频网站 | sm调教室论坛首页入口 | 99视频免费在线观看 | 欧美二区在线播放 | 欧美日一区二区三区 | 欧美日韩成人激情 | 一区二区三区精品视频在线观看 | 欧美三日本三级少妇三2023 | 少妇名器的沉沦 | 日本黄色美女 | 色婷婷综合中文久久一本 | 福利一区在线观看 | 欧洲色在线 | 欧美丝袜高跟秘书xxxx | 男生和女生一起差差差视频 | 日本伦理片在线看 | 黄色免费网站网址 | 182国产在线观看 | 国产精品a久久久久 | 波多野结衣在线观看一区二区 | 娇小的粉嫩xxx极品 视频福利在线 | 亚洲精品在线不卡 | 中国少妇色 | 日本人妖网站 | 日韩欧美在线国产 | 久久成人av网站 | 欧美精品一区在线观看 | 68精品久久久久久欧美 | 日韩毛片中文字幕 | 亚洲欧美精品一区二区 | 人妖粗暴刺激videos呻吟 | 不卡一区二区三区四区 | 久久99精品国产.久久久久久 | 日韩一区二区三区三四区视频在线观看 | 国产精品电影在线观看 | 欧美激情精品久久久久久大尺度 | 性高潮视频在线观看 | 日韩欧美中文字幕在线播放 | 亚洲一区二区三区自拍 | 欧美日本视频在线 | 欧美日韩成人在线播放 | 国产精品户外野外 | 五月婷婷激情五月 | 久久精品视频免费观看 | 久久久久久九九 | 欧美一区二区国产 | 老熟女毛茸茸 | 欧美精品乱码久久久久久 | 国产网站你懂得 | 男女私大尺度视频 | 自拍天堂偷拍 | 乌有乡网站手机版昆仑策 | 久草福利在线播放 | 亚洲区av | 在线播放日韩 | 天天狠狠| 少妇无内裤下蹲露大唇视频 | 欧美中文字幕精品 | 五月四房| 成人国产在线观看 | 国模妙妙超大尺度啪啪人体 | 国产精品高潮呻吟久久av野狼 | 麻豆午夜视频 | 乳色吐息在线看 | 三上悠亚陪上司出差被要了在线 | 五月天在线观看 | 亚洲午夜精品久久久久久app | 亚洲日本aⅴ片在线观看香蕉 | 亚洲色图日韩 | 一区二区在线视频播放 | 狠狠网站| 91九色老女人 | 影音先锋中文字幕在线 | 综合影院 | 国产在线观看 | 久久久久免费视频 | 亚洲一区二区不卡视频 | 国产九九九九 | 可以在线看的av网站 | 黄色av网址大全 | 偷拍色图 | 欧美在线在线 | 91碰碰| 国产男男chinese gay | 青娱乐精品| 黄色91在线观看 | 免费三片60分钟 | 香蕉久久夜色精品 | 欧美国产黄 | a毛片在线播放 | 久久久一二三 | 亚洲免费在线播放 | 91精品久久香蕉国产线看观看 | 国产成人高清在线 | 国产女性无套 | 亚洲美女在线看 | 国精品一区 | 大尺度摸揉捏胸床戏视频 | 成人伦理在线 | 中文字幕久久一区 | av基地在线观看 | 草莓巧克力香氛动漫的观看方法 | 亚洲最新av | 99re热精品 | 午夜成人免费电影 | 97超碰97| 亚洲国产精品99久久 | 麻豆精品视频在线观看免费 | 波多野结衣1区2区3区 | 天天操中文字幕 | 亚洲激情第一页 | 亚洲成人观看 | 中文字幕亚洲综合久久菠萝蜜 | 99在线热播精品免费 | 黄色亚洲精品 | 人人看人人爽 | 免费在线成人网 | 成人在线观看网站 | 91精品一区二区三区久久久久久 | 影音先锋 成人 | 国产麻豆午夜三级精品 | 亚洲一区 在线播放 | 色片在线观看 | 免费看黄色漫画 | 色交爽视频 | 家庭午夜影院 | 日日操天天操 | 国产精彩在线视频 | 久久精品国语 | 日韩午夜激情视频 | 中文www新版资源在线 | 亚洲午夜伦理 | 国产精品麻豆网站 | 亚洲综合五月天 | 国产美女在线直播 | 福利社午夜影院 | 女紧缚捆绑丨vk | 中文字幕在线看高清电影 | 丝袜在线一区 | 国产美女白浆 | 紧缚捆绑精品一区二区 | 亚洲乱码一区二区三区在线观看 | 色午夜婷婷 | 美国大片网| 尤物在线精品 | 久草福利资源 | 91色乱码一区二区三区 | 国内精品伊人久久 | 一区二区不卡在线 | 亚洲精品网站在线观看 | 成年人福利网站 | 亚洲欧洲在线视频 | 国产视频第一页在线观看 | 2022国产精品 | 夜夜嗨av一区二区三区 | 欧美精品18 | 亚洲在线资源 | 欧美一区二区三区视频在线观看 | 99国产精品99久久久久久粉嫩 | 婷婷亚洲五月色综合 | 国产又粗又猛又黄又爽 | 欧美在线观看一区二区三区 | 成人永久在线 | 欧美午夜激情视频 | 国产午夜精品久久久久久免费视 | 亚洲一区中文字幕在线观看 | 不卡av在线免费观看 | 玉女心经在线看 | 激情文学综合丁香 | 天堂8av| 日韩av你懂的 | 欧美在线播放 | 裸胸动漫 | h片在线免费观看 | 91精品国产综合久久香蕉922 | 日韩欧美aⅴ综合网站发布 永久视频在线观看 | 无人在线观看高清视频 单曲 | 国产啊v在线观看 | av网站大全在线免费观看 | 人人澡人人透人人爽 | 国产精品jizz在线观看老狼 | 日本黄色网址大全 | 尤物啪啪 | 欧美日韩激情一区二区 | 日本久久一区二区 | 国产成人精品影视 | 亚洲www啪成人一区二区麻豆 | 天堂中文在线资源观看 | 欧美日韩精品一区二区 | 欧美成人激情在线 | 欧美一区二区三区视频在线 | 骚狐网站 | 性久久久久 | 91在线观看免费高清 | 激情视频亚洲 | 国产综合欧美 | 亚欧av在线 | 精品久久久久亚洲 | 性欧美xxxx | 亚洲激情专区 | 九色porny91 | 毛片综合 | 欧美在线视屏 | 免费成人深夜 | 黄色成人av| 日本高清免费中文字幕 | 日日夜夜亚洲精品 | 蜜臀av麻豆 | 精品久久精品久久 | 国产免费观看av | 激情网站在线播放 | 国产私拍视频 | 国产区一区二区三区 | 老司机精品视频导航 | 性高潮久久久久久久久 | 视频国产一区 | 放荡的我们 电影 | 美女靠逼视频网站 | 亚洲麻豆 | 成人av二区 | 欧美片子| 欧美日韩网站 | 成人av资源在线 | 先锋资源网av | 特级黄一级播放 | 国产在线日本 | 欧美精品一区二区三区久久久 | 亚洲乱码一区二区 | 日本欧美一二三区 | 初撮り五十路妻 | 亚洲成人性视频 | 337p粉嫩日本亚洲大胆 | 免费的av网址 | 欧美成人video | 精品久久久久久久久中文字幕 | 午夜激情在线播放 | 男女深夜网站 | av黄在线| 欧洲另类一二三四区 | 久久色成人 | 国产精品一区二区av | 国产白丝在线观看 | 成人福利网站在线观看11 | 91丨九色丨丰满人妖 | 高清不卡一区二区三区 | 韩国欧美一区二区 | 亚洲一二三区视频在线观看 | 亚洲电影一区二区 | 在线免费看a爱片 | 九色丨porny丨自拍视频 | 69精品在线 | 天堂中文资源在线观看 | 欧美成人三区 | 青青草97国产精品麻豆 | 浪漫樱花动漫在线观看免费 | 91在线高清免费观看 | 9l视频自拍蝌蚪9l视频成人 | 99在线观看视频 | 天堂中文在线视频 | 天天干天天操天天 | 亚洲精品一区二区三区婷婷月 | 亚洲成人av一区二区三区 | 中文字幕观看 | 欧美日韩中 | 久久久久久国产免费 | 国产精品三级在线 | 国产美女永久免费无遮挡 | 热热色中文字幕 | 中文字幕日韩精品有码视频 | 91国产中文字幕 | 91视频论坛 | 亚洲精品视频在线观看视频 | 亚洲国产婷婷香蕉久久久久久 | 国产免费av电影 | 国产亚洲va综合人人澡精品 | 精品国产高清在线观看 | 国产传媒在线观看 | 日韩免费高清在线观看 | 国产欧美亚洲一区 | 国产91丝袜在线播放 | 色呦呦精品 | 国产传媒中文字幕 | 国产做受高潮动漫 | 144144朝鲜族网站 | 中文字幕不卡的av | av伊人久久 | 免费黄网站在线播放 | 午夜电影一区二区 | 日韩欧美自拍 | 天天草天天射 | 五月天校园春色 | 亚洲精品免费电影 | 亚洲免费一区二区 | 深夜福利精品 | 国产 日韩 一区 | 久久久精品国产 | 91精品久久香蕉国产线看观看 | 久久久久久久久电影 | 美女张开双腿让男人捅 | 欧美精品中文字幕一区二区 | 国产精品久久久99 | 超薄丝袜足j好爽在线 | 特级大胆西西4444人体 | 色偷偷男人| 春色www在线视频观看 | 亚洲激情中文字幕 | 影音先锋成人资源 | 国产高清在线免费观看 | 动漫美女扣逼 | 男插女在线观看 | 无遮挡无掩盖网站 | 久久精品五月 | 欧美a高清 | 亚洲欧美另类久久久精品2019 | 久久天堂av | 日本精品免费一区二区三区 | 亚洲一区av | 国产精品69久久久久 | 日一日操一操 | 五月综合激情 | 国产精品系列在线观看 | 夜色av性色av | 国产福利在线免费 | 久久av网站 | 女人裸体免费视频 | 欧美一级做a | 日韩一区二区三区视频在线观看 | 日韩高清一区在线 | 男人的天堂视频 | 日本r级电影在线观看 | 樱花视频在线观看 | 欧美a级理论片 | 亚洲在线资源 | 欧美日韩不卡合集视频 | 国产三级免费网站 | 美女精品久久久 | 亚洲国产综合在线看不卡 | 精品一区二区三区国产 | av先锋资源在线 | 欧美日韩一区二区三区不卡视频 | 97av在线视频| 羞羞的视频网站 | 欧美理论在线观看 | 岛国av毛片 | 国产成人在线网站 | 成人av亚洲 | 色综合久久99| sm母狗调教视频 | 91成人免费在线观看 | 99视频网站 | 国产精品探花在线观看 | 成人av一区二区三区 | 日韩中文字幕在线 | 成人国产精品免费观看动漫 | 欧美浪妇xxxx高跟鞋交 | 久久福利精品 | 最新国产在线拍揄自揄视频 | 亚洲永久在线观看 | 国产欧美精品久久久 | 欧美激情第9页 | 成人三级视频在线观看 | 亚洲图区一区 | 91极品视觉盛宴 | 日韩av一区二区三区四区 | 亚洲在线免费看 | 精品国产一区二区三区日日嗨 | 国产男女无套在线播放 | 韩国日本美国免费毛片 | 18网站在线看 | 国产成人99久久亚洲综合精品 | 97精品视频在线 | 一区二区三区视频 | 亚洲视频在线二区 | 久久天堂网 | 久久久精品欧美 | 五十路老熟道中出在线播放 | 亚洲第一电影网 | 大乳巨せい乳ねんのしょうじょ | 黄色片在线观看网址 | 老女人性生活视频 | 国产精品自拍网站 | 好吊色av| 不卡av网 | 中文在线√天堂 | 一区免费在线 | 好看的毛片网站 | 91精品久久久久久综合五月天 | 久久aⅴ乱码一区二区三区 午夜免费大片 | 日韩成人黄色av | 伊人久久大香线蕉综合热线 | 成人自拍视频网 | 色综合天天综合网国产成人网 | 我们好看的2018视频在线观看 | 全球中文成人在线 | 中文字幕自拍 | 精品免费在线观看 | 成人av图片| 色基地| 中文字幕999| 日韩一区二区三区精品视频 | 美女一区二区视频 | 女人高潮娇喘声mp3 午夜在线你懂的 | 黄色免费网 | 日日躁天天躁狠狠躁 | 色多多污| 韩国黄色一级片 | 久久久蜜桃一区二区人 | 国产精品18久久久久久麻辣 | 国产色悠悠 | 激情久久综合 | 大奶av在线 | 久久久久久久波多野高潮日日 | 久久视频这里只有精品 | 欧美极品xxx | 欧美少妇xxxx| a√天堂在线 | 99日韩| 久久婷五月 | 四虎精品成人免费网站 | 日韩亚洲在线观看 | 韩国美女主播娇喘乳奶摇 | 国产欧美一区二区精品忘忧草 | 国产精品aaa | 中文字幕在线不卡视频 | 影音先锋制服 | 精品动漫一区二区 | 国产视频在线免费观看 | 美国大片网 | 国产国语videosex另类 | 狠狠干五月 | 欧美成人一区二区三区在线观看 | 午夜国产视频 | 女人高潮被爽到呻吟在线观看 | 91成人网在线 | 在线免费观看国产视频 | 韩国漫画成人 | 边被c边被打屁股高潮视频 日本一区二区免费在线观看视频 | 免费小视频在线观看 | 看片片| 一区二区三区在线免费视频 | 久久久受www免费人成 | 国产在线精品一区二区 | 欧美日韩美女在线 | 国产区视频在线观看 | 丁香狠狠 | 亚洲女人天堂视频 | 日韩三区四区 | 欧美亚洲在线播放 | 久久99精品久久久久久琪琪 | 裸胸动漫 | 97超碰.com | 天天干婷婷 | 人人爽久久涩噜噜噜网站 | 成人爱爱视频 | 国产精品影院在线观看 | 天天色天天射综合网 | 草莓av| 日韩欧美在线视频 | 美女av毛片| 极品少妇xxxx精品少妇 | 成人欧美视频在线 | 人人视频精品 | 亚洲丝袜中文 | 欧美亚洲激情 | 国产黄色大片免费看 | 日韩av免费大片 | 成人激情视频网 | 亚洲国产精品嫩草影院 | 野花国产精品入口 | 日韩精品中文在线观看 | 男女黄床上色视频免费的软件 | 欧美肥臀大乳一区二区免费视频 | 亚洲 精品 综合 | 亚洲免费网址 | 国产免费脚交足视频在线观看 | 推特裸体gay猛交gay | 国产高清在线 | 桃色一区二区三区 | 五月天婷婷基地 | 色综合高清 | 国产精品aaaa| 久久精品免费电影 | 国产黑丝在线观看 | 国产亚洲精品久久久久婷婷瑜伽 | 日本一区二区精品视频 | 超清av在线| 亚洲国产福利在线 | 久久精品午夜一区二区福利 | 欧美国产极品 | 四虎成人网 | 国产精品美女www爽爽爽 | 国产精品久久久久久久久免费高清 | 欧美精品一区二区久久久 | 欧美理论视频 | 日韩激情网站 | gogo西西人体大尺度大胆喷水 | 欧美1区2区 | 4hu最新网址 | 91久久精品在线 | 女王人厕视频2ⅴk | 亚洲va欧美va天堂v国产综合 | 一区二区三区四区av | 在线国产视频观看 | 午夜激情一区 | 日韩美女激情视频 | 久操伊人 | 欧美激情91 | 日本瑟瑟网站 | 涩涩视频网站在线观看 | 久久99热这里只有精品 | 福利片一区 | 国产精品欧美日韩 | 欧美日韩精品一区二区三区四区 | 97成人在线视频 | 老版k8经典电影 | 亚洲高清网站 | 把高贵美妇调教成玩物 | 国产精品调教 | 超碰在线免费公开 | 伊人影院在线播放 | 黄片毛片av | 国产成人精品久久二区二区91 | 天天干天天插 | 在线视频 福利 | 欧美老女人在线视频 | 国产精品电影在线观看 | 97超视频 | 黄色小视频免费网站 | 黄色导航在线 | 欧洲精品亚洲精品 | 黄色大片网站在线观看 | 中文字幕一区二区三三 | 欧美精品做受xxx性少妇 | 国产大秀视频 | 超碰男人| 中文字幕久精品免费视频 | 992tv在线成人免费观看 | 国产一区二区日韩精品 | 性做久久久久久免费观看 | 国产精品视频播放 | 国产专区一区二区 | 精品性高朝久久久久久久 | 美女让男生桶 | 欧美日韩性视频 | 国产精品一区二区三区久久久 | 久久久国产一区二区 | 国产精品视频在线免费观看 | 亚洲一区二区免费在线观看 | 可以免费看av的网址 | 亚洲国产精品一区二区第一页 | 色香欲 | 在线播放不卡 | 国产一区二区观看 | 麻酥酥在线播放 | 一区二区成人精品 | 日本一二三不卡 | 欧美成人精品一区二区 | 欧美性猛烈粗大精品 | 亚洲精品美女久久 | 秋霞午夜鲁丝一区二区老狼 | 亚洲激情视频在线 | 超碰免费91 | 亚洲一区二区三区精品视频 | 国产农村妇女毛片精品久久 | 三级精品视频 | 91精品在线国产 | 亚洲欧美v | 成人免费毛片片v | 一区二区三区亚洲 | 都市激情第一页 | 国产又粗又黄 | 日韩高清av在线 | 婴尸在线观看免费高清恐怖 | 动漫av一区| 成人自拍网 | 十八岁世界在线观看高清免费韩剧 | 男女互操 | 91国视频 | 骚虎黄色影院 | 影音先锋国产精品 | 国产在线观看免费 | 91免费在线视频观看 | 6080福利视频 | 青青草视频官网 | 葵司免费一区二区三区四区五区 | 国产成人精品视频在线观看 | 欧洲精品视频在线播放 | 国产精品一区二区久久久 | 老司机电影网你懂的视频 | 天天爽天天 | 国产福利一区二区三区 | 四虎成人在线视频 | 久久成人资源 | 欧美激情第五页 | 瑟瑟网站在线观看 | 婷婷亚洲精品 | 欧美日韩在线免费视频 | 豆花视频在线 | 风间由美一区二区 | 校园激情av | 欧美一区二区日韩 | 国产精品成人一区二区三区夜夜夜 | 久久久九九九九 | www欧美在线观看 | 真实的国产乱xxxx在线 | 国产传媒欧美日韩 | 亚洲片国产一区一级在线观看 | 91亚洲精品久久久久久久久久久久 | 免费黄网在线 | 国产精品久久久久天堂 | 黄色小说在线观看免费 | 国产精品一区二区三区不卡 | 亚洲一区二区中文字幕 | 黄色的网站免费看 | 国产精品bbbbxxxx | 精品中文字幕视频 | 麻豆精品精华液 | 国产主播第一页 | 国产精品久久久久久一区二区三区 | 久久精品一区二区三区中文字幕 | 九色在线视频 | 99伊人 | 美女福利视频在线观看 | 97久久精品人人爽人人爽蜜臀 | 欧美一区电影 | 日韩精品视频一区二区三区 | 成人在线免费观看91 | 亚洲区 欧美区 | 老司机免费精品视频 | 亚洲成av人片一区二区三区 | 久久亚洲综合色 | 欧美特黄 | 日韩精选在线 | 黑人导航 | 日韩视频一区二区三区 | 亚洲欧美日韩国产一区 | 久久久久久69 | 狠狠干b | 模特的欲望在线观看 | 欧美高清在线播放 | 中文字幕在线观看 无需下载 | av小说在线观看 | 免费观看av毛片 | 日韩美女一区二区三区四区 | 四川丰满少妇被弄到高潮 | www奇米影视com | 粉嫩av一区二区三区 | 日本另类视频 | 欧美在线视频一区 | 日本男人天堂网 | 欧美精品一区二区三区一线天视频 | 久久综合色88 | 欧美成人久久久 | 亚洲伦理自拍 | 色图18p | 4kfree性满足欧美hd18 | 美女露尿口网站 | 波多野吉衣一区 | 青青草视频播放 | 久久性感美女视频 | 国产在线剧情 | av一二三区 | 91极品美女 | 岛国精品一区二区 | 国产精品自拍一区 | 久久亚洲精品视频 | 欧美成人精品 | 欧美videosex性欧美黑吊 | 欧美偷拍视频 | 亚洲五月六月 | 日韩中文在线视频 | 狠狠中文字幕 | 欧美黑人猛交 | 一区二区三区精品在线视频 | 一区二区三区在线播放 | 亚洲sss视频 | 久久久久亚洲精品国产 | 法国空姐电影在线观看 | 久久九九99 | 中文字幕一区在线 | 欧美成人精品在线观看 | 少妇肥臀大白屁股高清 | 中文字幕乱码av | 亚洲最大的成人网 | 欧美人与性禽动交精品 | 国产精品一区二区久久不卡 | 国产精品 你懂的 | 秋霞在线观看av | 精品免费在线 | 99精品一区二区三区 | 影音先锋丝袜制服 | 国产最新视频在线观看 | 久久午夜电影网 | 玖玖玖精品| 偷拍欧洲美女 | 欧美极品美女视频网站在线观看免费 | 国产免费a| 用我的手指扰乱你 | 九九热99久久久国产盗摄 | 日批视频免费 | 久久久视频在线 | 国产乱码精品一区二区三区中文 | 国产精品美女久久久久久 | 91精品国产99 | 伊人久久一区 | 亚洲国产日韩一区二区 | 毛片视频在线免费观看 | 国产在线视频在线观看 | av性网| 色多多在线看 | 精品一区二区在线视频 | 日韩综合一区二区三区 | 在线观看一区 | 欧美激情一级精品国产 | 亚洲三级免费观看 | 99精品综合 | 免费小视频在线观看 | 一区二区三区中文字幕在线观看 | 污视频在线免费观看 | 欧美一区网站 | 亚洲性久久 | 国产一区在线观看视频 | 日本久久久久久久久久久 | 中文久久| 国产精品igao视频 | 美女一区二区三区 | 欧美黄色免费网站 | 一级片在线免费观看 | 国精品一区二区 | 女生脱下裤子让男生操 | 国产精品99久久久久久久vr | 亚洲免费观看高清在线观看 | 岛国免费av| 92精品国产成人观看免费 | 国产超碰人人爽人人做人人爱 | 69精品人人人人 | 国精品一区 | 少妇一级淫片免费看 | 2019最新中文字幕 | 91麻豆精品久久久久蜜臀 | 六月丁香婷婷久久 | 超碰人人在线 | 善良的少妇伦理bd中字 | 国产成人自拍网 | 色频在线| 久久99精品久久久水蜜桃 | 韩国毛片在线 | 天堂影院一区二区 | 男男全肉变态重口高h | 日韩精品极品 | 日韩免费一区二区 | 成人激情在线观看 | 亚洲国产精品久久久久久 | 性欧美videos| 国产精品欧美久久久久一区二区 | 高清精品在线 | 91免费在线视频观看 | 黄色亚洲精品 | 99re6在线精品视频免费播放 | 午夜精品久久久久久久男人的天堂 | 久久天堂网 | 动漫美女扣逼 | 成 人色 网 站 欧美大片在线观看 | 欧美日韩国产激情 | 青青草原成人 | 精品久久不卡 | 欧洲视频一区二区三区 | 日韩精品免费一区二区三区 | 亚洲国产成人在线 | 国产激情网| 国产精品成人免费精品自在线观看 | 欧美人成在线视频 | 蜜臀av在线播放一区二区三区 | 波多野结衣中文一区 | 国产精品美女免费看 | 精品麻豆剧传媒av国产九九九 | 理论视频在线 | 亚洲精品666 | 激情欧美亚洲 | 久久免费电影 | 精品少妇3p| 国产精品久久久久一区二区三区 | 少妇一边呻吟一边说使劲视频 | 国产精品视频999 | 欧美日韩成人精品 | 外国毛片 | 黄页在线观看 | 奇米四色中文字幕 | 免费看黄色大片 | 久久国产一区二区 | 谁有av网址| 国产精品一区麻豆 | 国产午夜精品久久久久久久 | 欧美18—19sex性hd| 一本一本久久a久久精品牛牛影视 | 日本人の夫妇交换 | 欧美激情视频一区二区 | 欧美精品18 | 免费av资源网 | 成人av综合在线 | 色综合高清 | 男生操女生的免费网站 | 高黄视频网站 | 亚洲五月综合 | 国产欧美日韩精品在线观看 | 福利视频黄色 | 欧美在线色 | 污污视频在线播放 | 日韩黄色欧美 | 国产伦精品免费视频 | 18网站在线 | 桃色激情网 | 丁香色婷婷 | 国产精品一二三四五 | 影音先锋在线中文资源 | av不卡免费看 | 韩国精品久久久 | 精品成人在线观看 | a在线一区 | 欧美一二三四五区 | 欧美激情一区二区三级高清视频 | 91麻豆福利 | 亚洲第一黄色 | 91国内产香蕉 | 影音先锋99 | 日韩黄色网址 | 中日韩av电影 | 性色av一区二区三区免费 | 色播丁香 | 亚洲成人教育av | 国产一区二区日韩 | 潘金莲三级80分钟 | 欧美日韩在线播放一区 | 国产精品久久久久久亚洲调教 | 美女插插视频 | 欧美群妇大交群中文字幕 | 国产精品99久久久久 | 风间由美一区二区av101 | 视频在线观看免费高清完整版在线观看 | 桃色视频在线 | 成人开心激情 | 第四色首页 | sm调教羞耻姿势图片 | 麻豆视频在线观看免费网站 | 一区二区三区欧美在线观看 | 久久午夜影视 | 牛牛精品视频在线 | 裸体在线| 在线看中文字幕 | 天天色成人 | 黄色av一级| 自拍视频在线观看 | 国产精品3 | 日本中文字幕网 | 成人免费网视频 | 亚洲欧洲在线看 | 日韩精品在线观看一区 | 国产伦精品免费视频 | 国产精品久久九九 | 97在线观看免费高清 | 在线观看av免费 | 欧美激情一区二区久久久 | 成年人视频在线观看免费 | 国产精品自拍视频 | 性高湖久久久久久久久 | 国产一级性生活视频 | 成人欧美一区二区三区黑人孕妇 | 可以直接看av的网址 | 在线观看www | 在线观看中文字幕不卡 | 久久精品视频免费 | 五月天开心网 | 美女视频毛片 | 精品美女一区二区 | 婷婷激情四射 | 91九色最新地址 | 二区三区在线 | 亚洲一区二区精品 | 国产porn在线| 视频在线 | 亚洲精品一区二区三区蜜桃久 | 亚洲精品久久久久中文字幕二区 | 丰满双乳秘书被老板狂揉捏 | 欧洲av一区二区 | 欧美日韩成人一区二区三区 | 亚洲人一区 | free性zozo交体内谢hd | 日韩av小说| 国产有码在线 | 亚洲美女福利视频网站 | 久久99精品久久久久婷婷 | 伊人久久男人天堂 | 能直接看av的网站 | 99国产精品久久久久久久久久久 | 亚洲 欧美 变态 国产 另类 | 美女脱下裤子让男人捅 | 极度诱惑香港电影完整 | 成人免费黄色网 | 欧美日本色图 | 91免费网站 | av中文字幕国产 | 国产精品理论片 | 中文字幕自拍vr一区二区三区 | 日本一区二区三区在线观看 | 亚洲精品美女久久久 | 色香蕉网站 | 欧美视频 日韩视频 | 国产作爱网站 | 岛国一区二区在线观看 | 偷拍第一页 | 伊人国产在线 | 亚洲第一男人天堂 | 日本一区免费 | 麻豆国产一区二区三区四区 | 天海翼一区二区 | 天天射夜夜 | 99看片 | 亚洲精品免费在线观看 | 国产精品xxxx | 亚洲欧美韩国 | 久久亚洲精品一区二区 | 国产区亚洲区欧美区 | 老汉色av| 福利视频在线免费观看 | 亚洲一区二区三区色 | 亚洲人成电影在线 | 精品视频在线导航 | 手机电影在线观看 | 黄网在线观看免费 | 精品久久久久久久久久久下田 | 国产女优在线视频 | 影音先锋蜜桃 | 日本三级在线视频 | 美女写真福利视频 | 日本欧美国产 | 欧美日韩免费一区二区三区 | 在线观看中文字幕亚洲 | 不卡的av影片 | 乌有乡网站手机版昆仑策 | www一区二区三区 | 欧美日韩在线一区二区 | 韩日精品中文字幕 | 性色网站| 色视频在线免费观看 | 美女被娇喘流出白 | 日韩黄色在线免费观看 | av线上免费观看 | 国产主播一区 | 国产亚洲精品中文字幕 | 日韩激情视频在线观看 | 日韩毛片在线免费观看 | 手机在线一区二区三区 | 亚洲乱码一区av黑人高潮 | 99日韩| 第一色网站 | 日韩一区二区视频在线观看 | 婷婷九月| 办公室摸腿吻胸激情视频 | 国内精品视频一区 | 1区2区3区在线观看 色网在线视频 | 国产小视频在线免费观看 | 日本韩国毛片 | 毛片视频免费 | 国产区在线 | 日本人妖在线 | 精品日韩在线 | 欧美日韩一区二区三区视频 | 涩涩视频在线观看 | 亚洲伊人av| 亚洲国产成人在线视频 | 欧美日韩国产一级 | 一级片在线免费观看 | 日本中文字幕在线视频 | 久久久精品免费观看 | 五月激情中文字幕 | 天天综合网91 | 欧美性受xxxx白人性爽 | 国产精品欧美一区二区三区奶水 | 国产福利网站 | 黄色精品视频网站 | 亚洲精选91| 国产 亚洲 欧洲 | 动漫美女扒开衣服揉她的胸乳 | 免费在线观看毛片视频 | 日韩三级影片在线观看 | 美女脱光衣服让男人桶 | 91同城在线观看 | 毛利兰被扒开腿做同人漫画 | 精品视频日韩 | 在线中文视频 | 欧美一区二区视频免费观看 | 日韩一区二区三 | 欧美色性| 老公吃小头头视频免费观看 | 老司机免费视频 | 色网免费观看 | 日韩精品在线网站 | 麻豆av电影| 日韩精品视频观看 | 岛国成人毛片 | 日韩激情一区 | 中文一区二区视频 | 北条麻妃一区二区三区 | 国产精品自在在线 | 亚洲天堂精品在线观看 | 成品人片a91观看入口888 | 波波野结衣 | 亚洲网站视频 | 免费成人在线网站 | 国产98视频在线观看 | 激情小说 亚洲色图 | 波多野结衣高清电影 | 第一av福利 | 91免费看国产 | 国产又大又黄又粗 | 福利在线看 | 日韩黄色网 | 中国老师69xxxx高清hd | 美女三级黄色 | 伊人精品综合 | 亚洲午夜精品一区,二区,三区 | 欧美成人免费网 | 国产欧美一区二区三区在线 | 亚洲在线观看视频网站 | 美女在线一区 | 宅男深夜视频 | 成人美女在线观看 | 台湾佬美性中文娱乐 | 自拍偷拍亚洲激情 | 国产 日韩 欧美 中文 在线播放 | 日日碰日日操 | 欧美美女18p| 国产成人tv | 日韩av小说 | 精品日韩一区二区 | av怡红院| 日韩久久免费视频 | 久久精品小视频 | 国产精品免费久久久久 | 你懂的在线观看视频网站 | 男男 军人 gay xx 呻吟 | 免费搞黄网站 | 91极品视频在线 | 精品在线你懂的 | 久久精品国产99精品国产亚洲性色 | 在线看你懂 | 国产制服丝袜一区 | 欧美综合国产精品久久丁香 | 日韩黄色视屏 | 亚洲日本一区二区 | 蜜桃精品一区二区三区 | 欧美12--15处交性娇小 | 日韩小视频在线 | 美女扒开腿免费视频 | 亚洲成人网上 | 最新中文字幕在线资源 | 人妖被c到高潮欧美gay | 色呦呦网站在线观看 | 亚洲美女又黄又爽在线观看 | av另类 | 亚洲gay视频 | 国产精华一区二区三区 | 北条麻妃av电影在线观看 | 国产精品久久久久久久小唯西川 | 综合久久亚洲 | 少妇激情一区二区三区视频 | 欧美日韩免费高清 | 日韩精品中文字幕在线播放 | 97超碰在线播放 | 男生和女生差差视频 | 老女人性生活视频 | 欧美123区| 国产精品国产馆在线真实露脸 | 少妇视频在线播放 | 在线视频 一区 二区 | 久久久精品一区二区 | 欧美肥臀大乳一区二区免费视频 | 日韩美女一区二区三区四区 | 免费在线观看成人 | 亚洲国产精品系列 | 色欧美综合 | 欧美性xxxxx极品少妇 | 91久久视频 | 黄色国产网站在线观看 | 精品伦理一区二区三区 | 国产在线你懂得 | 色97在线 | 中文字幕免费在线看 | 日韩久久色 | 蜜桃av最新网址 | 婷婷色网站 | 成人欧美一区二区三区黑人免费 | 国产麻豆视频 | 美女操人视频 | 午夜精品在线观看 | 日韩av影片在线观看 | 色婷婷久久久久swag精品 | 日韩欧美aⅴ综合网站发布 永久视频在线观看 | 五月天婷婷综合 | 国产绿帽视频 | 亚洲v日韩v综合v精品v | 葵司av电影| 国产高清免费在线播放 | 欧美人在线| 国产精品99久久久久久人 | 中文字幕高清在线观看 | 91黄色国产视频 | 国产三级高清在线 | 九九热精品视频在线观看 | 日韩在线视频一区二区三区 | 日韩美女在线 | 日韩欧美中字 | 91一区在线观看 | 日韩精品电影在线观看 | 天堂成人av在线 | 欧美壮男野外gaytube | 国产精选在线 | 亚洲 精品 综合 精品 自拍 | av毛片| 中文字幕日韩av | 美女私密视频网站 | 日本一区二区免费在线观看视频 | 肉色丝袜脚交一区二区 | 日韩欧美在线中文字幕 | 成人精品影视 | 亚洲综合久久久 | 性综艺节目av在线播放 | 亚洲精品免费一区二区三区 | 激情视频网站 | 青青草免费在线视频 | 亚洲 自拍 另类小说综合图区 | 国产精品免费一区 | 超碰伊人 | 亚洲二区av | 99精品欧美一区二区三区小说 | 国产精品自拍偷拍视频 | 红桃视频在线播放 | 久久www免费人成精品 | 午夜国产福利 | 2019中文在线观看 | 成人免费黄色 | 韩国三色电费2024免费吗怎么看 | 淫辱的世界(调教sm)by | 国产精品黄色在线观看 | 国产日韩在线看 | 老司机免费视频久久 | 深爱激情站 | 欧美国产一二三区 | 亚洲伊人精品酒店 | 久久疯狂做爰流白浆xx | 色福利视频 | 五十路六十路七十路熟婆 | 午夜两性色| 西野翔中文久久精品字幕 | 天天爱天天操天天射 | 国产一级黄色电影 | 国产激情在线观看 | 精品一区二区久久 | 白丝女仆被免费网站 | 1024视频污 | av在线亚洲天堂 | 久久综合九色欧美狠狠 | 久久手机免费视频 | 91欧美大片| 日本三级久久 | 亚洲精精品 | 无遮挡的裸体按摩的视频 | 国产在线观看网站 | 日本后进式猛烈xx00动态图 | 国产亚洲视频在线 | 日韩欧美一区二区视频 | 美女网站视频一区 | 日韩欧美精品在线 | 天天摸天天做天天爽 | 精品视频一区三区九区 | 日韩一区二区免费视频 | 国产一级精品在线 | 亚洲三级久久久 | 亚洲欧美日韩一区二区在线 | 久久久久久av | 亚洲国产精品系列 | 青青青视频在线 | 国产精品www色诱视频 | 欧美天堂在线观看 | 日韩精品中文字幕在线 | 日韩一级免费 | 日韩美女网| 午夜视频在线免费 | 国产精品一区免费观看 | 日韩精品在线免费观看视频 | 日韩色视频在线观看 | 四虎影视4hu4虎成人 | 中午字幕av | 大地资源在线观看免费高清版粤语 | 青青草草视频 | 亚洲一卡二卡三卡四卡 | 国产精品一区二区久久久 | 亚洲国产激情 | 精品日韩一区二区 | 欧美另类交人妖 | 精品一区二区国产 | 日韩 欧美 | 亚洲成人av在线播放 | 老司机精品久久 | 日韩免费高清视频 | 二区三区不卡 | 黄色片在线观看网址 | 国产日韩欧美视频在线 | 日韩视频免费大全中文字幕 | 久草av资源| 中文字幕亚洲综合久久 | 日韩精品影片 | 日韩av视屏 | 未满18岁禁看视频 | 国产精品porn | 亚洲第一在线视频 | 成人精品福利 | 精品少妇一区二区三区视频免付费 | 国产在线极品 | 精品国免费一区二区三区 | 啪啪全程无遮挡 | av综合在线播放 | 四虎久久免费 | 搞黄网站免费看 | 亚洲精品一区二区三区精华液 | 日韩欧美在线观看一区二区三区 | 亚洲国产精品网站 | 国产精品自在 | 五月婷av| 欧美激情一二三区 | 女人高潮视频网站 | 日本美女一区二区三区 | 在线观看欧美视频 | 懂色av.com| 欧美日韩一区二区三区在线视频 | 在线看毛片的网站 | 主人惩罚尿奴裸体尿孔 | 天天av天天爽 | 亚洲三级免费 | 欧美精品一二三四 | 亚洲国产精品成人va在线观看 | 欧美cccc极品丰满hd | 午夜视频观看 | 国产午夜电影在线观看 | 玖玖在线| 黄色网址在线免费观看 | 美女张开腿露出尿口 | 国产香蕉久久精品综合网 | 制服丝袜一区 | 女同一区二区三区 | 黑寡妇4免费完整在线观看 国产在线1 | 亚洲精品裸体 | 亚洲一区二区三区免费视频 | 俺去俺来也在线www色官网 | 亚洲伊人影院 | 免费av在线网站 | 国产a毛片 | 国产国语videosex另类 | 全部免费毛片在线播放网站 | 色综网| 国产网址 | 欧美 国产 一区 二区 | 在线免费观看黄色 | 韩国欧美一区二区 | 欧美人妖ⅹxxx极品另类 | 一区二区三区免费观看 | 成年人看片网站 | 国产做受69高潮 | 国产日韩欧美日韩 | 香蕉久久夜色精品 | 欧美视频你懂的 | 黄色的网站在线播放 | 婷婷色综 | 九九热视频这里只有精品 | 成人自拍视频在线观看 | 国产www精品 | 欧美日韩1234 | 福利小视频在线观看 | 日韩av电影免费观看高清 | 狠狠干综合 | 黑巨人与欧美精品一区 | 一区二区三区在线视频免费观看 | 日韩欧美h | 一区二区日本 | 日韩激情视频网站 | 中文字幕在线亚洲精品 | 99久久精品一区二区成人 | 蜜臀av性久久久久av蜜臀妖精 | 91麻豆精品国产自产在线观看一区 | 久久 国产 尿 小便 嘘嘘 | 国产一级免费视频 | 五月天男人天堂 | 黄色av网址在线观看 | 精品国产一区探花在线观看 | 国内外成人在线视频 | 国产噜噜噜噜久久久久久久久 | 日韩福利视频在线观看 | 色偷偷免费费视频在线 | 中国女人毛茸茸 | 四虎影视永久免费观看 | 日韩a级大片| 国产精品v一区二区三区 | 97超级碰碰碰久久久 | 九九久久成人 | 黄色天堂 | 欧美videos另类精品 | 高潮毛片无遮挡 | 中文字幕亚洲一区在线观看 | 手机看片日韩 | 国模精品视频一区二区 | 九色porny自拍视频 | 九九亚洲视频 | 香蕉网在线观看 | 日韩午夜中文字幕 | 黄色免费网站在线看 | 国产91精品久久久久久久网曝门 | 91免费精品 | 色图自拍 | 男生吃女生的胸视频 | 成人午夜网址 | 精品亚洲国产成人av制服丝袜 | 97视频免费看 | 亚洲资源在线 | 亚洲第一福利网 | 午夜黄色一级片 | 在线免费黄色片 | av资源网址 | 欧美视频一区二区三区 | 欧洲美女性视频 | 一边搓奶一边摸下面太爽了 | 日本大白屁股 | 在线免费观看日本视频 | 黄色成人在线 | 91网站在线播放 | 国产在线观看免费视频今夜 | 日本一二三区在线视频 | 中文字幕 亚洲 欧美 | 国产白浆在线 | 91香蕉国产在线观看软件 | 最近中文字幕在线视频1 | 精品国产一区二区三区在线观看 | 国产九九精品视频 | 久久在线电影 | 天堂av一区二区三区 | 韩国三色电费2024免费吗多少钱 | av在线资源网站 | 国产裸体无遮挡网站 | 欧美性在线观看 | 国产成人精品视频在线观看 | 性亚洲hd | 国产视频高清在线观看 | 亚洲三级视频在线观看 | 亚洲另类色综合网站 | 黄色片av在线 | 久久久久久久久国产精品 | 五月天婷婷在线播放 | 色婷婷激情 | 欧美日韩一区二区三区四区五区 | 蜜臂av | 国产欧美精品一区二区 | 91禁国产 | 亚洲人成在线观看 | 五月天激情综合 | 黄色小视频在线看 | 色窝av| 免费观看xxx在线观看下载 | 91精品国产日韩91久久久久久 | 青青草这里只有精品 | 亚洲五月 | 国产欧美一区二区精品性 | 久久久久久亚洲精品中文字幕 | 豆花视频一区二区 | 亚洲国产视频一区 | 男女互操av | www.夜夜撸.com | 一级片免费在线观看 | 日韩一卡二卡三卡四卡 | 又黄又爽的视频在线观看 | 四房激情 | 综合av在线 | 免费av激情 | 不卡的av | 永久免费看mv网站入口亚洲 | 99re这里只有精品首页 | 三区精品视频 | 欧美男插女 | 国产黄色一区 | 美女bbw嘘嘘嘘看个够 | 懂色av一区二区夜夜嗨 | 熟女体下毛毛黑森林 | 激情视频网站在线观看 | 夜夜嗨av一区二区三区四季av | 福利av在线| 欧美三级视频在线播放 | 抱着老师的嫩臀猛然挺进视频 | 麻豆视频入口 | 在线免费观看av网站 | 黄色网址av | 国产精品13p| 国产女主播av | 自拍偷拍电影 | 亚洲天堂2014| 久久久精品欧美 | 日韩天天综合 | 粉嫩av一区二区三区免费观看 | bbw在线视频| 色中文字幕 | 欧美一级视频 | 亚洲一区二区三区在线看 | 国产精品亚洲综合 | 国产精品久久久久久久小唯西川 | 国产精品18hdxxxⅹ在线 | 禁漫天堂导航 | 在线免费观看的av | 天天久久夜夜 | 日韩一区中文字幕 | 最新不卡av| 欧美三日本三级少妇三99 | 欧美日韩成人综合 | 韩国av电影网站 | 中文字幕日本一区二区 | 精品久久中文字幕 | 国产成人精品久久亚洲高清不卡 | 国产亚州av | 国产成人福利网站 | 亚洲 自拍 另类小说综合图区 | 夜夜嗨av | 九色最新| 蜜臀av性久久久久蜜臀aⅴ | 中文字幕视频在线观看 | 一级日韩 | 久久精品视频在线 | 欧美一级高清免费播放 | 免费一级欧美片在线播放 | 国产欧美成人 | 91精品国产99久久久久久红楼 | 欧美 日韩 亚洲 丝袜 制服 | 国产精品人人爽人人做我的可爱 | 日韩精品第一区 | 在线国产观看 | 日韩成人激情在线 | 一区二区在线观看手机影院 | 日韩在线观看成人 | 国产在线观看免费播放 | 亚洲精品国产精品乱码不99 | 97视频| 亚洲大尺度视频在线观看 | 国产成人小视频在线观看 | 久久av免费观看 | 视频在线一区 | 男人晚上看的网址 | 超级砰砰砰97免费观看最新一期 | 欧美日韩性生活视频 | 狠狠操狠狠爱 | 亚洲国产一区二区a毛片 | 老汉色老汉首页av亚洲 | 亚洲日本欧美 | 韩日毛片| 日美av在线 | 夜夜撸 | 日精品一区二区 | 女同黄文 | 欧美综合天天夜夜久久 | 这里只有精品99re | 国精产品一区一区三区mba桃花 | 日韩精品在线观看网站 | 国产999精品久久久久久 | 久久午夜免费电影 | 色中色tv | 377p人体粉嫩胞高清视频 | 91插插插影库永久免费 | 国产精品久久久久久婷婷天堂 | 国产精品久久久久久免费观看 | 绝母1第6集免费观看动漫 | 日韩成人激情视频 | 亚洲久久久久久久久久 | 亚洲激情国产精品 | 久草色网 | a在线天堂| 97国产精品人人爽人人做 | 亚洲精品免费播放 | 伊人视频在线观看 | 免费欧美在线视频 | 国产精品福利一区二区三区 | 亚洲福利视频免费观看 | 小圈实践视频素材 | 亚洲aⅴ| 成年无码av片在线 | 中文字幕免费中文 | 久久av资源站 | 国产成人一区二 | 一本一本久久a久久精品综合麻豆 | 成人片在线播放 | 亚洲免费成人 | 蜜桃av久久久亚洲精品 | 欧美人与性动交ccoo | 日韩一级精品视频在线观看 | 日韩欧美黄色 | 国产亚洲欧美一区二区三区 | 欧美极品xxx | 欧美一区在线视频 | 美女隐私网站视频 | 青青草中文字幕 | 久久久av一区| 欧美jizzhd精品欧美18 | 亚天堂 | 亚洲精品午夜久久久 | juliaann欧美二区三区 | www国产成人免费观看视频,深夜成人网 | 黑帮大佬和我的三百六十五天 | 欧美日韩国产三区 | 日韩精品国产欧美 | 国语一区二区三区 | 97视频免费在线观看 | 97色站 | 91久久中文字幕 | 免费视频福利 | 高清国产午夜精品久久久久久 | 自拍视频在线观看 | yy6080久久伦理一区二区 | 成人做爰高潮片免费看 | 成年视频女人的天堂 | 日韩精品一区二区久久 | 国产精品不卡一区二区三区 | 久久精品男人的天堂 | 亚洲成人1234 | 亚洲精品免费视频 | 久青草视频在线观看 | 国内视频一区 | 午夜色婷婷 | 欧美变态xxxx | 黄色国产网站在线观看 | 一级片av| 欧美日韩黄视频 | 一区二区视频在线播放 | 大黑人交xxxxxhd性爽 | 猫咪av成人永久网站在线观看 | xxx在线视频| 爽视频| 欧美在线看片 | h官场少妇第三部分 | 国产精品扒开腿做爽爽爽软件 | 亚洲涩爱 | 欧美老少做受xxxx高潮 | 麻豆精品视频在线观看 | 欧美高清hd18日本 | 国产一区二区三区香蕉 | 777精品视频 | 色在线视频网 | 一区二区久久久久 | 亚洲自拍日韩 | 中国黄色大片 | 五月开心网 | 91欧美精品午夜性色福利在线 | 欧美极品在线视频 | 亚洲成人网上 | 美女无遮挡网站 | 中国免费高清视频在线观看 | 国产美女无遮挡永久免费观看 | 人与性动交zzzzbbbb | 亚洲福利视频在线 | 高清欧美性猛交 | 日本免费中文字幕 | 成人精品免费视频 | 日韩欧美一级在线播放 | 免费午夜影院 | 强制中出し~大桥未久10在线播放 | 中文字幕在线观看播放 | 日韩欧美亚洲国产精品字幕久久久 | 男女生一起相嗟嗟嗟免费观看 | 蜜桃av在线免费观看 | 99re这里只有精品首页 | 欧美性大战久久久久 | 亚洲一区二区三区香蕉 | 91精品国产综合久久福利软件 | 黑森林av凹凸导航 | 青青草视频网 | 亚洲欧美日韩网 | 中文字幕免费高清电影在线观看 | 国产精品99久久久久久白浆小说 | 亚洲爱爱网站 | 国产日本欧美一区二区 | 色欲综合视频天天天 | 亚洲国产成人va在线观看天堂 | 日韩欧美精品一区二区 | av网站在线免费看 | 日韩激情第一页 | 成人免费小视频 | 亚洲一二三区在线 | 高清在线不卡av | 狠狠v欧美v日韩v亚洲ⅴ | 亚洲色图欧美偷拍 | 五月婷婷六月婷婷 | 国产精品成人一区二区 | 亚洲激情精品 | 德国艳星videos极品hd | 99re国产 | 岛国av片 | 高潮白浆女日韩av免费看 | 特黄特色大片免费视频大全 | av在线免费播放观看 | 久久99国产精品久久99果冻传媒 | 国产一级色 | 亚洲视频一二区 | 色偷偷www8888| 欧美日韩三级 | 日韩精品视频一区二区三区 | 成人av片在线观看 | 影音先锋美女 | 欧美v一区 | 在线美女 | 中文字幕在线播放第一页 | 青春草免费在线视频 | 麻豆91在线 | 日本成人精品在线 | 中文字幕在线观看一区二区三区 | 日韩一级黄色大片 | 欧美日韩一区免费 | 亚洲国产精华液网站w | 成人动漫亚洲 | 青春草在线观看 | 国产精品一区二区三区在线播放 | 91天堂视频| 日韩专区欧美专区 | 国产香蕉久久 | 欧美精品乱码久久久久久按摩 | 91九色网站| 在线观看www视频 | 国产精品综合一区二区 | 亚洲色图15p | 污在线看 | 综合网在线 | 中文字幕日本女优 | 久久女同互慰一区二区三区 | 揉我啊嗯~喷水了h视频 | 狠久久| 高中男男gay互囗交观看 | 日韩精品欧美精品 | 特级西西人体444www | 欧美日韩一区二区三区在线看 | 欧美午夜一区二区 | 漂亮少妇高潮 | 日韩欧美高清dvd碟片 | 综合久久成人 | 国产精品日韩一区二区三区 | 日本欧美一级片 | 欧美在线高清视频 | 电影k8一区二区三区久久 | 俄罗斯美女野外性行为 | 18在线网站| 欧美影院一区二区三区 | 亚洲欧美在线免费 | 国产午夜精品一区二区三区四区 | 日本wwwxxx免费 | 日韩在线短视频 | 自拍偷拍国产 | 中文字幕一区二区视频 | 激情一区二区 | 深爱婷婷 | 扒开腿揉捏花蒂h | 欧美丰满艳妇bbwbbw | 极品少妇一区二区 | 女s男m调教丨vk | 国产欧美一区二区精品性色 | 女人裸体又黄图 | 精品国产乱码久久久久久婷婷 | 欧美 日韩 在线播放 | 欧美久久久久久久久中文字幕 | 精品国产乱码久久久久久婷婷 | 日本视频在线观看免费 | 欧美帅的gay1609视频 | 日韩中文字幕视频在线 | 色悠悠导航| 葵司av电影 | 豆国产96在线 | 亚洲 | 带娇妻被粗大单男3p大叫视频 | 尤物视频在线观看视频 | 影音先锋中文字幕电影 | 91在线观看成人 | 亚洲激情欧美激情 | 亚洲欧美中文日韩在线v日本 | 婷婷久久伊人 | 18中文字幕 | 中国一级黄色大片 | 亚洲美女视频网站 | 青草视频免费看 | 国产suv精品一区二区6 | 91精品视频一区二区 | 午夜高清福利视频 | 色国产精品一区在线观看 | 狍与女人做爰毛片 | 国产精品久久亚洲7777 | 蜜桃av一区二区三区 | 国产精品成人一区二区 | 免费小视频在线观看 | 精品自拍视频 | 777色视频| 天堂影音av | 成人av在线网址 | 国产精品日韩高清 | 福利在线网站 | 毛片一区二区 | 久久五月天综合 | 国产人妖ts | 日本免费高清一区二区 | 日韩综合视频在线观看 | 麻豆av导航| 久久久国产精品x99av | 亚洲综合一二 | 国产毛片一区二区三区 | 日本私人影院在线观看 | 日韩三级不卡 | 爱福利在线视频 | 爆操极品 | av福利局| 日韩视频精品在线 | 国产亚洲一区二区三区四区 | 制服 丝袜 激情 欧洲 亚洲 | 国产最新精品视频 | 怎么可能高潮了就结束漫画 | 这里是久久伊人 | 精品久久国产精品 | 鲁丝片一区二区三区 | 国产91精品一区二区 | 日韩福利视频网 | 国产精品成人在线 | 亚洲高清不卡在线 | 午夜av在线播放 | eeuss鲁片一区二区三区在线看 | 娇小性色 | 欧美综合在线视频 | 99在线精品视频 | 精品久久免费 | 亚洲 欧洲 一区 | 椎名由奈av一区二区三区 | 超碰免费视 | 国产精品一区二区三区四区五区 | 婷婷色综合色 | 日韩免费在线 | 手机黄色网址在线观看 | 俺去俺来也在线www色官网 | 国产午夜一区二区三区 | 亚洲欧美另类自拍 | 日韩精品中文字幕在线观看 | 午夜久久福利 | 自拍av一区| 视频黄页在线 | 欧美无乱码久久久免费午夜一区 | 放荡的我们 电影 | 国产成人午夜视频 | 免费黄色网址大全 | 黄色av免费网 | 青青草在线视频网站 | 女人喷白浆视频 | 美女扒开尿口让男人爽捅 | 亚洲一级免费视频 | 国产精品91一区二区 | 日韩精品免费在线视频 | 最近最新中文字幕在线 | 欧美精品导航 | 亚洲国产天堂久久综合 | 夜夜操夜夜爽 | 中文字幕最新网址 | 男人把女人捅爽 | 欧美少妇精品 | 18涩涩午夜精品.www | 在线免费观看岛国av | h网站免费在线观看 | 欧美精品一区二区在线播放 | 国产又粗又猛又爽又黄91精品 | 日韩精品不卡在线 | 日韩—二三区免费观看av | 丝袜老师扒开让我了一夜漫画 | 99re6热只有精品免费观看 | 一区三区视频 | 国产亚洲欧美中文 | 丰满少妇中出 | 亚洲 欧洲 一区 | 精品欧美一区二区在线观看 | 91桃色在线看 | 免费看黄av | 特大巨交吊性xxxx | 高清成人免费视频 | 精品国产乱码久久久久久天美 | 6080亚洲精品一区二区 | 日本永久免费啪啪网站 | 亚洲综合成人在线 | 久久精品亚洲国产奇米99 | 伊人久久亚洲 | 男人的天堂2019 | 午夜影院在线观看视频 | 麻豆视频网址 | 中文字幕在线观看免费视频 | 手机看片日韩 | 国产精品香蕉 | 95566电视影片免费观看 | free国产hd露脸性开放 | 天天色天| 亚州精品天堂中文字幕 | 国产真实乱对白精彩 | 精品国产网站 | 国产ts系列 | 亚洲精品久久久久久久久久久 | 国产欧美精品久久久 | 麻豆传媒网站入口 | 97免费中文视频在线观看 | 艳妇臀荡乳欲伦交换h漫 | 桃色网站在线观看 | 中国人妖和人妖做爰 | 男生和女生一起差差差很痛的视频 | 色婷婷久久久亚洲一区二区三区 | 日本欧美国产在线 | 最近中文字幕免费观看 | 国产黄色av网站 | 日韩成人中文字幕 | 在线播放日本 | 97视频在线 | 国产va在线视频 | www日本黄色 | 日本憋尿大量失禁丨vk | 亚洲一级网站 | 中国农村妇女hdxxxx | 少妇高潮迭起 | 一区二区三区四区在线免费观看 | 欧洲av不卡| 午夜av毛片| 一区二区三区精品 | 国产精品久久久久久久久 | 中国丰满少妇xxxxx高潮 | 亚洲人高潮女人毛茸茸 | 亚洲欧美激情一区 | 国产成人高清 | 另类小说av | 大胸美女无遮挡 | 爽躁多水快深点触手 | 国产99久久精品 | 欧美午夜久久 | 日韩欧美成人一区二区 | 中文字幕精品一二三四五六七八 | 丝袜 亚洲 另类 欧美 重口 | 亚洲精品国产精品国自产观看 | 老女人网站 | 亚洲国产视频网站 | 91视频婷婷 | 亚洲一区二区三区久久久 | 五月天色网站 | 美女全裸直播 | 久久久精品国产一区二区 | 国产精品视频免费在线观看 | 69性影院| 精品不卡在线 | 国产乱子伦视频一区二区三区 | av伊人久久| 成人av在线一区二区三区 | 国产黄色免费网站 | 国产欧美一区二区三区久久人妖 | 免费网站黄在线观看 | 在线观看视频亚洲 | 欧美成人小视频 | 亚洲天堂1区 | 大乳boobs巨大乳bbw | 91av免费观看 | 996久久国产精品线观看 | 美女扒开粉嫩的尿囗给男生桶 | 久久av一区二区三区漫画 | 国产aaa | 国产精品腿扒开做爽爽爽挤奶网站 | 男女互插免费视频 | 色护士综合 | 久久精品国产综合 | 草莓视频色板 | 成人高清免费 | 亚洲va国产va天堂va久久 | 日本高清视频在线 | 激情五月少妇a | 另类av小说| 国产视频丨精品|在线观看 琪琪电影一区二区 | 苍井空无码 | 一区二区在线观看免费 | 亚洲一区二区三区免费在线观看 | 免费视频你懂的 | 国产乱码精品一品二品 | av色图| 免费在线观看小视频 | 第四色成人网 | 尤物视频在线观看免费 | 亚洲人成在线免费观看 | 日韩成人中文字幕在线观看 | 国产剧情演绎av | 久久观看 | 日韩av一区二区在线观看 | 亚洲麻豆国产自偷在线 | 四虎黄色影院 | 成人在线视频一区二区 | 丁香婷婷综合五月 | 欧美日韩电影在线观看 | 久久综合久久美利坚合众国 | 秋霞影院一区二区 | 黄污视频网站 | 国产黄色av网站 | 欧美福利在线观看 | 国产一区二区三区高清在线观看 | 18videosex性欧美麻豆 | 无播放器av | 日韩电影网站 | 国产精品99久久久久久白浆小说 | 男人午夜天堂 | 日本成人在线一区 | 三级视频在线播放 | 亚洲 中文 欧美 日韩 在线 | 日本免费三区 | 草1024榴社区成人 | 成人av网站免费 | 高清国产在线观看 | 日韩精品极品视频在线观看免费 | 黄色的网站在线免费观看 | 久操免费在线 | 欧美日韩在线一区二区三区 | 亚洲成人一区二区 | 海角国产乱辈乱精品视频 | 少妇太爽了在线观看 | 动漫高潮 | 国产女主播在线一区二区 | 四虎精品在永久在线观看 | 欧美日韩午夜精品 | 在线观看视频91 | 亚洲免费观看在线观看 | 成人在线激情视频 | 亚洲高清中文字幕 | 成年人黄色网址 | 在线观看亚洲 | 久草国产在线观看 | 日韩在线视频网站 | 男女激情大尺度做爰视频 | 国产 一区二区 | 男人晚上看的视频 | 国产高清视频一区 | 在线精品视频一区二区 | 激情另类综合 | 在线亚洲观看 | 色婷婷一 | 久久久久久久久亚洲 | 日韩成人一级 | 超碰小说 | 91久久国产精品 | 五月天黄色网址 | 成人做爰www免费看视频网站 | 国产黄在线免费观看 | 精品三级久久久 | 97中文在线| 7777精品伊人久久久大香线蕉 | 二区在线播放 | 日韩av三级在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 手机亚洲第一页 | 日韩女优电影在线观看 | 欧美粗暴jizz性欧美20 | 婷婷成人综合网 | 午夜免费视频网 | 裸体在线 | 艳情五月 | 色免费网站 | 精品国产电影 | 欧美日韩高清免费 | 国产黄色大片在线观看 | 国产一区在线不卡 | 亚洲精品免费网站 | 91精品国产99久久久久久红楼 | 色婷婷精品国产一区二区三区 | 亚洲一区成人在线 | 日韩午夜影院 | 91在线91 | 五月婷婷国产 | 色福利网站| 国产一区在线看 | 撸撸在线视频 | 色综合999 | 天堂乱色| 男人操女人免费视频 | 欧美浪妇xxxx高跟鞋交 | 嫩模周妍希视频一区二区 | 91色视频| 日韩精品久久一区 | av 黄色 | 精品一区网站 | 俺也去噜噜噜噜色 | a天堂中文在线 | 综合久久伊人 | 色黄视频网站 | 黄色在线观看视频网站 | 琪琪色av | 99伊人| 草莓视频官网在线观看 | 久久伊人中文字幕 | 国产一区二区三区视频免费 | 国产网站视频 | 性一交一乱一透一a级 | 午夜视频在线 | 丰满放荡岳乱妇呻吟视频 | 性xxxx丰满孕妇xxxx另类 | 欧美性猛交xxxx乱大交极品 | 成人a v电影网 | 福利社区导航 | 国产污视频在线 | av中字在线观看 | 制服丝袜先锋影音 | 麻豆成人在线观看 | 亚洲韩日在线 | 一区二区三区日韩 | 短篇山村男同肉耽h | 日韩亚洲精品在线 | 伊人久久大香线 | 欧美一级片在线观看 | 99日韩精品| 极品粉嫩国产48尤物在线播放 | 亚洲va久久久噜噜噜久久 | 在线看片h| 亚欧av在线 | 国产高清免费观看 | 91精品国产色综合久久不卡98口 | 综合伊人久久 | 图片区亚洲色图 | 精品无码久久久久国产 | 久久久99精品免费观看 | 中文字幕一级 | 国产精品综合色区在线观看 | 欧美日韩成人精品 | 日韩久久一区 | 黄色大片免费观看 | 国产精品v亚洲精品v日韩精品 | 欧洲午夜视频 | 嫩草发布页 | 黑名单上的人全集免费观看 | 九九在线精品 | 中文av影院 | 色一情一乱一区二区 | 欧美一级久久 | 国产99亚洲 | 999久久久免费精品国产 | 波多野结衣精品 | 韩国r级限制三点尽露 | 欧美亚洲国产日韩 | 亚洲精品中文字 | 午夜激情视频网站 | 94色蜜桃网一区二区三区 | 亚洲一区二区黄色 | 日韩精品免费一区二区夜夜嗨 | 日韩一二在线观看 | 尤物视频导航 | 亚洲www啪成人一区二区 | 国产对白叫床清晰在线播放 | 97久久久久久 | 成人免费看的视频 | 奇米一区二区三区 | 国产精品二区三区 | 欧美日韩高清 | 日本怡春院一区二区 | 青草视频免费看 | 国产女人爽到高潮a毛片 | 琪琪福利| 激情一区二区三区 | 午夜爱 | 色婷婷视频 | 美女扒开腿男人爽桶 | 99精品在线播放 | 大地资源二中文在线影视免费观看 | 欧美另类一区二区三区 | 在线视频自拍偷拍 | 国产乱码精品一区二区三区中文 | 97国产在线视频 | 在线免费看毛片 | 色哟哟入口 | 欧美激情欧美激情在线五月 | 中文字幕在线免费看线人 | 国产噜噜噜噜久久久久久久久 | 日韩欧美一区二区三区在线 | 黄页免费在线观看 | 在线看污视频 | 日韩欧美小视频 | 久久久婷 | 欧美日韩色图 | h视频网站在线观看 | 久久久九九九九 | 日本一区二区三区免费观看 | 日韩av电影在线免费播放 | 亚洲人免费视频 | 亚洲自拍色 | 亚洲精品中文字幕av | 久久99影院 | 毛片一区二区三区 | 午夜亚洲福利 | 久久久久久18| 日日色网站 | 国产69精品久久久久久 | 欧美成人a在线 | 免费看操片 | 国产电影一区二区三区爱妃记 | 国产区一区二区三区 | 日本青青草视频 | 青青草视频免费在线观看 | 91av免费| 狠狠干超碰 | 精品国产乱| 奇米网一区二区三区 | 国产精品91久久久 | 蜜桃视频一区二区三区在线观看 | 国产精品国精产品一二 | 日韩av片无码一区二区不卡电影 | 韩国三级电影一区二区 | 99精品在线播放 | 亚洲欧美www | 在线观看 一区 | 免费在线看黄色 | 激情综合色综合久久综合 | 亚洲欧美综合网 | 成年人在线看视频 | 日韩r级电影在线观看 | 丁香花五月激动的心情句子精选 | 色爽爽爽爽爽爽爽爽 | 国产精品自拍在线 | 99亚洲成人| 欧洲不卡视频 | 91av福利在线 | 久久黄视频 | 国产日韩一区二区三区 | 日韩成人在线观看 | 婷婷综合六月 | 日本免费一区二区三区视频 | 婷婷丁香av | 欧美边添边摸边做边爱免费 | 欧美野外猛男的大粗鳮 | 另类男人与善交video | 视频一区二区欧美 | 精品欧美日韩 | 国产日本在线 | 黄色午夜影院 | 捆绑play强制高潮挠脚心视频 | 桃色网站在线观看 | 教室里强摁做开腿呻吟h | 国产盗摄一区二区 | 亚洲一区二区免费视频 | 亚洲成人自拍网 | 男人天堂色| 日韩免费中文 | 久久久久久久久99精品 | 国产精品久久久久久久久久妞妞 | 少妇中文字幕 | 欧美肥婆姓交大片 | 成人欧美一区二区三区黑人麻豆 | 欧美精品一区在线观看 | 日韩av在线电影观看 | 亚洲欧美国产精品久久久久久久 | 亚洲女人视频 | 国产精品99久久久久久人 | 91精品国产自产91精品 | 国产小视频在线观看 | 国产精品日韩欧美一区二区 | 天堂综合网 | 欧美三级自拍 | 韩国三级中文字幕hd浴缸戏 | 91精品国产综合久久香蕉的用户体验 | 国产精品成人网 | 欧美激情黑人 | 在线天堂亚洲 | а√最新版天堂中文 | 亚洲精品乱码久久久久久蜜桃91 | av色亚洲| 视频一区二区在线 | 国产精品网站在线 | 欧美一级二级视频 | 巨胸喷奶水www久久久免费动漫 | 福利一区二区三区视频在线观看 | 色xx综合网 | 高清一区二区三区日本久 | 午夜视频在线观看一区二区 | 国产91精品入口 | 在线天堂亚洲 | 欧美午夜精品久久久 | 亚洲永久免费视频 | 在线免费观看污视频 | 国产一区二区三区免费视频 | 亚洲永久在线 | 91精品国产高清一区二区三区 | 亚洲日本中文 | 日韩 欧美 亚洲 | 丁香五精品蜜臀久久久久99网站 | 精品粉嫩aⅴ一区二区三区四区 | 国产成人久久精品 | 中国男男gay无套 | 色综合色综合色综合色综合色综合 | 国产精选第一页 | 欧美性生活久久 | 日韩一区在线看 | 神马午夜久久 | 就去色av | av今日在线| 有码一区二区三区 | 国产人伦视频在线观看 | 欧美成人性生活 | 亚洲美女精品久久 | 奇米影视四色中文字幕 | 天天免费 | 美女三级网站 | 婷婷丁香花 | 成人午夜影视 | 午夜日韩激情 | 国产女生裸体无遮挡 | 97伊人 | 午夜爱精品免费视频一区二区 | 日韩精品中文字幕在线 | 久久久久久国产精品免费免费 | 亚洲一区自拍偷拍 | 性奶老妇 视频 | 九九自拍 | 91精品久久久久久久久久久久久久 | 91精品国产自产91精品 | 麻豆五月天 | 麻豆啪啪 | 国产a篇| 久久手机免费视频 | 亚洲国产婷婷香蕉久久久久久 | 高清一区二区三区四区五区 | 久久综合免费视频 | 极品麻豆 | 在线伊人网 | 色老头免费视频 | 免费在线播放黄色 | 人人澡人人透人人爽 | 久久免费电影 | 欧美小视频在线观看 | 另类激情视频 | 亚洲综合成人在线视频 | 国产精品 国产精品 | 国产剧情演绎av | 亚洲国产日韩精品在线 | 91亚洲国产精品 | 欧美日韩老妇 | 懂色av粉嫩av| 麻豆视频免费看 | 欧美一区成人 | 亚洲一区综合 | 成人wwwww免费观看 | 日韩精品卡一 | 美女搞黄在线观看 | 国内av片 | 成片免费观看视频 | 国产精品久久久对白 | 视频一区欧美 | 日本久久久久久久 | 日韩av在线影视 | 91看片视频| 亚洲精品四区 | 美女三级黄色 | 成人午夜精品 | a√天堂在线 | 国产成人自拍在线 | 成年人福利视频 | 福利片免费看 | 激情久久免费视频 | 亚洲美女自拍视频 | 亚洲最大av | 91精品国产91久久综合桃花 | 26uuu噜噜一噜噜 | 中文字幕av一区二区 | 144144朝鲜族网站 | 日本老女人毛茸茸 | 欧洲美女性视频 | 欧美一区二区久久久 | 男女激情视频一区 | 色老头一区 | 欧美xxxxx牲另类人与 | 国产成年精品 | 亚洲黄色免费电影 | 欧美日韩国产区 | 在线黄色av电影 | 我和岳m愉情xxxⅹ视频 | 在线视频 二区 | 丝袜色网| 日本中文在线观看 | 天天看天天操 | 精品视频三区 | 国模视频一区二区三区 | 在线永久免费观看黄网站 | 国产99久久 | 婷五月天 | 亚洲欧美日韩专区 | 无套白嫩进入乌克兰美女 | 国产欧美日韩一区二区三区四区 | 丝袜美腿五月天 | 1769资源站| 思思久久99热只有频精品66 | 谷原希美在线一区二区免费 | 欧美综合视频在线观看 | 日韩欧美高清在线 | 99在线精品视频 | 四虎4545www精品视频 | 成人午夜视频免费看 | 日韩欧美久久 | 国产一区视频观看 | 国产日韩视频 | 久久高清视频免费 | 精品国产一区二区三区久久 | 激情视频区 | 亚洲国产成人精品一区二区 | 裸体裸乳被免费看视频 | 国产精品福利小视频 | 国产 在线 | 日韩 | 久久综合久色欧美综合狠狠 | 国内视频一区 | 深夜激情影院 | 欧美激情黑人 | 三上悠亚亚洲一区 | 天天射网站| 国产精品成人aaaaa网站 | 国产毛片av在线 | 宅男噜噜噜666在线观看 | 超碰av在线播放 | 男人把女人捅爽视频 | 69国产精品| 双性受孕h堵精大肚生子 | 天堂av免费观看 | 欧美大尺度电影在线观看 | 美剧19禁啪啪无遮挡大尺度 | 日韩在线一二三区 | 最新中文字幕在线观看 | 成人午夜激情片 | 日韩精品一区二区三区在线观看 | 七七88色| 揉我啊嗯~喷水了h视频 | a级片在线观看 | ass少妇ius鲜嫩bbw | 超薄肉色丝袜脚交一区二区 | 色天天 | av白浆 | 美剧19禁啪啪无遮挡大尺度 | 久久伊人热 | 久久亚洲二区 | 国产最新精品 | 亚洲最大的网站 | 嫩草视频在线观看 | 日韩免费啪啪 | 国产日产欧美一区 | 亚洲精品大尺度 | 日本在线免费视频 | 亚洲视频一区二区 | 精品国产欧美日韩 | 痴女扩张宫交脱垂重口小说 | 337p人体粉嫩胞高清视频 | 麻豆成人免费电影 | 欧美精品在线视频 | 男人阁久久 | 成年人免费网站在线观看 | 中文字幕在线高清观看 | 国产精品久久中文 | 日本一本二本三本在线 | 嫩草嫩草嫩草嫩草嫩草 | 国产一二三视频 | 国产999精品久久久久久 | 国产亚洲欧美一区二区 | 欧美精品久久久久久久久 | 男女过程很爽的视频网站 | 久草视频网站 | 亚洲国产成人精品一区二区 | 女性生殖扒开酷刑vk | 国产精品996| 性感美女av在线 | 欧美破处片 | 瑟瑟网站在线观看 | 岛国av一区 | 中文字幕一区二区三区电影 | 外国美女网站 | 欧美一级三级 | 亚洲欧美天堂 | 久热精品视频在线免费观看 | 亚洲国产精品一区二区第一页 | 国产精品入口麻豆九色 | 久草观看视频 | 暴力调教一区二区三区 | 热久久最新| 色另类 | 女生扒开尿口让男生舔 | 亚洲人成网址 | 日本www视频 | 制服 丝袜 激情 欧洲 亚洲 | 日韩 欧美综合 | 狠狠干五月 | 天天色图综合网 | 在线成人激情 | 青色网 | 好吊妞这里只有精品 | 国产美女永久免费无遮挡 | 99精品视频一区 | 精品av导航 | 日韩在线视频网 | 在线视频三区 | 男女羞羞动态图 | 日韩电影一二三区 | 午夜美女福利视频 | 亚洲综合日韩精品 | 米奇7777狠狠狠狠视频 | 国产黑丝美女在线观看 | 亚洲看片网站 | 海角社区深夜入口 | 成人妇女淫片aaaa视频 | 欧洲黄色精品 | 91手机视频在线观看 | 日本激情网站 | 骑骑上司妻电影 | 欧美一区二区在线观看 | 欧美日韩性生活 | 在线免费观看国产视频 | 国产盗摄在线观看 | av电影网站在线观看 | 91精品国产色综合久久 | av在线网址大全 | free性欧美hd另类精品 | 在线看片h| 一本久道久久综合狠狠爱 | 精品国产乱码久久久久久1区2区 | 中文av一区二区 | 猛男大粗猛爽h男人味 | 成人精品电影 | 国产三级欧美三级日产三级99 | 亚洲精品久久久久久久久久久久 | 青青草97国产精品免费观看 | 97av视频| 色撸撸av| 播放美国生活大片 | 久久精品中文字幕 | 在线观看午夜视频 | 国产a视频精品免费观看 | 制服丝袜一区二区三区 | 欧美freesex黑人又粗又大 | 国产精品免费一区二区三区在线观看 | 亚洲欧洲精品一区二区三区不卡 | 最好看的mv中文字幕国语电影 | 欧美视频一区二区三区 | 欧美在线xxx | 色婷婷综合五月 | 好看av在线 | 国产伦视频 | 日日噜噜噜夜夜爽爽狠狠 | 欧美三级视频在线 | 在线视频二区 | 巨乳搜查官 | 免费极品av一视觉盛宴 | 日本精品网站 | 免费成人av网址 | 动漫av在线播放 | 亚洲精品久久久久 | 在线色91| 国产区在线观看 | 日韩在线短视频 | 好吊日视频 | 鲁片一区二区三区 | 久久久精品 | 天天干天天操天天射 | 国产亚洲二区 | 都市豪门艳霸淫美妇 | 欧美日韩亚洲另类 | 夜色激情 | 天天操天天草 | 黄页网址大全免费 | 国产成人精品久久亚洲高清不卡 | 亚洲日日夜夜 | 日韩视频一区在线 | 欧美一区二区影视 | 一本加勒比hezyo黑人 | 激情国产一区二区 | 可以免费看的毛片 | 韩国禁欲系高级感电影 | 麻豆黄色网 | 欧美美女一区二区 | 午夜视频导航 | av网页在线| 91福利视频网站 | 在线看片不卡 | 福利短视频| 男插女视频免费 | av一区二区在线看 | 在线精品一区二区 | 日本久久久久亚洲中字幕 | 亚洲色图第一区 | 青青草久草 | 亚洲综合五月天 | 五月天狠狠操 | 黄色大全网站 | 粗长+灌满h双龙h男男室友猛 | 肉色欧美久久久久久久免费看 | 草莓视频污版在线观看 | 德国性xxxx | av网在线观看 | 亚洲自拍偷拍色图 | 成人免费视频免费观看 | 欧美日本一区二区在线观看 | 激情视频免费在线 | 婷婷五月花 | 欧美成人26uuu欧美毛片 | 在线看a的网站 | 91精品国产高清一区二区三区蜜臀 | 国产女主播在线播放 | 影音先锋中文字幕第一页 | 国产精品88av | 精品一区二区三区在线播放 | 福利视频免费看 | 欧美精产国品一二三区 | 国产91精品一区二区麻豆亚洲 | 国产精品久久久久久久久久久久久久 | 丝袜福利在线 | 日韩欧美一级二级三级 | 欧美视频一区二区三区 | 激情综合色综合久久综合 | 91小视频在线观看 | 大香成人 | 成人性视频免费网站 | 张柏芝54张无删码视频 | 国内成人免费视频 | 推特裸体gay猛交gay | 欧美野外猛男的大粗鳮 | 国产黄色麻豆视频 | 性欧美8khd高清极品 | 入禽太深免费视频 | 精品国产一区二区三区久久久 | 亚洲精品大全 | 温柔善良的儿媳妇免费大结局 | 女人被爽到高潮呻吟免费看 | 亚洲精品77777 | 亚洲永久在线观看 | 国产精品国色综合久久 | 成人av图片 | 午夜精品久久久久久久男人的天堂 | 999国产精品| 欧美激情视频一区二区三区不卡 | 成人黄色av网站 | 麻豆国产一区 | 在线亚洲免费 | 鲁视频| 少妇户外露出[11p] | 一本一道波多野结衣一区二区 | 国产亚洲伦理 | 黄色av网址在线观看 | 国产麻豆 | 日韩精品一二三四 | 美女脱光内衣内裤 | 欧美丰满少妇xxxxx做受 | 日本美女插插插 | 日韩城人网站 | 激情视频一区 | 黄网站在线观看 | 精品国产一区二区三区四区在线观看 | 狠狠干夜夜爱 | 都市激情亚洲色图 | 国产精品美女久久久免费 | 久久久国产精品麻豆 | 日韩三级一区 | 日本xxxx裸体xxxx | 欧美日韩精品久久久 | 天堂www中文在线资源 | 狠狠麻豆 | 大香成人 | 午夜在线a | 人妖精品videosex性欧美 | 成人午夜视频免费看 | 中文字幕在线有码 | 成人区精品一区二区婷婷 | 亚洲国产高清一区二区三区 | 亲子乱对白乱都乱了视频 | 亚洲天堂免费在线观看视频 | 97超碰自拍| 国产精品一区二区久久国产 | 欧美成人艳星乳罩 | 美女爽到高潮91 | 99国产精品永久免费视频 | 五月天色网站 | 777片理伦片在线观看 | 成人污污在线 | 对白刺激国产子与伦 | 波多野结衣视频在线观看 | 国产精品99久久久久久人 | 色哟哟精品一区 | 色婷婷av一区二区三区gif | 国产精品69久久久久水密桃 | 丝袜 亚洲 另类 欧美 重口 | а天堂8中文最新版在线官网 | 清清草免费视频 | 欧美,日韩,国产精品免费观看 | 欧美日韩一区二区三区在线视频 | 蜜臀av在线免费观看 | 在线观看国产永久免费视频 | 亚洲精品国产精品国自产观看 | 欧美日韩性生活视频 | 中文字幕不卡在线 | 国产成人在线播放 | 欧美日本免费一区二区三区 | 久久99久久99精品中文字幕 | 不卡视频一区 | 国产裸体永久免费视频网站 | 影音先锋heyzo | 91一区二区在线 | 俺也去网站 | 亚洲系列中文字幕 | 亚洲成在线观看 | 欧美亚洲综合久久 | 久久久精品在线观看 | 亚洲色图美腿丝袜 | 日韩综合一区二区三区 | 国产精品丝袜黑色高跟 | 麻豆视频免费看 | 男男play呻吟动漫网站 | 久久久受www免费人成 | 日本精品视频一区 | 国产精品7| 国产在线主播 | 亚洲香蕉久久 | 福利写真视频在线观看 | 国产成人在线视频 | 想要xx网站入口 | 色人人 | 激情五月婷婷 | 国产一区二区三区在线免费观看 | 久久手机免费视频 | 国产精品日韩精品欧美精品 | 你懂的在线观看视频网站 | 在线播放一级片 | 美女又爽又黄免费网站直播 | 午夜美女福利 | 相亲对象是问题学生在线观看 | 成人福利在线视频 | 天天淫| 日日骚av| 亚洲一区二区三区中文字幕 | 国产在线视视频有精品 | 超碰在线一区 | 日本高清视频一区二区三区 | 亚洲成a人片 | 久叭叭电影网 | 国产三级欧美 | 网红福利视频 | 亲子乱子伦xxxx | 精品一区二区国产 | 能看黄色的网址 | 91精品国产乱码久久久竹菊 | 中文字幕在线观看高清 | 色综合狠狠干 | 日韩av中文字幕一区二区三区 | 日韩午夜激情电影 | 91精品国产99久久久久久 | 精品在线一区二区三区 | 999精品| 福利视频网址导航 | 日本在线视频播放 | 性欧美xxxx16少妇 | 91精品国产91 | 日本黄色高清视频 | 可以直接观看的av网站 | 日本在线免费 | 小视频在线播放 | 久久免费的精品国产v∧ | 婷婷六月激情 | 国产精品福利一区二区三区 | 综合久久久久久久 | av最新版天堂资源在线 | 日韩中文字幕精品一区 | 亚洲国产小视频在线观看 | 乱肉合集乱高h男男双龙 | av久久色 | 最新天堂资源在线 | 男生操男生网站 | 日韩av大片免费看 | 青草视频在线观看免费 | 牛牛电影国产一区二区 | 性久久久久久久久 | www视频在线免费观看 | 国产肉体xxxx裸体137大胆 | 91伊人| 欧美日韩国产精品 | 欧美又大又硬又粗bbbbb | 大黄网站在线观看 | 专干中国老太婆hd | 成人做爰www看视频软件 | 一区二区精品视频 | av久久色 | 蜜桃久久av| 日本不卡视频在线播放 | 成人欧美视频 | 欧洲在线视频 | 国产日产久久高清欧美一区 | 国产精品视频一区二区三区不卡 | 亚洲一区二区精品在线 | 美国女人毛片 | 日本a v网站 | 国产精品午夜在线观看 | 国产精品不卡一区 | 在线亚洲一区 | 欧美日韩一本 | 久久视频在线观看免费 | 在线免费观看一区二区三区 | 大胆人体一区二区 | 亚洲女av| 韩国视频一区二区 | 风间由美一二三区av片 | 国产又色又爽又黄 | 福利社区导航 | 亚洲在线播放 | 日韩一卡| 亚洲不卡在线观看 | 影音先锋亚洲精品 | 亚洲欧美成人综合 | 扒开双腿猛烈地灌满精子男男 | 老师在办公室被躁在线观看 | 台湾佬美性中文 | 欧美 日韩 亚洲 丝袜 制服 | 狠狠网站 | 麻豆视频传媒入口 | 中国妇女做爰视频 | 日韩精品福利视频 | 日本很黄的打屁股网站 | 欧美日韩国产第一页 | 欧美激情一区二区三级高清视频 | 黄色片在线免费观看 | 成人在线观看免费高清在线观看 | 香蕉久草 | 91精品国产99久久久久久红楼 | 爆操视频在线播放 | 亚洲精品欧美 | 久久久久久久久久久久久女国产乱 | 久久久久久久亚洲精品 | 国产精品第一 | av网站在线免费 | a天堂视频在线 | 日本免费一二区 | 欧美18—19sex性hd | 精品欧美一区二区三区 | 成人在线免费观看av | 久久婷婷一区二区三区 | 久久最新网址 | 国产精品真实 | 五月婷婷久久丁香 | 国产日批 | 亚洲欧美一区二区三区情侣bbw | 又黄又湿的网站 | 男女免费视频 | av激情在线观看 | 能直接看av的网站 | 欧美裸体18 | 中文字幕人成 | 国产伦精品一区二区三区视频金莲 | 精品一区电影 | 欧美成人aaa | 懂色av一区二区三区蜜臀 | 含羞草av在线| 一个人看的www片免费高清视频 | 喷潮在线观看 | 精品国产一二三区 | 丝袜脚交免费网站xx | 麻豆国产精品视频 | 亚洲麻豆精品 | 亚洲免费成人 | 337p粉嫩大胆噜噜噜噜噜91av | 久草香蕉在线 | 影音先锋午夜 | 国产一区二区黄色 | 中文字幕第二页 | 哪里可以看黄色 | 久色伊人| 国产精品一区二区在线播放 | 成人午夜网址 | 久久中文字幕在线视频 | 精品久久久久久久久久久久久久 | 国产一区二区免费 | 日韩av电影免费观看高清完整版在线观看 | 久久久亚洲成人 | 色cccwww永久免费 | 自拍偷拍亚洲 | 美教师地狱责罚主演叫什么 | 欧美人xxxxx| 日韩专区在线视频 | 91九色蝌蚪在线观看 | 丝袜毛片 | 亚洲色欲色欲www在线观看 | 性xx紧缚网站| 波多一区二区 | 午夜免费大片 | 自拍av网站| 欧美一区二区三区日韩 | 女女互慰吃奶互揉调教捆绑 | 一区二区久久久久久 | 在线看福利av | 成人在线二区 | 成人中文字幕在线观看 | 火辣福利视频导航 | 中文字幕久热精品视频在线 | 天天色天天射综合网 | 免费在线一区二区 | 国产日韩欧美成人 | 久久久欧美精品 | 国产专区一区 | 日本大胆人体视频 | 日韩专区在线观看 | 日日日插插插 | 亚洲一区二区在线视频 | 天堂av片| 麻豆国产原创 | 4388成人网| 夜夜嗨网站| 久久久久高清 | 美女福利视频一区 | 黄色小说视频在线 | 欧美富婆性猛交 | av电影在线不卡 | 天堂√在线中文最新版8 | 欧美一区视频 | 国产精品网友自拍 | 天天爱天天做天天爽 | 成人18夜夜网深夜福利网 | 色频在线| 国产精品毛片在线 | 午夜电影网一区 | 欧美午夜激情在线 | 欧美三四区 | 一本一道久久综合狠狠老精东影业 | 丝袜色网 | 一区二区三区蜜桃 | 色撸撸在线视频 | 男生把裤子脱了吃我的j男男 | 女生扒开下面让男生捅 | 日日夜夜天天操 | 99在线视频观看 | 欧美黄色一级视频 | 国产超碰人人模人人爽人人添 | 亚洲黄色大片 | 绿帽社区| 午夜激情四射 | 先锋资源av| 欧美精品videossex88 | 国产亚洲欧美日韩一区二区 | 久久亚洲精品小早川怜子 | 91精品综合| 不用播放器的av | 欧美激情1区2区 | 欧美精品成人一区二区三区四区 | 亚洲激情成人网 | www在线播放 | 国产香蕉尹人视频在线 | 粉嫩aⅴ一区二区三区四区五区 | 懂色av蜜臀| 国产69精品一区二区亚洲孕妇 | 狠狠干天天射 | 欧美视频二区 | 国产av毛片 | 久久久天堂国产精品女人 | 国产盗摄xxxx视频xxxx | 男女一起插插插 | 综合久久一区二区三区 | 好色视频网站 | 第一福利网av | 久久一区二区三区中文字幕 | 国产色在线,com | 成人激情综合网站 | 午夜亚洲精品 | 精品久久久久久久久久岛国gif | 女性向小h片资源在线观看 成人欧美日韩 | 岛国 中文字幕 | 久久久久久久影院 | 国产99久久久欧美黑人 | 91精品论坛| 久热在线观看视频 | 2018国产精品视频 | 视频一区二区三区中文字幕 | 国产黑丝一区 | 国产91精品免费 | 丁香欧美| 在线成人小视频 | 精品国产乱码久久久久酒店 | 日本黄色站 | 久久久精品网站 | 欧美少妇精品 | 色婷婷久久一区二区三区麻豆 | 麻豆专区一区二区三区四区五区 | 午夜色老头 | 第一福利在线视频 | 大肉大捧一进一出免费三分钟 | www国产亚洲精品久久麻豆 | 麻豆视频网站入口 | 国产高清一二三区 | av在线进入 | 两性午夜激情视频 | 国产无遮挡又黄又爽免费网站 | 精品国产91亚洲一区二区三区www | 午夜国产区 | 久久视频精品在线 | 中出在线播放 | 91影院在线 | 精品国产一区二区三区免费 | 亚洲一级网站 | 污污视频在线播放 | 欧美精品18videosex性欧美 | 91精品视频在线免费观看 | 老太太的镖客在线观看播放 | av基地在线观看 | 女同在线视频 | 日韩精品久久久久久久玫瑰园 | 很很日| 天堂√中文最新版在线 | 高清一区二区三区日本久 | 亚洲国产日韩精品 | 91九色中文| 都市激情第一页 | 欧美激情欧美激情在线五月 | 国产999精品 | 日韩在线电影 | 激情伊人 | 亚洲国产精品日韩 | 日韩在线观看免费高清 | 午夜久久久 | 老牛影视免费一区二区 | 久久福利视频导航 | 四虎影视av| 色www精品视频在线观看 | 欧美成人精品 | 强扒乳罩摸双乳吃奶视频 | 欧美一区二区三区在线看 | 综合色区偷拍 | 日韩有码在线视频 | 日日操夜夜操天天操 | 亚洲成人一区二区三区 | 美女av网站在线 | 久久视频在线 | 婷婷午夜影院 | av播放网站 | 国产日本欧美视频 | 久久99精品久久久久子伦 | 高潮白浆女日韩av免费看 | 最近2019好看的中文字幕免费 | 国产精品www色诱视频 | 国产午夜精品一区二区三区视频 | 国产在线观看免费av | 色佬视频在线观看 | 另类视频在线观看+1080p | 久久精品欧美视频 | 国产精品中文在线 | 久久精品色欧美aⅴ一区二区 | 亚洲美女直播 | 欧美激情在线看 | 一本色道久久综合亚洲精品按摩 | feel性丰满白嫩嫩hd | 五月天激情图片 | 久久瑟瑟| 成人在线观看www | 亚洲美女激情视频 | 欧美日韩成人一区二区三区 | 欧洲成人在线观看 | 外国美女网站 | 91久久精品一区二区 | 国产亚洲欧美一区 | 第一福利在线视频 | 欧美日韩高清一区 | 亚洲综合网站在线观看 | 色妞色视频一区二区三区四区 | 国产va在线 | 韩国女主播一区二区三区 | 五月婷婷激情综合网 | 亚洲精品一区二区三区精华液 | 成熟的女同志hd | www.免费在线观看 | 国产欧美精品国产国产专区 | 久久在线精品视频 | 欧美日韩二区三区 | japan粗暴video蹂躏 | 国产免费av电影 | 黄色高清在线观看 | 欧美不卡一区二区 | 夜夜嗨av一区二区三区四区 | 日韩欧美网 | 人民的名义第二部 | 99伊人网 | 泷泽萝拉女教师被强在线 | 亚洲男人av在线 | 在线观看免费小视频 | 狠狠噜天天噜日日噜 | 亚洲跨种族黑人xxx 神马午夜一二三区 | 欧美日本成人 | 日韩 欧美 高清 | 在线精品观看 | 婷婷影院在线 | 麻豆福利在线 | 欧美一区二区三区视频 | 欧美片第一页 | 日韩第一区第二区 | av超碰在线 | 欧美精品首页 | 床戏高潮做进去大尺度视频网站 | avtt中文字幕在线 | 理论片一区 | 国产视频综合在线 | 色秀视频在线观看 | 女人色av| 男女生一起相嗟嗟嗟免费观看 | 欧美性受极品xxxx喷水 | 在线播放二区 | 可以免费看av| 很黄很色的视频 | 国产婷婷精品 | 亚洲人成在线播放 | 都市豪门艳霸淫美妇 | 女人爽到高潮免费视频 | 韩国av在线看 | 草莓巧克力香氛动漫的观看方法 | 亚洲激情av | 日韩精品在线网站 | 亚洲精品一区二区三区精华液 | 丰满肉肉bbwwbbww | 美女日批免费视频 | 中文字幕一二三区在线观看 | 亚洲国产精品va在线看黑人 | 国产91精品入口 | 3d动漫精品啪啪一区二区免费 | 99免费精品 | 亚洲一区二区免费在线 | 国产精选一区 | 一二三区在线观看 | 久久久久区 | 欧美一级在线 | 精品国产一区二区三区久久久 | 亚洲天堂免费观看 | 国产精品12| 国产在线不卡精品 | 色偷偷成人 | 777色婷婷| 亚洲欧美另类图片 | 日韩av高清在线观看 | 伊人网视频 | beeg欧美极品少妇 | 老司机成人在线视频 | 国产精品视频网站 | 老司机av导航 | 极度诱惑香港电影完整 | 一本一本久久 | 久久在线播放 | 在线视频日本 | 成人爽a毛片一区二区免费 日本久久精品视频 | 欧美成人精品在线视频 | 国产欧美一区二区三区不卡高清 | 免费黄色国产 | 欧美成人中文字幕在线 | 看片免费网址 | 亚洲精精品 | 欧美日韩美女在线观看 | 国产一区二区成人 | 国户精品久久久久久久久久久不卡 | 岛国一区二区在线观看 | 国产农村妇女精品 | 国产日产精品一区二区三区四区 | 人人做人人澡人人爽欧美 | www.男人的天堂 | 日韩av一区在线观看 | 打屁股无遮挡网站 | 欧洲成人在线观看 | 欧美巨乳美女视频 | 日韩电影中文字幕 | 一区二区欧美激情 | 国产高清一二三区 | 久久久久久久久国产精品 | 国产精品91在线 | 婷婷综合网站 | 91成人黄 | 日韩一区二区电影在线观看 | 中文字幕永久免费 | av夜夜操 | 少妇av导航 | 国产天堂网| 九九免费视频 | 天天躁日日躁狠狠很躁2023 | 偷拍视频免费观看 | 黑丝扣逼 | 日韩中文字幕在线观看 | 日日操夜夜 | 欧美aaaaaa午夜精品 | 视频一区视频二区在线观看 | 日韩亚洲欧美一区二区三区 | 精品黑人一区二区三区久久 | 毛片大全在线观看 | 三区精品视频 | 黄色av在 | 日韩激情av在线 | 亚洲精选在线 | 麻豆精品一二三 | 福利影院在线观看 | 爱情岛亚洲首页论坛 | 国产精品v亚洲精品v日韩精品 | 97久久精品午夜一区二区 | 黄色免费视频 | 黄色av网 | 丁香网五月天 | 视频区国产 | 日韩一区二区三免费高清在线观看 | 96精品视频在线 | 亚洲美女视频网站 | 亚洲综合久久久久 | 最新国产在线视频 | 亚洲欧洲综合另类 | 欧洲女性下面有没有毛发 | 久久国产精 | 国产精品福利一区二区三区 | 美女屁股网站 | 在线播放一区二区三区 | 男女激情实录 | 久久精品亚洲精品国产欧美kt∨ | 97综合网 | 一区二区三区精品视频在线 | 亚洲第一黄色网 | 久久精品区| 国产又粗又黄又硬 | 精品国产一区二区三区性色av | 传媒视频在线观看 | 超碰在线中文 | 日韩激情图区 | 美女少妇视频 | 亚洲三级小视频 | 亚洲综合色丁香婷婷六月图片 | 福利精品一区 | 就是色欧美 | 精品久久电影 | 欧美日本一道 | 欧美一级欧美三级在线观看 | 丰满放荡岳乱妇呻吟视频 | 天天av天天翘天天综合网 | 国产精品丝袜黑色高跟 | 一区二区不卡在线 | 天堂乱色| 天堂久久一区 | 黄色免费网址在线观看 | 国产精品69久久久久 | 豆花视频网站在线观看 | 欧洲黄网| 国产精品久久久久影院老司 | 国产成人免费观看 | 欧美在线xx | 欧洲激情综合 | 欧美理论在线 | 午夜不卡视频 | 最新最近中文字幕 | 俄罗斯精品一区二区 | 久久高清一区 | 女人裸体又黄图 | 一区二区三区毛片 | 欧洲成人综合网 | 国产v日产∨综合v精品视频 | 影音先锋va | 女尊高h男高潮呻吟 | 久久精品99国产精品日本 | 日韩欧美精品在线视频 | 精品成人动漫 | 国产福利视频一区二区三区 | 青娱网电信一区电信二区电信三区 | 欧美在线视频免费 | 免费在线观看毛片视频 | 天堂伊人网 | av导航在线 | 麻豆短视频| 日韩精品乱码av一区二区 | 亚洲欧美另类国产 | 雷电将军和丘丘人繁衍后代视频 | 亚欧精品在线观看 | 91捆绑调教 | 色综合视频网站 | 美女图片大黄动图 | 久久精品免费电影 | 男生把裤子脱了吃我的j男男 | 亚洲一区二区三区色 | 免费视频网站www | av色图 | 色综合加勒比 | 啪啪免费视频网站 | 国产精品欧美激情 | 国产午夜精品久久久 | 天天做天天干 | 国产视频一 | 成人h视频| 亚洲伦乱视频 | 手机黄色网址在线观看 | 超在线视频 | 女女互慰吃奶互揉调教捆绑 | av免费在线电影 | 美女被叉叉的影院 | 成人福利资源 | 亚洲国产精品人人做人人爽 | 免费av网址观看 | 毛片视频播放 | 一区二区三区中文在线 | 白丝美女被草 | 亚洲欧美99 | 国产精品免费一区 | 2019国产精品| 韩国伦理片在线观看 | 欧美xxxxx牲另类人与 | 臭脚猛1s民工调教奴粗口视频 | 精品国产综合区久久久久久 | 中文毛片| 久久精品久久精品国产大片 | 日韩激情视频网站 | 日韩专区 中文字幕 | 亚洲黄色录像片 | 精品黄色片 | 桃色视频在线 | 人体裸体bbbbb欣赏 | 午夜噜噜噜 | 丰满的继母4韩国电影 | 国产欧美一区二区精品婷婷 | 国产精品xxx | 久久成人久久爱 | 人妖网址| 伊人在线| 欧美精品国产一区 | 国产调教视频 | 一起草av| 超薄丝袜足j好爽在线 | 国产美女高潮网站 | 亚洲人高潮女人毛茸茸 | av看片在线观看 | 国产精品77777竹菊影视小说 | 欧美三个黑人玩3p | 91精彩视频 | 亚洲一二三四在线观看 | 国产亚洲一区二区三区 | 久久综合成人精品亚洲另类欧美 | 亚洲免费中文 | 久久人人爽人人爽人人片亚洲 | 麻豆叼嘿视频 | 2019中文字幕免费视频 | 少女与动物高清版在线观看 | 日韩欧美国产一区二区 | 在线永久免费观看黄网站 | 黄色污污视频在线观看 | 超碰在线a| 国产精品www. | 欧美一区二区色 | 香蕉视频在线播放 | 欧美成人aa大片 | 日本一二三区视频 | 蜜桃av在线免费观看 | 91精品视频大全 | 老司机精品视频在线 | 黄h视频 | 九九热在线观看 | 成人黄色免费网站在线观看 | 粗大的进进出出 | 91精品视频播放 | 老司机一区二区三区 | 亚洲免费在线看 | 国产白丝精品91爽爽久久 | 天天撸天天射 | 伊人久久大香线蕉av一区 | 久久久精品有限公司 | 欧美视频一二三区 | 久久激情视频 | 九九热国产视频 | 天堂av在线影院 | 成人av专区 | 99色在线观看 | 美女捅肌肌 | 久久偷看各类wc女厕嘘嘘偷窃 | 国产成人免费在线观看 | 亚洲一区二区欧美日韩 | 校园春色欧美 | 欧美一区第一页 | h文在线观看免费 | 免费看黄禁片 | 国内自拍偷拍视频 | 中日韩av电影 | 中文字幕在线观看不卡 | 国产一级在线免费观看 | 日本免费一区二区三区四区 | 舔花蒂 | 国产日韩欧美在线看 | 无吗高清视频 | 国产91精品露脸国语对白 | 不卡视频在线观看 | 亚洲精品中字 | 日本大片在线看黄a∨免费 久久精品国产999大香线蕉 | 日韩国产激情在线 | 国产区一区二区 | 国产成人高清视频 | 色小姐在线视频 | 亚洲观看在线 | 国产福利资源在线 | 亚洲 中文 女同 | 99re8在线精品视频免费播放 | 亚洲一区二区三区四区在线播放 | 天天爱天天操天天射 | 日本最新在线视频 | 欧美成人一区二区三区电影 | 亚洲精品影视在线观看 | 2017狠狠干| 美女扒开尿口网站 | 日本不卡高清视频 | 成人黄色网页 | 欧美精品777 | 国产精品自拍偷拍 | av高清不卡 | 99久久这里只有精品 | 国产美女作爱全过程免费视频 | 国产精品视频免费在线观看 | 18女人毛片 | 在线观看亚洲专区 | 国产视频在线观看网站 | 高潮毛片无遮挡 | 国产午夜在线播放 | 国产日韩欧美精品在线 | 看了下面会湿的视频 | av在线免费观看www | 久久九色 | av在线电影院| 成人av免费在线观看 | 91系列在线| 色多多导航 | 高清欧美性猛交xxxx黑人猛交 | 日韩亚洲欧美在线观看 | 激情成人综合 | 亚洲国产精彩中文乱码av | 欧美 日韩 国产 中文字幕 | 射射色 | 天天av综合网 | 亚洲精品调教 | 国产精品久久久久久久久免费丝袜 | 在线视频天堂 | 麻豆精品在线视频 | 日韩激情网站 | 欧美日韩激情一区二区三区 | 久久精品视频一区二区三区 | 在线免费精品视频 | 国内精品第一页 | 精品一二三区 | 91成人午夜 | 欧美 日韩 国产 成人 在线观看 | 亚洲一区福利视频 | 福利国产在线 | 中文字幕第八页 | 日韩成人小视频 | 男女互操av| 成人自拍网站 | 久综合网 | 91美女视频网站 | av影片在线播放 | 99re国产精品| 国产精品一卡二卡在线观看 | 日韩激情第一页 | av中文字幕国产 | 久9999| 久久久久高清 | 亚洲精品免费在线观看 | 国产成人精品国内自产拍免费看 | 精品笔趣阁 | 成人在线视频免费观看 | 欧美最猛性xxxxx免费 | 久9999| 日韩在线视频一区二区三区 | 先锋av资源吧 | 精品一区二区在线视频 | 轮番上阵免费观看在线电影 | 日本伊人中文字幕 | 亚洲成人自拍视频 | 夜夜摸视频网 | 欧美三级韩国三级日本三斤 | 欧美成人精品一区二区三区 | 西西人体www大胆高清 | 涩涩网站免费观看 | 日韩精品专区 | 尤物视频在线观看国产性感 | 外国av在线| 91麻豆福利| 性色网站| 男人操女人下面视频 | 国产福利免费在线 | 日本午夜在线 | 国产免费av电影 | 国产精品99久久久久久久vr | 亚洲香蕉| 天天澡天天狠天天天做 | 久久av一区二区三区亚洲 | 五月天资源站 | 网友自拍视频 | 伊人久久大香线 | 亚洲精品韩国 | 天堂久久综合 | 欧美精品18 | 国产永久精品大片wwwapp | 2020狠狠操 | 日韩av在线不卡 | 国产成人精品综合在线观看 | 绯色av影视| 91丨九色丨蝌蚪丨少妇在线观看 | 国产电影免费观看高清完整版视频 | 女人逼视频 | 中文字幕制服诱惑 | 成人小视频免费观看 | 岛国理论片 | 91麻豆国产自产在线观看 | 亚洲色图二区 | 黑鬼巨鞭白妞冒白浆 | 影音先锋中文在线视频 | 不卡av电影在线观看 | 欧美日韩一卡 | 日本欧美在线看 | 精品一区二区三区电影 | 日本在线视频播放 | 国产精品福利小视频 | 国产精品自拍小视频 | 亚洲婷婷伊人 | 爱啪啪av导航 | 日韩欧美成人一区二区 | 国产喷白浆一区二区三区 | 免费黄色观看 | 女人裸体免费网站 | 九九福利视频 | 温柔善良的儿媳妇免费大结局 | 亚洲人体一区 | 国产日韩欧美一区二区三区在线观看 | 娇妻被肉到高潮流白浆 | 黄色福利 | 久久精品九九 | 无遮挡在线观看 | 欧美国产日本韩国 | 日韩国产91 | 字幕中文 | 成人av高清在线 | 国产在线视频导航 | 国产亚洲精品中文字幕 | 日韩有码视频在线 | 欧美三级韩国三级日本三斤 | 亚洲欧美日韩精品 | 欧美巨乳在线观看 | 日韩一区二区三区四区 | 精品国产18久久久久久二百 | 亚洲精品免费在线 | 在线成人一区二区 | 成为女友闺蜜脚下的奴 | 91麻豆精品秘密 | 久久精品8| 美女啪啪网 | 2018av中文字幕 | 国产精品xxx在线观看www | 深夜成人在线观看 | 黄网在线免费看 | 丁香花电影免费播放在线观看 | 精品久久久久久久久久久久久 | 色噜噜一区二区三区 | 日本免费视频 | 美女久久久久 | 日韩一级片在线播放 | 奇米四色777 | 伊人久久大香线蕉综合热线 | 欧美激情99| 韩剧19禁啪啪无遮挡大尺 | 自拍偷拍欧美激情 | 男人av在线播放 | 香蕉视频国产在线观看 | 亚洲欧美三级在线 | 国产精品一区二区久久久久 | 中文字幕天堂av | 欧美日韩一级视频 | 国产乱淫av一区二区三区 | 99久久精品一区二区成人 | www.中文字幕.com | 国产高清福利在线 | 日韩精品h | 理论片大全免费理伦片 | 两女双腿交缠激烈磨豆腐 | 亚洲色图制服诱惑 | 四虎av| av超碰在线 | 超碰成人免费在线 | 狠狠干资源网 | 免费看黄禁片 | 免费看黄的网址 | 91涩涩视频| 亚洲欧洲在线看 | 秘密基地免费观看完整版中文 | 色综合天天综合网国产成人网 | www五月天| 亚洲热av | 麻豆视频免费 | 欧美爱爱免费视频 | 国产午夜在线播放 | 捆绑紧缚一区二区三区视频 | 年轻的少妇中文 | 91久久久久久久久久久 | free性丰满69性欧美天美 | 欧美午夜一区二区 | 黄网站在线播放 | 国产区在线看 | 一区二区在线不卡 | 欧美日韩免费在线 | zzjj国产精品一区二区 | 欧美性xxxxxx少妇 | 久久久久亚洲综合 | 99久热re在线精品99 6热视频 | 久久影院一区二区三区 | 亚洲乱码国产乱码精品天美传媒 | a v在线视频 | 中文字幕av毛片 | 91情趣视频 | 色专区| 国产精品偷伦一区二区 | 久久 国产 尿 小便 嘘嘘 | 日韩成人激情 | 一区二区三区四区av | 99精品视频免费 | 91天天操| 国产在线视频导航 | 依人99| 欧美日韩精品国产 | 国产黄色片av | 日韩高清不卡一区二区三区 | 娇小tube性极品娇小 | 久久一二三四 | 精品成a人在线观看 | 久久久www成人免费精品 | 日韩av伦理片 | 欧美裸体网站 | 在线一区av | 91婷婷韩国欧美一区二区 | 男生草女生的视频 | www.日韩视频 | 中文字幕亚洲字幕 | 扒开美女内裤狂揉下部 | 亚洲五月花 | 9.1在线观看免费 | 黄污视频在线看 | 国产区一区二区三区 | 天堂在线网 | 99国产精品久久久久久久 | 中文字幕免费播放 | 中出在线播放 | 精品国产成人av | 成人黄色在线 | 成码无人av片在线观看网站 | 色婷婷香蕉在线一区二区 | 黄色操人视频 | www.555国产精品免费 | 91精品国产乱码久久久久久久久 | 另类图片第四色 | 国产流白浆高潮在线观看 | 精品香蕉一区二区三区 | 欧美尻逼 | 一级黄色片在线 | 黄色av网站在线免费观看 | 成人h视频在线观看 | 九色porny国产 | 国产精品第1页 | 欧美色资源站 | 污污视频大全 | 在线精品国产 | 久久亚洲资源 | 欧美在线视频免费 | 成人av在线资源 | 欧美精品一区二区三区在线 | 美女自卫慰免费视频www免费 | 中日韩男男gay无套 亚洲一区二区高清 | 国产在线一区二区 | 日本一二三区在线视频 | av大帝 | 日韩中文字| 美女又爽又黄免费网站直播 | 久久99精品久久只有精品 | 亚洲国产成人在线 | 草莓视频成人在线 | 懂色av一区二区 | 日韩在线激情 | 日韩av中文 | 巨大胸大乳奶电影 | 毛片在线免费播放 | 成人晚上爱看视频 | 男女互操在线观看 | eeuss一区二区三区 | 男人的天堂你懂的 | 午夜国产福利 | 国产噜噜噜噜久久久久久久久 | 最新免费av在线 | 美女性生活视频 | 亚洲黄色在线 | 白丝女仆被免费网站 | 羞羞导航 | 日韩欧美一卡 | 国产一区二区三区久久久 | 亚州av一区 | 国产稀缺真实呦乱在线 | 黄色短视频在线观看 | 久久久久成人精品 | 日韩欧美在线播放 | 国产精品视频在线免费观看 | 高清性爱视频 | 国产乱理伦片a级在线观看 美国三级日本三级久久99 | 日韩一级淫片 | 欧美美女网站 | 精品日韩在线观看 | 91精品亚洲 | 91免费观看网站 | 欧美另类videosgrstv | 在线观看你懂的网站 | 视频一二区 | 色老头成人网 | 日韩精品一区二区在线 | 久久精品国产精品亚洲红杏 | 国产一级淫片免费 | 亚洲国产精品尤物yw在线观看 | 丁香婷婷激情 | 日韩免费一级 | 欧美在线视频免费播放 | 美女黄十八岁以下禁止观看 | 国产午夜在线 | 一区二区成人在线视频 | 欧美日韩一区二区三区 | 日韩在线在线 | 成人国产精品av | 日韩av中文字幕一区二区 | 成人激情免费网站 | 一区二区三区四区日韩 | 奇米网77 | 黄视频免费在线播放 | 人人草人人干 | 911视频高清完整版在线观看 | 午夜激情亚洲 | 九九热在线视频 | 国产激情一区二区三区在线观看 | 国产伦精品一区二区三区精品视频 | 欧美激情在线狂野欧美精品 | 青青青视频在线 | 在线观看你懂的网站 | 中文天堂av | 欧美精品黄色 | 91色呦呦 | 五月婷婷开心中文字幕 | 91原创国产 | 精品亚洲自拍 | 欧美日韩卡一卡二 | 色悠悠视频在线 | 色噜噜一区二区 | 美女校花脱精光 | 欧美另类极品videosbest最新版本 | 国产超碰在线 | 一本一道久久综合狠狠老精东影业 | 国产主播啪啪 | 国产人妖av | 国产精品av一区二区 | 亚洲成人激情小说 | 成人高清视频免费观看 | 久久黄网站 | 一级丰满大乳hd高清 | 亚洲美女屁股眼交 | 色网在线免费观看 | 青云志在线观看 | 亚州一区二区 | 国产xxxx视频 | 久久久久久国产精品一区 | 狠狠干狠狠爱 | 国产精品porn | 成人精品在线 | 亚洲最大色网站 | 欧美黄色免费 | 国产精品一区二区三 | 色综在线 | 激情文学亚洲 | 在线播放国产视频 | 美女啪啪自拍 | 亚洲美女影院 | 女同性做受全过程动图 | 18国产精品| 免费看黄色漫画 | 亚洲一区二区三区精品动漫 | 韩国美女福利视频 | 久久综合一区二区 | 日韩高清一级 | 欧美人在线视频 | 萌白酱喷水视频 | 久久久午夜视频 | 国产福利电影网 | 亚州av在线 | 久久亚洲精选 | av天天网| 免费成人结看片 | 伊人网综合 | 色戒电影未测减除版 | 成人伊人222 | 影音av电影 | 日韩在线一区二区三区免费视频 | 爽爽淫人综合网网站 | 99视频网站| 久久综合国产精品 | 久久视频在线观看免费 | 国产主播av | 国际av在线 | 中文字幕亚洲自拍 | 欧美成人高清 | 亚洲一区二区三区乱码aⅴ蜜桃女 | 人人干人人插 | 亚洲成国产人片在线观看 | 成人免费网站在线看 | 欧美一级视频在线观看 | 欧美波霸videosex极品 | 久久天堂 | 日韩经典第一页 | 黄网站视频在线观看 | 国产精品亚洲在线 | 66影视电影港 | 91国产视频在线播放 | 精品精品久久 | 国产福利小视频在线观看 | 99久视频 | 视频一区三区 | 欧美成人精品在线视频 | 99re在线视频这里只有精品 | 天天射综合 | 久久精品观看 | 欧美精品成人一区二区三区四区 | 美女被草网站 | 欧美精品aⅴ在线视频 | 亚洲老司机在线观看 | 欧美午夜一区二区三区免费大片 | 色护士影院 | 国产男男gay做受ⅹxx高潮 | 色图自拍 | 国内精久久久久久久久久人 | 337p亚洲精品色噜噜噜 | 美女日批视频 | 日日夜夜精品视频免费 | 久日视频 | 对白刺激国产子与伦 | 深夜视频免费在线观看 | 青青青免费在线视频 | 中文字幕网址 | 成人网视频 | 健身教练巨大粗爽gay视频 | 成人在线综合 | 天天操天天操天天 | 天天cao| 国产精品 欧美激情 | 在线免费视频一区二区 | 色偷偷偷偷 | 自拍毛片 | 男女无遮挡免费视频 | 日韩av大全 | 国产日韩欧美一二三区 | 精品美女在线观看 | 国产乱码精品一区二三赶尸艳谈 | 国产1区2区3区在线 av电影免费播放网站 | 青娱乐久久 | 久久午夜在线 | 九九视频在线 | 黄视频免费| 日韩黄色小视频 | 337p亚洲精品色噜噜狠狠 | av日韩国产 | 在线不卡av电影 | 麻豆成人av | 理论片大全免费理伦片 | 温柔善良的儿媳妇免费大结局 | 一本大道久久a久久精二百 色哟哟黄色 | 精品自拍视频 | 亚洲激情视频在线播放 | 欧美浪妇xxxx高跟鞋交 | 爽爽爽av| 久久77| 欧美日韩亚洲精品一区二区三区 | 97人人精品| 亚洲一区二区免费在线观看 | 亚洲四虎av | 国产精品影院在线观看 | 福利片av | 性欧美video另类hd尤物 | 国产黑丝在线播放 | 久久一区二区三区中文字幕 | 香蕉视频A| 国产乱轮一区 | 天堂在线中文资源 | 日韩一区免费 | 亚洲一区视频 | 伊是香蕉大人久久 | 三年大全国语中文版免费播放 | 成人激情小说网站 | 欧美激情国产精品 | 欧美整片在线观看 | 亚洲国产一二三 | 欧美成人免费一级人片100 | 欧洲精品一区二区 | 性调教视频 | 日韩精品免费看 | 亚洲国产成人精品电影 | 欧美日本免费一区二区三区 | 欧美三级a| 久久黄色影院 | 久久亚洲精品一区二区 | 久久色图 | 婷婷色狠狠 | av视在线 | 日韩av电影网址 | 精品国产美女 | 奇米影视精品 | 久久中文字幕视频 | 欧美三级视频在线观看 | 久久国产一区二区三区 | 亚洲国产精华液网站w | 国产乱码精品一区二区三区不卡 | 影音先锋每日 | 欧美三级第一页 | 天堂视频免费在线观看 | 色94色欧美sute亚洲线路二 | 久久全国免费视频 | 国产精品自产拍在线观看 | av成人中文字幕 | 欧美v亚洲v综合ⅴ国产v | 中国黄色大片 | 蜜臀av一区二区在线观看 | 四虎影视成人永久免费观看亚洲欧美 | www.免费在线观看 | 美女视频黄频视频大全 | a在线v| 奇米一区二区三区 | 日韩av影片在线观看 | 天天躁日日躁狠狠躁av麻豆男男 | 成人福利网站导航 | 又黄又爽的网站 | 无遮挡又黄又刺激的视频 | 草莓视频黄在线观看 | 亚洲夫妻自拍 | av在线.com| 亚洲深夜福利视频 | 久久精品视频一区 | 日本看黄网站 | 性一交一乱一色一免费无遮挡 | 99爱在线观看 | 国产一线天粉嫩馒头极品av | 香蕉视频网页版 | 中文一区在线播放 | 黄漫在线免费观看 | 国产精品综合 | 都市激情欧洲 | 男人操女人免费视频网站 | 先锋资源一区二区 | 色综合天天综合网天天看片 | 朝桐光一区二区 | 青青草中文字幕 | 樱桃视频入口在线观看网站 | 欧美性做爰毛片 | 久久久久黄色 | 国产精品夜夜夜 | 成人av二区| 午夜精品av | 午夜在线不卡 | av有声小说 | 18videosex性欧美麻豆 | 都市激情亚洲色图 | 日韩一区欧美二区 | 亚洲国产精品女人久久久 | 另类激情文学 | 日本男男激情gay办公室 | 精品国产乱码久久久久久1区2区 | 美女视频一区 | 激情五月六月婷婷 | 女futa攻玩遍整个后宫 | 国产人人干 | 日韩精品一区二区三区swag | 日本在线免费视频 | 99国产精品一区 | 91精品视频大全 | 五月激情在线 | 成都免费高清电影 | 99热免费在线 | 国产福利精品一区二区 | 亚洲欧洲中文日韩久久av乱码 | 美女扒开尿口网站 | 国产精品v亚洲精品v日韩精品 | 欧美极品一区 | 一个大一个区 | 男人天堂 | 午夜大胆视频 | 一区二区三区在线观看欧美 | 丁香视频全集免费观看 | 91精品国产99久久久久久红楼 | 红桃视频网站 | 超喷在线 | 日韩久久精品 | 亚洲欧洲性 | 北条麻妃一区二区三区在线观看 | 国产精品毛片久久久久久 | 亚洲国产日韩欧美一区二区三区 | 钰慧的mv视频在线观看 | 一区二区欧美亚洲 | 在线a电影 | 男男在线观看 | 狠狠干av | 午夜精品一区二区三区免费视频 | 国产偷亚洲偷欧美偷精品 | 男女生一起相嗟嗟嗟免费观看 | 亚洲激情视频在线 | 亚洲91久久| 国产做受高潮动漫 | 又黄又色的网站 | 成人免费在线视频网址 | 欧美成年人在线观看 | 欧美不卡视频一区 | 国产色一区二区 | 色屁屁在线 | 国产大奶在线 | 美女漏胸网站 | 欧美黄色免费 | 日韩精品一二三 | 亚洲一区在线观看视频 | 女生扒开下面让男生捅 | 国产福利免费在线 | 欧美国产一区二区在线观看 | 狠狠干网站 | 亚洲精品日韩综合观看成人91 | 免费在线视频播放 | 成人国产在线观看 | 亚洲精品久久区二区三区蜜桃臀 | 国产精品一区二区久久久 | 日本一区二区精品视频 | 国产99久久久久久免费看农村 | 欧美一级xxx | 先锋影音av在线资源 | 欧美美女一区二区 | 国产精品xxxx | 我的丝袜美腿尤物麻麻 | 亚洲精品福利 | 欧美自拍视频 | 欧美 日韩 亚洲 一区 | 日本一二三不卡 | 亚洲精品电影网站 | 九九色综合网 | 日韩精品在线一区 | 亚洲福利视频网站 | 美女扒开腿男人爽桶 | 免费h片在线观看 | 久久国产精品电影 | 91美女在线看 | 日韩av中文字幕一区二区三区 | 色成人亚洲www78ixcom | 亚洲天堂中文字幕 | 国产精品成人av性教育 | 国产91在线高潮白浆在线观看 | 精品一区二区在线播放 | 91在线美女| 午夜在线精品偷拍 | 又粗又硬又黄又爽的视频 | 日本美女网站在线观看 | 99re6这里只有精品 | 久久精品国产99国产精品 | 国产a级全部精品 | av免费电影网址 | 97人人做人人爱 | 国产一区二区丝袜高跟鞋图片 | 日韩激情一区二区 | 久久久一区二区三区 | 亚洲欧美视频一区二区三区 | 国产精品久久网 | 国产羞羞网站 | 国产精品福利影院 | 毛片网站在线 | 91干美女 | 亚洲欧美一区二区三区国产精品 | 国产成人精品免高潮在线观看 | 欧美第3页 | 日本在线中文 | 欧美在线观看网站 | 99在线精品视频在线观看 | av青青草 | 可以免费观看的毛片 | 日本理论片午伦夜理片在线观看 | 国产伊人久久 | 97成人在线视频 | 五月婷婷久久丁香 | 18videosex性欧美麻豆 | av福利资源 | 欧洲亚洲免费视频 | 91嫩草视频在线观看 | 国产精品77777竹菊影视小说 | 韩国美女黄色 | 日韩短视频 | 国产欧美一区二区三区久久人妖 | 黄色精品网站 | 国产亚洲精品久久久 | 草莓视频在线观看黄色 | 亚洲国产成人自拍 | 中文 日韩 欧美 | 二区三区中文字幕 | 亚洲男人网站 | 午夜精品久久久久久不卡8050 | 日韩在线三区 | 永久黄网站色视频免费 | 不卡视频一二三 | 日本中文在线观看 | 日本一本二本三本在线 | 欧美成人一区二区三区片免费 | 麻豆精品av| 自拍av一区二区三区 | 五十路交尾 | 亚州av中文字幕 | 国产精品久久久久久久电影 | 欧美成人精品激情在线观看 | 午夜剧场中文字幕 | 性做久久久久久久免费看 | 五月天男人天堂 | 91av电影网站 | 黄色爽视频 | 久久综合影视 | 国产夜色精品一区二区av | 中文字幕在线视频免费观看 | 丝袜理论片在线观看 | 亚洲一二三专区 | 日韩综合精品 | 久久婷婷综合激情 | 91在线观看免费高清完整版在线观看 | 亚洲成av人片一区二区三区 | 强行挺进白丝老师里呻吟 | 日日夜夜精品视频免费 | 欧美午夜精品理论片a级大开眼界 | 国产精品入口麻豆九色 | 国产午夜性春猛交ⅹxxx | 欧美精品片| 午夜欧美网站 | 中文字幕 欧美日韩 | 深爱激情站 | 一区 中文字幕 | 国产精品一区2区 | 亚洲第一二三四五区 | 亚洲欧美精品一区二区 | 国产特级毛片 | 国精产品一区一区三区mba桃花 | 最新国产精品久久 | 欧美国产精品 | 女女百合视频 | 美女网站视频在线观看 | 欧美日韩另类视频 | 蜜臀av在线播放一区二区三区 | 少妇久久久 | 韩国久久久 | 一区二区在线看 | 日本一区免费视频 | 在线观看欧美日韩国产 | 人人草人人干 | 青娱乐久久 | 蜜桃福利视频导航 | 91成人免费在线观看 | 草莓视频色在线观看 | 日本少妇喂奶 | 婷婷色五| 拍真实国产伦偷精品 | 西西午夜视频 | 总裁憋尿呻吟双腿大开憋尿 | 国产精品一二区 | 国产视频911 | 亚洲人在线观看 | 丝袜护士强制脚足取精 | 中文字幕亚洲精品在线观看 | 久久久久国色av免费观看性色 | 国产一区二区三区在线观看免费 | 欧美黄色激情 | 精品一区二区三区在线视频 | 肉丝一区二区 | 国产乱码精品一区二区三区不卡 | 免费成人小视频 | 福利网站在线 | 亚洲一级在线 | 国产一区二区三区在线视频 | 1区2区3区av 国产日韩欧美一区二区三区在线观看 | 日本成人小视频 | a v在线观看| 色老头网址 | 严厉高冷老师动漫播放 | 国产综合区 | av第1页| 国产精品入口麻豆九色 | 女高中生破处视频 | 国产精品毛片va一区二区三区 | 国产精品视频自拍 | 亚洲女人视频 | 精品国产乱码久久久久久久软件 | 深夜激情视频 | 欧美黑人巨大xxxxx | 禁漫天堂下载18 | 91久久精品美女高潮 | 丁香花五月天 | 99re国产| 精品国产欧美一区二区 | av一区二区在线观看 | 成人音影 | 美女被爆操网站 | 欧美激情视频在线观看 | 中文字幕第十一页 | 婷婷丁香激情五月 | 午夜影院黄色 | 免费人成网在线观看品观网 | 成人 日韩 | 欧美激情综合在线 | 红桃视频国产精品 | 黄色网页网站 | 亚洲精品一线 | 特级西西444www大胆免费看 | 99精品视频一区 | 国产免费脚交足视频在线观看 | 日韩欧美一级 | h网址在线观看 | 在线精品日韩 | av综合网站 | 91九色在线视频 | 国内精品小视频 | 双性受孕h堵精大肚生子 | 视频一区二区欧美 | 成人国产精品一区二区 | 欧美日韩在线播放 | 先锋av资源吧 | 国产精品久久久久不卡 | 精品在线不卡 | 亚洲精品水蜜桃 | 51精品国产人成在线观看 | 精品久久国产精品 | 牛牛电影国产一区二区 | 日本在线视频www色 哪里可以免费看av 国产成人在线影院 | 粉嫩久久99精品久久久久久夜 | 亚洲综合av网 | sm调教母狗 | 黄色免费观看网站 | 欧美激情在线免费 | 欧美一区免费 | 精产国产伦理一二三区 | 福利视频网址导航大全 | 日韩高清一级片 | 国产一区在线精品 | 伊人中文在线 | 呦呦在线观看 | 欧美日韩成人在线视频 | 在线不卡亚洲 | 黄色在线免费观看网站 | 在线看片中文字幕 | 久久久久久一级片 | 亚洲私拍自拍 | 在线视频天堂 | 精品久久久999 | 酒醉的玫瑰电影免费观看 | 海角官网 | 国产探花一区 | 激情文学一区 | 污视频在线播放 | 女人下边被添全过视频 | 在线视频日韩精品 | 极品videossex中国妞hd | 麻豆av一区二区 | 欧美重口 | 天天躁日日躁aaaa视频 | 黄色a v视频 | 高潮一区二区 | 视频在线观看一区二区三区 | 日韩欧美二区三区 | 久久男人 | 99久视频| 成人av在线播放网站 | 亚洲欧美在线第一页 | 亚洲精品久久 | 日本怡春院 | 国产美女作爱全过程免费视频 | 欧美日韩亚洲视频一区 | 欧洲亚洲一区二区三区 | 亚洲精品一区二区三区四区五区 | 国产99在线免费 | 黄骗免费网站 | 亚洲三级色 | 午夜影院美女 | 麻豆精品av| 黄色免费网址在线观看 | eeuss影院一区二区三区 | 正在播放日韩精品 | 日本一区高清 | 日本高清视频网站www | 久久久精品国产一区二区三区 | 在线不卡av电影 | 视频一区 视频二区 视频三区 视频四区 国产 | 岛国成人毛片 | 日韩精品免费视频 | 久久人人爽爽爽人久久久 | 午夜a视频| 免费在线国产精品 | 日韩成人在线免费观看 | 亚洲一区二区在线视频 | 亚洲成av人乱码色午夜 | 日韩一区在线免费观看 | 国产日韩欧美激情 | 国产高清永久免费 | 福利视频久久 | 国产亚洲精品成人av久久ww | 欧美日韩卡一 | av中文字幕免费在线观看 | 国产视频久久 | 色婷婷激情一区二区三区 | 亚洲欧美日韩国产成人精品影院 | 亚洲视频免费一区 | 一区二区美女 | 黄色激情视频网站 | 亚洲视频自拍 | 综合视频在线观看 | 777色婷婷 | 91亚洲精品一区 | 亚洲国产99 | 久久疯狂做爰流白浆xx | 久久色在线观看 | 日韩欧美一区二区三区免费观看 | 国模私拍xvideos | 久久久久久网站 | 一区二区毛片 | 日韩欧美国产一二三区 | 国产成人亚洲精品狼色在线 | 日本欧美在线视频 | 成人午夜精品 | 国产传媒 在线 | 午夜色视频 | av黄页| 欧美一级二级视频 | 9i看片成人免费高清 | 国产高清免费在线播放 | 欧美色女视频 | 国产精品免费网站 | 亚洲精品久久久久久久久久久 | 另类性姿势bbwbbw | 日韩在线中文字幕 | 粉嫩av午夜 | 美女被猛干| 美女激情网站 | 亚洲午夜久久 | 欧美精品免费播放 | 国产精品香蕉在线观看 | 性色视频在线 | 免费看国产曰批40分钟粉红裤头 | 亚洲欧美在线一区二区 | 91看片在线观看 | 亚洲国产精久久久久久久 | 国产精品福利视频 | 成码无人av片在线观看网站 | 粉嫩一区二区三区性色av | 中文字幕在线观 | 成人网在线看 | 成年人免费视频网 | 欧美黄色片免费观看 | 亚洲综合区在线 | 中文字幕免费高清网站 | 国内精品一区二区三区 | 老熟妇毛片 | 国产精品第一国产精品 | 欧美日韩国产精品一区 | 台湾少妇伦欲电影 | 免费观看nba乐趣影院 | av色综合网站 | 日韩精品免费一区二区三区竹菊 | 美女黄频网站 | 成人网在线播放 | 捆绑无遮挡打光屁股调教女仆 | 成人一区二区视频 | 国产看片在线 | 国产三级一区 | 黄肉视频| 日夜干在线视频 | 国产一区二区三区免费看 | 午夜激情电影在线观看 | 欧美不卡在线视频 | 日韩av伦理片 | 羞羞涩涩视频 | 国产精品一区二区三区四区 | 亚洲国产精品中文 | 香蕉国产9 | 亚洲一区二区在线免费观看 | 韩国日本黄色 | 免费成人黄色 | 玉女心经是什么意思 | 18视频网站在线观看 | 朝桐光一区二区三区 | 久久av中文 | 免费成人在线网站 | 边吃奶边做视频 | 日韩天堂在线视频 | 免费插插视频 | 波多野结衣成人在线 | 五月天堂婷婷 | 日韩中文字幕麻豆 | 亚洲资源在线看 | 老师胸乳裸露网站 | 伦一理一级一a一片 | 麻豆影音先锋 | 91精品国产91久久久久久最新 | 欧美freesex8一10精品 | 白袜av | 歪歪视频在线观看 | 韩国av一区二区 | av福利网站 | 中文字幕精品av | 好吊视频一区二区 | 黄色av播放 | 韩国黄色漫画 | 国产精品免费视频观看 | 日韩欧美一区二区在线视频 | 日韩中文字幕在线视频 | 动漫涩涩免费网站在线看 | 久久久久久影视 | 亚洲国产成人av | 蜜桃久久久久 | 久久亚洲欧美 | 久操福利| 美女吞精视频 | 免费一级欧美片在线观看 | 未满十八岁勿进 | 丝袜脚交免费网站xx | 在线看片中文字幕 | 天堂va蜜桃一区二区三区漫画版 | 欧美一级久久久久久久大片 | 国产成人天天5g影院在线观看 | 玉足调教丨vk24分钟 | 国产四虎 | 国产免费观看久久 | 亚洲人高潮女人毛茸茸 | 91在线观看 | 老妇裸体性激交老太视频 | 国产在线剧情 | av在线短片 | 青青操狠狠干 | 黄页网站在线播放 | 欧美日韩一区二区三区在线免费观看 | 97成人在线 | 精品一区二区久久 | 色悠悠国产精品 | 亚洲免费观看在线视频 | 色哟哟日韩精品 | 国产伦理在线观看 | 成人黄色免费网站在线观看 | 国产福利网址在线观看 | 91网站在线免费观看 | 操人免费视频 | 被黑人啪到哭的番号922在线 | 欧美日韩一级片在线观看 | 色a在线观看 | 91搞视频 | 日本黄色小网站 | 亚洲色图 校园春色 | 免费观看在线黄色网 | 欧美激情视频网址 | 欧美日韩综合 | 色香色香欲天天天影视综合网 | 鲁鲁狠狠狠7777一区二区 | 国产成人精品免费视频 | 成全在线观看高清资源 | 相亲对象是问题学生在线观看 | 四虎永久在线精品免费一区二区 | 男人的天堂久久 | 美女91在线 | 日韩黄色小视频 | 91精品视频网| 亚洲乱码一区二区三区三上悠亚 | 日本一区二区免费在线 | 日韩精品影音先锋 | 在线日韩第一页 | 欧美极品一区二区三区 | 日韩中文字幕国产 | 可以看av的网站 | 天天综合视频 | 少妇肥臀大白屁股高清 | 日本爽爽爽 | 欧美色一级片 | 肉感丰满的av演员 | 亚洲精品1234 | 午夜亚洲福利在线老司机 | 欧美成人中文 | 91九色网站 | 精品1区2区| 视频精品一区 | 欧美人牲| 女的扒开腿让男的捅 | 亚洲欧洲美洲av | 97色碰| 日韩精品在线免费播放 | 日日摸夜夜添夜夜添精品视频 | 天天爽网站 | 粉色视频免费观看 | 国产视频资源在线观看 | 五月天欧美 | 亚洲国产aⅴ精品一区二区 无遮挡的裸体按摩的视频 日本国产三级xxxxxx | 97在线中文字幕 | 国产精品乱码一区二区三区 |