FUJITSU LIMITED https://docs.oracle.com/javase/9/gctuning/garbage-first-garbage-collector.htm It attempts to meet garbage collection pause-time goals with high probability while achieving high throughput with little need for configuration. HotSpot Virtual Machine Garbage Collection Tuning Guide 5
is targeted for multiprocessor machines with a large amount of memory. https://docs.oracle.com/javase/9/gctuning/garbage-first-garbage-collector.htm HotSpot Virtual Machine Garbage Collection Tuning Guide 大容量メモリ搭載マシンをターゲット ご希望に応えて、大容量メモリ搭載マシンで性能比較 7
JSR-133 Cookbook LoadLoad/StoreStore/LoadStore/StoreLoad CPUから見て、StoreLoadが最もコスト大 The sequence: Store1; StoreLoad; Load2 ensures that Store1's data are made visible to other processors (i.e., flushed to main memory) before data accessed by Load2 and all subsequent load instructions are loaded. 30
Offsets into the thread const int index_offset = in_bytes(JavaThread::dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_index()); const int buffer_offset = in_bytes(JavaThread::dirty_card_queue_offset() + DirtyCardQueue::byte_offset_of_buf()); // Pointers into the thread Node* buffer_adr = __ AddP(no_base, tls, __ ConX(buffer_offset)); Node* index_adr = __ AddP(no_base, tls, __ ConX(index_offset)); // Now some values // Use ctrl to avoid hoisting these values past a safepoint, which could // potentially reset these fields in the JavaThread. Node* index = __ load(__ ctrl(), index_adr, TypeX_X, TypeX_X->basic_type(), Compile::AliasIdxRaw); Node* buffer = __ load(__ ctrl(), buffer_adr, TypeRawPtr::NOTNULL, T_ADDRESS, Compile::AliasIdxRaw); // Convert the store obj pointer to an int prior to doing math on it // Must use ctrl to prevent "integerized oop" existing across safepoint Node* cast = __ CastPX(__ ctrl(), adr); // Divide pointer by card size Node* card_offset = __ URShiftX( cast, __ ConI(CardTableModRefBS::card_shift) ); // Combine card table base and card offset Node* card_adr = __ AddP(no_base, byte_map_base_node(), card_offset ); __ if_then(card_val, BoolTest::ne, young_card); { sync_kit(ideal); // Use Op_MemBarVolatile to achieve the effect of a StoreLoad barrier. insert_mem_bar(Op_MemBarVolatile, oop_store); __ sync_kit(this); share/vm/opto/graphKit.cpp 38