376 // The argument "retire_tlabs" controls whether existing TLABs
377 // are merely filled or also retired, thus preventing further
378 // allocation from them and necessitating allocation of new TLABs.
379 virtual void ensure_parsability(bool retire_tlabs);
380
381 // Section on thread-local allocation buffers (TLABs)
382 // If the heap supports thread-local allocation buffers, it should override
383 // the following methods:
384 // Returns "true" iff the heap supports thread-local allocation buffers.
385 // The default is "no".
386 virtual bool supports_tlab_allocation() const = 0;
387
388 // The amount of space available for thread-local allocation buffers.
389 virtual size_t tlab_capacity(Thread *thr) const = 0;
390
391 // The amount of used space for thread-local allocation buffers for the given thread.
392 virtual size_t tlab_used(Thread *thr) const = 0;
393
394 virtual size_t max_tlab_size() const;
395
396 // An estimate of the maximum allocation that could be performed
397 // for thread-local allocation buffers without triggering any
398 // collection or expansion activity.
399 virtual size_t unsafe_max_tlab_alloc(Thread *thr) const {
400 guarantee(false, "thread-local allocation buffers not supported");
401 return 0;
402 }
403
404 // Can a compiler initialize a new object without store barriers?
405 // This permission only extends from the creation of a new object
406 // via a TLAB up to the first subsequent safepoint. If such permission
407 // is granted for this heap type, the compiler promises to call
408 // defer_store_barrier() below on any slow path allocation of
409 // a new object for which such initializing store barriers will
410 // have been elided.
411 virtual bool can_elide_tlab_store_barriers() const = 0;
412
413 // If a compiler is eliding store barriers for TLAB-allocated objects,
414 // there is probably a corresponding slow path which can produce
415 // an object allocated anywhere. The compiler's runtime support
|
376 // The argument "retire_tlabs" controls whether existing TLABs
377 // are merely filled or also retired, thus preventing further
378 // allocation from them and necessitating allocation of new TLABs.
379 virtual void ensure_parsability(bool retire_tlabs);
380
381 // Section on thread-local allocation buffers (TLABs)
382 // If the heap supports thread-local allocation buffers, it should override
383 // the following methods:
384 // Returns "true" iff the heap supports thread-local allocation buffers.
385 // The default is "no".
386 virtual bool supports_tlab_allocation() const = 0;
387
388 // The amount of space available for thread-local allocation buffers.
389 virtual size_t tlab_capacity(Thread *thr) const = 0;
390
391 // The amount of used space for thread-local allocation buffers for the given thread.
392 virtual size_t tlab_used(Thread *thr) const = 0;
393
394 virtual size_t max_tlab_size() const;
395
396 virtual void verify_nmethod_roots(nmethod* nmethod);
397
398 // An estimate of the maximum allocation that could be performed
399 // for thread-local allocation buffers without triggering any
400 // collection or expansion activity.
401 virtual size_t unsafe_max_tlab_alloc(Thread *thr) const {
402 guarantee(false, "thread-local allocation buffers not supported");
403 return 0;
404 }
405
406 // Can a compiler initialize a new object without store barriers?
407 // This permission only extends from the creation of a new object
408 // via a TLAB up to the first subsequent safepoint. If such permission
409 // is granted for this heap type, the compiler promises to call
410 // defer_store_barrier() below on any slow path allocation of
411 // a new object for which such initializing store barriers will
412 // have been elided.
413 virtual bool can_elide_tlab_store_barriers() const = 0;
414
415 // If a compiler is eliding store barriers for TLAB-allocated objects,
416 // there is probably a corresponding slow path which can produce
417 // an object allocated anywhere. The compiler's runtime support
|