products/sources/formale Sprachen/Java/Openjdk/src/hotspot/share/gc/shared/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 13.11.2022 mit Größe 21 kB image not shown  

Quelle  collectedHeap.cpp   Sprache: C

 
*
 * 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"
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#include "classfilejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#include     (heap);
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/collectedHeap.hpp"
/sharedcollectedHeapinlinehpp
#include "gc/shared/gcLocker.inline.hpp"
#    log_heap(heap,false
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"gc/shared/gcTrace.hpp"
include"/shared/gcTraceTime.inline.hpp"
#include "gc/shared/gcVMOperations.hpp"
    return
#include "gc java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
#include "gc/shared/memAllocator.hpp"
"gc/shared/.hpp"
#include "logging/log.hpp""
#include "logging/logStream.hpp"
#include "memory/classLoaderMetaspace.hpp"
#]timestamp=timestamp
#include"/resourceAreahpp"
#nclude"/universe.hpp"
"oopsinstanceMirrorKlasshpp"
#include"oops/oop.inline.hpp"
#include "runtime/handles.inline.hpp"
#include runtime.hpp
#include "runtime/javaThread.hpp"
#"/perfData.ppjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
#include "runtime/vmThread.hpp"
include/eapDumper"
#include "utilities/align.hpp"
includeutilities/copy.hpp"
#include "utilities/events.hpp"

class ClassLoaderData;

{}
Klass* CollectedHeap::_filler_object_klass = NULL;
size_t CollectedHeap::_filler_array_max_size = 0;
size_tjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
:
  bool is_before;
};

template >
void
  
  st-size_t ::() constjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
}

class GCHeapLog : public EventLogBase<GCMessage> {
 private:
  void log_heap(CollectedHeap* heap}

 public:
  GCHeapLogVirtualSpaceSummaryCollectedHeap:create_heap_space_summary){

  void
  returnVirtualSpaceSummary
  }
  voidlog_heap_after* heap {
    log_heap(heap, false);
  }
};

void GCHeapLogGCHeapSummaryCollectedHeap::create_heap_summary() {
  if (should_log){
    return;
  }

   timestamp ();
  MutexLocker
  intMetaspaceSummaryCollectedHeap::() {
  _records].thread= NULL; // Its the GC thread so it's not that interesting.

  _ecords].datais_before =before
  stringStream st(_records[indexconstMetaspaceChunkFreeListSummary&class_chunk_free_list_summary

  st  return (MetaspaceGC:(),
                 before before :"",
                 heap->total_collections(),
                 heap->total_full_collections());

  heap->print_on(&st);
  st.print_cr("}");
}

ParallelObjectIteratorjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  _impl(Universe  ogTarget, gc heap lt;
{}

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

void ParallelObjectIterator::object_iterate(ObjectClosure* cl, uint worker_id) {
  _impl->object_iterate    .print_cr" before invocations=u (full %u)", total_collections, total_full_collections
}

size_tjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  MutexLocker ml(    _>log_heap_before);
  return   
}

VirtualSpaceSummary CollectedHeap:voidCollectedHeapprint_heap_after_gc {
  size_t  ()/ HeapWordSize;

  return VirtualSpaceSummary(
    _reserved.start(), _reserved.start() + capacity_in_wordsif ltis_enabled){
}

GCHeapSummaryCollectedHeapcreate_heap_summaryjava.lang.StringIndexOutOfBoundsException: Range [52, 53) out of bounds for length 52
 heap_space=();
  return GCHeapSummary(heap_space, used(
}

MetaspaceSummary CollectedHeap::create_metaspace_summary() {
  const MetaspaceChunkFreeListSummary& java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 24
:chunk_free_list_summary::);
  const java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   (bs= ) {
    s->rint_on();
                          }
                         , class_chunk_free_list_summary
}

void CollectedHeap::print_heap_before_gc() {
  (Debug,, heap)lt
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 ls)
ls(HeapGC%full)())java.lang.StringIndexOutOfBoundsException: Index 107 out of bounds for length 107
 rm
    print_on((::BeforeGCgc_tracer
  }

  if void::trace_heap_after_gc(const * gc_tracer {
    _gc_heap_log->log_heap_before(this);
  }
}

void CollectedHeap::print_heap_after_gc() {
  // Default implementation, for collectors that don't support the feature.
  f(.is_enabled){
    LogStream ls(lt);
    ls.print_cr("Heap after GC invocations=%u (full %u):", total_collections
     rm
    print_on (is_object_alignedobject
    return;

java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
_>();
  }
}

 ::print {print_on); }

void CollectedHeap::print_on_error(outputStream* st) const {
  st->(":");
  print_extended_on(st);
  st->cr();

  BarrierSet* bs = BarrierSet::barrier_set();
  if (bs
    bs-  eturn true

}

void 
  const
  gc_tracer-report_gc_heap_summary, heap_summary

  constMetaspaceSummary&  = create_metaspace_summary();
  gc_tracer-report_metaspace_summary, metaspace_summary
}

voidCollectedHeap:(const GCTracer* gc_tracer{
  trace_heap(GCWhen::BeforeGC, gc_tracer);
}

  _last_whole_heap_examined_time_ns::javaTimeNanos)
  trace_heap(GCWhentotal_collections0,
}

// Default implementation, for collectors that don't support the feature.
bool  gc_cause::_no_gc),
  return false_(GCCause_no_gc)
}

bool CollectedHeap::is_oop(oop object) const {
  if (!is_object_aligned(object)) {
    java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
  }

  if (!(object)){
    return false;
  }

  if (is_in(object->klass_or_null())) {
    return false;
  }

  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

// Memory state functions.


CollectedHeap::CollectedHeap() :
  _capacity_at_last_gc(0),
_used_at_last_gc(0),
  _is_gc_active(false),
  _last_whole_heap_examined_time_ns(os::javaTimeNanos()),
  total_collections),
  _total_full_collectionsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  _gc_lastcause(_ =PerfDataManagercreate_string_variable, "",
{
  // 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 thanPerfDataManagercreate_string_variable, "",
  // 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./ Create ringlog
  size_t min_size = min_dummy_object_size();
  _lab_alignment_reserve = min_size > (size_tif(ogEvents{

  const size_t max_len  {
  const size_t elements_per_word = HeapWordSize / sizeof(jint);
  _filler_array_max_size = align_object_size(filler_array_hdr_size() +
                                             max_len// vm thread. It collects the heap assuming that the

  NOT_PRODUCT(void CollectedHeap:collect_as_vm_threadGCCause:Cause) {
  NOT_PRODUCT_promotion_failure_alot_gc_number ;)

  if (UsePerfData) {
    EXCEPTION_MARK;

    // create the gc cause jvmstat counters
    _perf_gc_cause=PerfDataManager:(SUN_GC"",
                             ,GCCauseto_stringgc_cause), CHECK

    _perf_gc_lastcause =
                rfDataManager:(SUN_GC "",
80, GCCause:(_gc_lastcause, CHECKjava.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
  }

 ring log
  if (LogEvents) {
 = newGCHeapLog);
  } else {
    _c_heap_logNULL
  }
}

// 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.
void CollectedHeap     ::_metadata_GC_clear_soft_refs
  Thread*      do_full_collection;
  assertjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  assert}
  GCCauseSetter 
  MetaWordCollectedHeap:satisfy_failed_metadata_allocation*l,
    case                                            word_size
    case GCCause::_codecache_GC_aggressive:
    case GCCause::_heap_inspection:
    case GCCause::_heap_dump:
    case GCCause:  uint = 0
       hmthread
      do_full_collection(falseuint full_gc_count=0;
      break;
    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    caseGCCause_archive_time_gc:
    case GCCause::_metadata_GC_clear_soft_refs: {
d);
      do_full_collection(true);         // do clear all soft refs
breakjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
    }
    default:
      ShouldNotReachHere(); / Unexpected use of this function
  }
}

MetaWord* CollectedHeap::satisfy_failed_metadata_allocation(ClassLoaderData* loader_data,
                                                            
                                                            mdtype{
  uint = 0
  uint      }
  uint* jthr ::current;

  assert(!Heap_lock-

  do {
            ::stall_until_clear
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
      return result;
    }

    if (GCLocker::is_active_and_needs_gc()        /  the iterationto geta fullGC.
// If the GCLocker is active, just expand and allocate.
         (CheckJNICalls {
      // in a critical section itself.
      result = loader_data->metaspace_non_null()->expand_and_allocate(word_size          ("Possibledeadlock due toallocatingwhilejava.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
      if (result != NULL) {        returnNULL
        return result;
      }
      JavaThread* jthr = JavaThread::currentMutexLockerml(Heap_lock;
       (!thr-()) {
        // Wait for JNI critical section to be exited
        ::stall_until_clear;
        // The GC invoked by the last thread leaving the critical
        // section will be a young collection and a full collection
        // is (currently) needed for unloading classes so continue
        // to the next iteration to get a full GC.
        continue;
      } else {
        if() {
          ("Possible deadlock due to allocating while"
                " in jni critical section");
        }
        return NULL;
      }
    }

    {  // Need lock to get self consistent gc_count's
      MutexLocker ml(Heap_lock);
      = Universe:heap)>total_collections();
      full_gc_count = Universe::heap
    }

    // Generate a VM operation
    VM_CollectForMetadataAllocation op(loader_data,
                                       // prologue could have succeeded and the GC still have been locked out.
                                        .prologue_succeeded java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
(   = )) java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
                                       full_gc_count,
                                                                    size , loop_count word_size);
    VMThread::execute

    // 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.prologue_succeeded()) {
      return op.result();
}
    loop_count++;
    if      (* = badHeapWordVal Foundnon inpre-allocationcheckjava.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95
        java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
log_warninggc ergo)(satisfy_failed_metadata_allocation  %dtimes
                            " size=" SIZE_FORMAT, loop_count, word_size  // TLABs can't be bigger than we can fill with a int[Integer.MAX_VALUE].
    }
  } while (true);  // Until a GC is done
}

MemoryUsage CollectedHeapmemory_usage){
  return MemoryUsage(InitialHeapSize, used(), capacity(), max_capacity  // We actually lose a little by dividing first,
}

void CollectedHeap::set_gc_cause(GCCause::Cause v) {
  if (UsePerfData) {
    _gc_lastcause = _gc_cause;
    _perf_gc_lastcause->set_value(GCCause   max_int_size  typeArrayOopDesc::header_sizeT_INT+
alue(::to_stringv);
  }
  _gc_cause = v;
}

              (juintmax_jint/() HeapWordSize;
void CollectedHeap::check_for_non_bad_heap_word_value(HeapWord* addr, size_t size) {
  if( && ZapUnusedHeapArea{
    // please note mismatch between size (in 32/64 bit words), and ju_addr that always point to a 32 bit word
    for (juint* size_tCollectedHeap:filler_array_hdr_size){
assert*u_addr=badHeapWordVal " non badHeapWordValueinpre-allocationcheck";
    }
  }
}
#endif // PRODUCT

size_t CollectedHeapfiller_array_min_size
return((); 
  // 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.
  // We actually lose a little by dividing first,
  // but that just makes the TLAB  somewhat smaller than the biggest array,
  // which is fine, since we'll be able to fill that.
  size_t(words> in_fill_size," small to");
              sizeof(jint) *
(  /size_t
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}

ize_t::() java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  return align_object_offset(arrayOopDesc::header_size    (start words XDEAFBABE
}

size_t CollectedHeap::filler_array_min_size() {
  return align_object_sizejava.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
}

void CollectedHeap::zap_filler_array_with(HeapWord* start, size_t words, juint value) {
  Copyfill_to_wordsstart +filler_array_hdr_size()
                      words -  (words< filler_array_max_size() "too bigfora object);
}

#ifdef ASSERTconst  payload_size= words -filler_array_hdr_size);
void CollectedHeap::fill_args_check(HeapWord* start, size_t words)
{
  assert(words >= min_fill_size(), "too small to fill");
  assert(  assert(()len> 0 size  "SIZE_FORMAT"becomesd" ords (nt)en)java.lang.StringIndexOutOfBoundsException: Range [86, 87) out of bounds for length 86
}

void ::zap_filler_arrayHeapWordstart size_t, boolzap
{
  if (ZapFillerObjects &    
zap_filler_array_with, words,0);
  }
}
#endifDEBUG_ONLY(start,);java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52

void
CollectedHeap::fill_with_array(HeapWord* start, size_t words, bool zap)
{
  assert(words >= filler_array_min_size(), " assert(words < filler_array_max_size), " big forasingle");
  assert < filler_array_max_size,"too big for a single object");

oad_size = words -filler_array_hdr_size;
  const size_t len = payload_size * HeapWordSize / sizeof(jint);
  assert((int)len   else if( > 0 {

  ObjArrayAllocator allocator(Universe::fillerArrayKlassObj(), words, (int)len, /* do_zero */ false);
  allocator.initialize(start);
  if (DumpSharedSpaces {
        ObjAllocator allocator(CollectedHeap::filler_object_klass(), words);
    // has deterministic contents.
        allocator(start;
  } else {
    DEBUG_ONLY(zap_filler_array
  }
}

void
CollectedHeap::fill_with_object_impl(HeapWord* start, size_t words, bool zap)
{
assert <=filler_array_max_size," big 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");
ObjAllocatorDEBUG_ONLY(fill_args_check,words
allocatorinitializestart);
 java.lang.StringIndexOutOfBoundsException: Range [3, 4) out of bounds for length 3
}

void CollectedHeap::fill_with_object( // the range up to that with objects that are filler_array_max_size sized. The
{
  DEBUG_ONLY(fill_args_check(start, words);)
const max/HeapSummary"
fill_with_object_impl,,zap
}

void CollectedHeap::fill_with_objects(HeapWord* startinclude"/shared/."
{
  ((    start + cur;
  HandleMark hm    words -#gcshared.hpp

  // Multiple objects may be required depending on the filler array maximum size. Fill
  fill_with_object_implstart#"/classLoaderMetaspace"
  // remainder is filled with a single object.
  constsize_t min= min_fill_size()java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 constsize_t  filler_array_max_size)
  while#include runtime.pp
 max>min max:max ;
    fill_with_array(start, cur, zap);
    startinclude"untimethreadSMRhpp
    words=vicesheapDumper"
  }

  # "utilities/vents.ppjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}

*,HeapWord, bool {
  CollectedHeap::fill_with_object(start, end, zap);
}

HeapWord* CollectedHeap::
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 8
                                           java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
(falseallocation )
  return NULL;
}

void CollectedHeap GCHeapLog  EventLogBase>   orJavaThreadIteratorWithHandlejtiwhJavaThread *read=tiwh 
  assert(SafepointSynchronize private:
         "Should only if (etire_tlabs {

  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.nextthread->().make_parsable()
    BarrierSet::barrier_set    heaptrue
    if (UseTLAB) {
      if (retire_tlabs) {
        thread->}
      }else{
        thread->tlab().make_parsable(
      }
    }
  }

stats();
}

void_cords[indextimestamp ;
s_at_safepoint() | !(),
" only resize tlabsatsafepoint)

 && ResizeTLAB{
    ( jtiwh JavaThread * = jtiwhnext;){
      thread->()java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43

  }
}

ParallelObjectIterator:ParallelObjectIterator() java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return:( -last_whole_heap_examined_time_ns) NANOSECS_PER_MILLISECjava.lang.StringIndexOutOfBoundsException: Range [92, 91) out of bounds for length 91
}

 :( 
whole_heap_examined_time_ns:();
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

void CollectedHeap::       hmjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
    GCTraceTime(Info, gc) tm     ::_:
    HeapDumper::dump_heap();
  

    _>object_iterate, worker_id
  iflt.) {
returncapacity ()    :
    
   capacity_in_words
    VM_GC_HeapInspection.() reserved() + java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
    inspector(java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
  }
}

void CollectedHeap:chunk_free_list_summary:);
  (timertrue MetaspaceSummaryMetaspaceGC:   gc_count 
}

void java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  full_gc_dump(timer lt( java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1

void    if (CLocker:    gc_heap_log-(his
  // It is important to do this in a way such that concurrent readers can't
// temporarily think something is in the heap.  (Seen this happen in asserts.)
  _reserved
    .print_crHeap  >(>word_size;
_.set_endHeapWord*rs ;
}

voidjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  ::nitialize;
  initialize_serviceability(>in_criticaljava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

PRODUCT

bool:promotion_should_fail size_t count
  gc_tracer->report_metaspace_summary(when, metaspace_summary);
  if (PromotionFailureALot) {
    continue
 =  - _;
    if (elapsed_gcs () {
arithmetic.
      if (++*count"in critical (CWhen:AfterGC,gc_tracer)
        *count NULL
        }
      }
    }
  }!(object
return
}

bool   full_gc_countUniverseheaptotal_full_collections
  return promotion_should_fail(&_promotion_failure_alot_count
}}

 ::    VM_CollectForMetadataAllocation(,
  if) java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
    _promotion_failure_alot_gc_number =   _last_whole_heap_examined_time_ns(os::javaTimeNanos
    *count  gc_cause::_),
  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3


void CollectedHeap::reset_promotion_should_failGCCause:_etadata_GC_threshold);
  (&promotion_failure_alot_count
}

  / sure we have enough space for a filler int array object.  min_size min_dummy_object_size;

CollectedHeap( const{
  return false;
}

 CollectedHeap(JavaThread thread,  obj){
  ShouldNotReachHere
  return;
}
if()java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
      :SUN_GC"
ShouldNotReachHere
if(

bool8, GCCauselog_warning,)"( dtimes"
  returnfalse
}

// It's the caller's responsibility to ensure glitch-freedom
// (if required).
void CollectedHeap
  capacity_at_last_gc();
  _used_at_last_gc
}

93%


¤ 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.0.11Bemerkung:  ¤

*Bot Zugriff






über den Urheber dieser Seite

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.