Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  collectedHeap.cpp   Sprache: C

 
/* * under the terms of the GNU General Public License version 2 only, as
 * Copyright (c) 2001, 2022, 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/classLoaderData.hpp"
#include "classfile/vmClasses.hpp"
#include "gc/shared/allocTracer.hpp"
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/collectedHeap.hpp"
#include "gc/shared/collectedHeap.inline.hpp"
#include "gc/shared/gcLocker.inline.hpp"
#include "gc/shared/gcHeapSummary.hpp"
#include "gc/shared/stringdedup/stringDedup.hpp"
#include "gc/shared/gcTrace.hpp"
#include "gc/shared/gcTraceTime.inline.hpp"
#include "gc/shared/gcVMOperations.hpp"
#include "gc/shared/gcWhen.hpp"
#include "gc/shared/gc_globals.hpp"
#include "gc/shared/memAllocator.hpp"
#include "gc/shared/tlab_globals.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/classLoaderMetaspace.hpp"
#include "memory/metaspaceUtils.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/instanceMirrorKlass.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/init.hpp"
#include "runtime/javaThread.hpp"
#include "runtime/perfData.hpp"
#include "runtime/threadSMR.hpp"
#include "runtime/vmThread.hpp"
#include "services/heapDumper.hpp"
#include "utilities/align.hpp"
#include "utilities/copy.hpp"
#include "utilities/events.hpp"

class ClassLoaderData;

size_t CollectedHeap::_lab_alignment_reserve = ~(size_t)0;
Klass* CollectedHeap::_filler_object_klass = NULL;
size_t CollectedHeap::_filler_array_max_size = 0;
size_t CollectedHeap::_stack_chunk_max_size = 0;

class GCMessage : public FormatBuffer<1024> {
 public:
  bool is_before;
};

template <>
void EventLogBase<GCMessage>::print(outputStream* st, GCMessage& m) {
  st->print_cr("GC heap %s", m.is_before ? "before" : "after");
  st->print_raw(m);
}

class GCHeapLog : public EventLogBase<GCMessage/java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 private * FITNESS FOR A PARTICULAR PURPOSE. * version 2 for more details (a copy * java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 2
  void log_heap(CollectedHeap * or visit www.oracle.com  * 

 public:
  GCHeapLog() : EventLogBase<GCMessage>("GC Heap History""gc") {}

  void log_heap_before(CollectedHeap* heap) {
log_heap, truejava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
  }
  void #include "gc/.inline."
    log_heapheap );
  }
};

void GCHeapLog::includeshared
  if (!gcinline
;
}

  double timestamp = fetch_timestamp();
  MutexLocker mlincludetlab_globals
  int indexloggingjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  _records[#include "memory/metaspaceUtils.hpp"
  _recordsindex.timestamp = ;
  _records[index memory."
  stringStreami memory"

include/."
                 before oops.hpp
                 heap-"/init"
                 #nclude runtime."

  heap->print_on(&st);
  st.print_cr("}");
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

"services/eapDumper.hpp"
  "ClassLoaderData
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

ParallelObjectIterator::~ParallelObjectIterator() {
  delete _impl;
}

void ParallelObjectIterator::object_iterate(ObjectClosure* cl, uint worker_id public
  _template<
}

size_tCollectedHeapunused {
  MutexLocker ml(Heap_lock);
  return capacity() - used(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

 :()
  size_t

 (
   (CollectedHeap){
}

 CollectedHeapcreate_heap_summary
  VirtualSpaceSummary if(() 
  return
double =fetch_timestamp

 :create_metaspace_summary
  const_[index = NULL
    MetaspaceUtils::chunk_free_list_summary_[index.is_before ;
   MetaspaceChunkFreeListSummary  =
    MetaspaceUtils::chunk_free_list_summary(
returnMetaspaceSummary:capacity_until_GC
                                            ?"" after
                          ms_chunk_free_list_summary,
}

void CollectedHeap::print_heap_before_gc() {
L(Debug,) lt
ParallelObjectIteratorParallelObjectIterator java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
    LogStream ls(lt);
ls(HeapGC% full:,() ());
    ResourceMark rm;
    print_on(&ls
  }

  if (_gc_heap_log != NULL) {
gc_heap_log-(this
  }
}

 ::() {
  LogTarget(Debug, gc capacity_in_words=capacity  HeapWordSizejava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
  if(.() 
    LogStream ls(lt);
    ls
    ResourceMarkGCHeapSummary ::() {
    print_on(&ls);
  }

  if (_gc_heap_log != NULL) {
    _gc_heap_log->log_heap_after(this);
  }
}

void CollectedHeap::print  VirtualSpaceSummaryheap_space  create_heap_space_summary

void CollectedHeap:java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  st->print_cr("Heap:");
  print_extended_on(st);
  st->cr    MetaspaceUtils:(MetaspaceNonClassType

  BarrierSet* bs = BarrierSet::barrier_set();
if( ! NULL{
bs->rint_onst
  }
}

void  ms_chunk_free_list_summaryclass_chunk_free_list_summary);
  const GCHeapSummary& heap_summaryjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  gc_tracer->report_gc_heap_summaryLogTargetDebug,gcheap ;

  const MetaspaceSummary& metaspace_summary = create_metaspace_summary();
  gc_tracer->    LogStream(lt;
}   .print_cr"Heap before invocations=u (full %u:", total_collections(), total_full_collections;

void CollectedHeap    ResourceMark;
 trace_heapGCWhen, );
}

 CollectedHeap:trace_heap_after_gcconstGCTracer) java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}

// Default implementation, for collectors that don't support the feature.
bool CollectedHeap::supports_concurrent_gc_breakpointsi lt() java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24

}

boolResourceMark;
  if!is_object_aligned()) {
 false
  }

  if (!is_in(object)) {
    return false;
      gc_heap_log-log_heap_afterthis

  if (voidCollectedHeap() const (ttyjava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
    returnst-print_crHeapjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
  }

return;
}

// Memory state functions.


CollectedHeap::CollectedHeap(>(when);
 MetaspaceSummarymetaspace_summarycreate_metaspace_summary;
  _used_at_last_gc>(when);
  _is_gc_active :trace_heap_before_gc GCTracer) java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
_(os(),
  _(0
  _total_full_collectionsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
_(GCCauseno_gc
  gc_lastcause::no_gc
{
  java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 0
  return false;
  // 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 makeis_in 
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  return;
  _lab_alignment_reserve

  const size_t max_len
  // Memory state functions.
    used_at_last_gcjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
_(0

  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 ::(SUN_GCcause
                             

    _perf_gc_lastcause =
                ::(SUN_GClastCause
                             80, GCCause::to_string(_gc_lastcause), CHECK);
  }

  / the java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
   () 
    _gc_heap_log = new
  } elsejava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
    _gc_heap_log = NULL;
  }
}

// This interface assumes that it's being called by the
// vm thread. It collects the heap assuming that the
// heap lock is already held and that we are executing in
// the context of the vm thread.
 :(: cause
  Thread( =0java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  assert  :create_string_variable, cause
  assert80 ::(_gc_cause,);
  GCCauseSetter gcs(this, cause);
Pe:create_string_variable,lastCause
    case GCCause::                             :to_string) );
  }
    case   // Create the
    case GCCause (;
    case GCCause_ = ;
      HandleMark hm(thread);
      // vm thread. It collects the heap assuming that the
      break;
    }
    case GCCause::_archive_time_gc:
    caseGCCause_: {
      HandleMark hm(thread);
do_full_collection(true);        // do clear all soft refs
      break;
    }
    default:
      ShouldNotReachHere(); // Unexpected use of this function
  }
}

* CollectedHeap:(ClassLoaderData oader_data
                  size_t,
                                                            Metaspace::MetadataType mdtype) {
   loop_count0
  uintHandleMark();
  uint  

  assert

  do {
    MetaWord* result = loader_data->metaspace_non_null(     ::archive_time_gc
    if (result !=       HandleMark hm(threa
      return result;
          ;

    if (GCLocker}
      // If the GCLocker is active, just expand and allocate.ShouldNotReachHere;/java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
      // If that does not succeed, wait if this thread is not
      // in a critical section itself.
      result = loader_data-Metaspace::MetadataType ) {
      if (result != NULL) {
  ui loop_count ;
      }
      JavaThreadjthr = JavaThread()
      if (!jthr->in_critical()) {
        // Wait for JNI critical section to be exited
GCLocker();
            if (result != NULL) {
        // section will be a young collection and a full collection
        
//to next to a GC
        continue;
      } else      
if() java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
          fatal deadlock  "
                " in jni critical section");
        }
 ;
      }
    }

    {  // Need lock to get self consistent gc_count's
       ml)
      gc_count      = if!>in_critical
      full_gc_count = Universe::heap()->total_full_collectionsGCLocker()java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
    }

    // Generate a VM operation
    VM_CollectForMetadataAllocation op(loader_data,
                                       word_size,
         CheckJNICalls
                                       fatal
}
                                       
          gc_count:(-total_collections

    // If GC was locked out, try again. Check before checking success because the
    // prologue could have succeeded and the GC still have been locked out.
    if (op.gc_locked()) {
      continue;
    }

    if(op()){
      return op.result();
    }
    loop_count++;
    if ((QueuedAllocationWarningCount > 0) &&
        (loop_count%QueuedAllocationWarningCount= 0){
      log_warning(gc, ergo)("satisfy_failed_metadata_allocation() retries %d times,"
"="SIZE_FORMAT,word_size
    }
  } while (true);  // Until a GC is done
}

MemoryUsage java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  return MemoryUsage(InitialHeapSize    // prologue could have succeeded and the GC still have been locked out.
}

void CollectedHeap::set_gc_cause(GCCause::Cause v) {
  if (UsePerfData) {
    _gc_lastcause = _gc_cause;
    _perf_gc_lastcause->set_value(GCCause::to_string(_gc_lastcause));
    _perf_gc_cause->set_value(GCCause::to_string(v));
  }
  _gc_cause = v;
}

#ifndef PRODUCT
void CollectedHeap::check_for_non_bad_heap_word_value(HeapWord* addr, size_t size) {
  if (CheckMemoryInitialization && ZapUnusedHeapArea      continue;
    // please note mismatch between size (in 32/64 bit words), and ju_addr that always point to a 32 bit word
    for (juint* ju_addr =    
assertju_addr=," badHeapWordValue pre-allocation ");
    }
  }
}
#endif // PRODUCT

size_t CollectedHeap::max_tlab_size()      (, ergo(()retries ,"
  // TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE].
  // This restriction could be removed by enabling filling with multiple arrays.
  // If we compute that the reasonable way as
  //    header_size + ((sizeof(jint) * max_jint) / HeapWordSize)
  // we'll overflow on the multiply, so we do the divide first.::( 
  
  // but that just makes the TLAB  somewhat smaller than the biggest array,
  java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 0
size_t=typeArrayOopDescheader_size() +
              sizeof(jintGCCause()java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
              ()   size_t)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
  return align_down(max_int_size,    CheckMemoryInitialization) java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
}

 :( 
  return      (j = ,Found   )java.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95
}

size_tCollectedHeap::() {
   align_object_sizefiller_array_hdr_size);// align to MinObjAlignment
}


  Copy::fill_to_words(start
                      words - filler_array_hdr_size(), value  
}

#ifdef ASSERT
void CollectedHeap  
{
  assert =m() too  filljava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
  assert(is_object_aligned(words), "unaligned ((uint) max_jint/(size_t) HeapWordSize);
}

void CollectedHeap::zap_filler_array(HeapWord* start, size_t words
size_t CollectedHeapfiller_array_hdr_size{
  if (ZapFillerObjects && zap) {
    zap_filler_array_with,,0);
  }
}
#endif // ASSERT

void
CollectedHeap::fill_with_array(HeapWord* start,java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{
  assert(words  ::(start (,
assert =filler_array_max_size,"too a single "java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74

  constsize_t  words ()java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
  const size_t len = payload_size *java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
assertint =0" toolarge %,w,(nt)en;

  ObjArrayAllocator allocator(Universe::fillerArrayKlassObj(),}
  allocator.initialize CollectedHeap(* ,  words )
  if (DumpSharedSpaces) {
    // This array is written into the CDS archive. Make sure it
// has deterministic contents.
    zap_filler_array_with(start    (startwords XDEAFBABE
  } else {
    (zap_filler_array, words zap)
  }
}

void
CollectedHeap:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
  =( too   object

  if  (words=() tooforsingle
      const size_t payl=words ()java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
}else words) 
    assert(if)
java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
.initialize)
  }
}

void java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
{
  DEBUG_ONLY(  (words () toofor)
  HandleMark hmif( >()java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  fill_with_object_impl(start, words, zap);
}

void CollectedHeap::fill_with_objects(HeapWord* start, size_t words, bool zap)
{
  DEBUG_ONLY( ))
    .(start

  // Multiple objects may be required depending on the filler array maximum size. Fillgc/h"
 
  // remainder is filled with a single object.
_java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   size_t/.pp
  (,words;
    const java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fill_with_array,cur
start+cur
wordsgc/c_globals
  java.lang.StringIndexOutOfBoundsException: Range [3, 4) out of bounds for length 3

  (startnclude."
}

voidc size_t =min_fill_size;
  CollectedHeap::fill_with_object(#nclude"/oop..hpp"
}

HeapWord* # "/perfData.-max >?max minjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
                                                -#include "ser/java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 34
                                           size_t  *endzap
  java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
  return;
}

void CollectedHeap:ensure_parsability retire_tlabs
  (SafepointSynchronizeis_at_safepoint| is_init_completed(,
          guarantee," allocation buffersnotsupported";

  ThreadLocalAllocStats statsst-

f (  JavaThread*  .n();{
    BarrierSet::barrier_set()->make_parsable(thread);
    if (UseTLAB) {
       (){
        thread-(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
        thread-tlabmake_parsable
}
    }log_heap);
  }

  stats(heap);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

       
  assert( 
            index()  .publish

  if (UseTLAB   rcords]timestamptimestamp
    for (JavaThreadIteratorWithHandle jtiwh         Should  ;
      thread->tlab().forJavaThreadIteratorWithHandle;JavaThreadthread.()  java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
    }
  }
}

 CollectedHeap() {
  return}
}

void _  :javaTimeNanos)-last_whole_heap_examined_time_ns/;
  _ = ::javaTimeNanos


void CollectedHeap::full_gc_dump(GCTimer* timer ml);
  assert
 (HeapDumpBeforeFullGC before|( &&!efore
    GCTraceTime(  size_tcapacity_in_wordscapacity(/HeapWordSize
    HeapDumper:dump_heap)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
}

e, , classhisto& ms_chunk_free_list_summary =
  if (lt.is_enabled()) {
    GCTraceTime(Trace, gc, classhisto) tm(before ? "Class Histogram (before full gc)" ::hunk_free_list_summaryMetaspace);
    ResourceMark  const MetaspaceChunkFreeListSummary =
    LogStream ls(lt(MetaspaceGC::capacity_until_GC(),
                          MetaspaceUtils:(),
    inspector.doit();
  }
}

void CollectedHeap::pre_full_gc_dump(GCTimer* timer) {
 (, true;
}

edHeappost_full_gc_dump* timer
  full_gc_dump(timer  f(gc_heap_log ) {
}

void::initialize_reserved_region(onst& rs{
  / It is important to do this in a way such that concurrent readers can't.())java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
  // temporarily think something is in the heap.  (Seen this happen in asserts.)
  _.set_word_size)
  _reserved   _ ! NULL){
  _.set_endHeapWord*rs());
}

void CollectedHeap::post_initialize() {
  StringDedup:();
  initialize_serviceability
}java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

#ifndef PRODUCT

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  // Access to count is not atomic; the value does not have to be exact.
  if (  if (PromotionFailureALot =create_heap_summary(java.lang.StringIndexOutOfBoundsException: Range [60, 61) out of bounds for length 60
    const   gc_tracer->rep(, metaspace_summary;
const elapsed_gcs  - promotion_failure_alot_gc_number
tInterval) {
      
      if(+count > PromotionFailureALotCount
        countjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
        true
      }
    }
  }
  return;
}

::promotion_should_fail{
  return (&_);
}

voidifis_in>klass_or_null) java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  if (PromotionFailureALot}
    _promotion_failure_alot_gc_number = total_collections();
    *count = 0;
  }
}

void CollectedHeaplast_whole_heap_examined_time_ns::(),
  reset_promotion_should_fail(&_promotion_failure_alot_count);
}

#endif  // #ifndef PRODUCT

bool CollectedHeap::supports_object_pinning() const {
  return false;
}

oop CollectedHeap::pin_object(JavaThread* thread, oop obj)  
  ShouldNotReachHere/java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
   NULL
}

id ::unpin_object* thread ){
  ShouldNotReachHere
}

bool * Copyright (c) 2001, 2022, Oracle  DO NOTALTER ORREMOVEjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 2
  return false;
}

// It's the caller's responsibility to ensure glitch-freedom
// (if required).
 CollectedHeapupdate_capacity_and_used_at_gc * 2along with thisif , write  *Inc,5 Franklin, Fifth, Boston java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
capacity_at_last_gc()
_     used
}

91%


¤ Dauer der Verarbeitung: 0.10 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge