java ?? ???????? Java CAS ??? ?????
??(??): java ?? ????
1. CAS ??? ?? ??? ??(swap)? ?? ??? ???? ??? ??? ???? ? ???? ???????. CAS ???? ??? ??, ?? ?, ? ???? ? ?? ????? ?????. CAS? ?? ??? ??? ??? ?? ?? ?? ???? ????. ? ?? ??? ??? ??? ?? ? ??? ????. ?? ??? ??? ???? ????.
Java??? CAS? ?? ???? ????. CAS ?? ??? C++ ??? ???? ??? ?????. Java ??? JNI? ?? ????? ???. ?? ?? ??? 3??? ???????.
?? ???? ??? CAS ?? ??? ??? ????. ??? ?? ?????? ???? ????. ???? ?? ?? ??? ???????. ??? ?? ??? ???? ?? ??? ? ? ??? ? ????.
2. ?? ????? CPU? ??? ???? ?? ???? ????? ?? ?? ?? ????. ?? ?? ???? ?? ??? ??? ??? ?? ??? ? ?? ????? ?????. ??? ??:
?? ??: "??? ??? ?? ??"
? ??? ??? ??? ??? ?? ????????, ??? ????? ?????. ? ??????? CPU? ? ?? ??? ???? ??? ??? ?? ???? ?????. CPU? ?? ??? ??? ??? ????? ???? ?? ?? ???? ??? ?? ??? ?????? ??? ??? ??? ???, ?? 1? 32?? ??? ??? ?? ???? 64?? ???? ??? ????, ?? 1? ?? ??? ???? ?? ? ? ?? ???. ?? 1? ???? 32?? ???? ? ? ?? 2? ?? 1? ? ??? ???? 64?? ???? ????. ?? 1? ?? 64?? ???? ???? ??? ???? ????? ?? 2? ? ??? ???? ???? ?? ????? ?? ???? ????? ????.
??? ???? ? ??? ?? ??? ??? ????. ?? ??? ???? ?? ??? ??? ?????? ?? ????? 64?? ??? ??? ????? ??? ?? ? ??? ????? ?? ? ? ????.
? ??? ???? Intel ????? ?? ??? ??? ?? ??? ????? ????? ??? ? ??? ??? ?? ? ????. ??? ???? ? ? ?????? ????? ??? ???? ??? ???? ????. ?? ??, ?? ???
?? ? ?? ??? ???? ?????. ? 1? ???? ??? ??? ???? ??? ??? ???. ?? ? CPU ??? ??? ??? ?????. ? ??? ??? ???? ??? ??? ????.inc dword ptr [...]
,等價于DEST = DEST + 1
。該指令包含三個操作讀->改->寫
- ?? 2? ???? ??? ???? ? 1? ????.
- Core 1 ????? ?? 1
- Core 2 ????? ?? 1
- Core 1 ??????. ??? ?? ?? ???? ???
- Core 2 ??? ?? ???. back to the memory
- ? ??? ??? ?, ???? ?? ?? 2??, 3? ???? ???? ??? ?????. ? ??? ????? ? ? ??? ??? ??? ??? ??? ??? ???? ?? ???? ???. ???? ??? ??? ??? ?????? ? ??? ???? ?? ???? ?????. ? ???? ?? ??? ??? Intel ??? ??? Volume 2 Instruction Set Reference, Chapter 3 Instruction Set Reference A-L? ?????. ???? ??? ?? ?? ??? ???? ????.
LOCK—Assert LOCK# ?? ???
????? LOCK# ??? ?? ??? ?? ?? ?????? ???(???? ??? ???? ??
). ?? ???? ???? LOCK# ??? ??? ????? ?? ????? ?? ?? ???? ????? ????? ?????.?? ??? ?? ??? ?? ???? ???? LOCK# ??? ?? ?? ???????. ??? ??? ? ????. ??? ?? ?? ???? ????? ?????. ???
ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD ? XCHG ?? ?? ??? ? ????.
inc ??? ?? ?? ???? ???? ???? ????? ?? ? ????. ?? ??? ??? ??? inc ???? ???? ?? ?? ???? ????? ??? ??? ??? ?? ? ????. ???? ??? ? ?? ??? ????. ?? ???? ??? ?? ??? ??? ????? ????? ??? ?????? ??? ??? ????.
?? ?????? ????? ?? ??? ?? ??? ??? ????? ????? ?? ? ?? ??? ????. ? ?? ??? ??? ??? ?? ??? ??? ????? ????? ?? ???? ?? ??? ?? ?? ???. ??? ?? ??? ?? ??? ???? ???? ? ???? ?? ??? ?? ?? ??? ?? ? ????. ? ?? ??? ?? ??? ???? ???? ??? ??? ?? ??? ??? ????. ????? ??? LOCK# ??? ??? ??? ?? ??? ?? ??? ???? ??? ??? ????. ? ??? ??? ?? ?? ?? ?? ????? ? ??? ???? ?? ??? ??? ? ????. ??? ??? ?? ???? ??? ??? ? ?? ??? ??? ? ????. ?? ?? ? ?? ??? ?? ??? ??? Intel ??? ??? 3? ????? ??? ???, 8? ?? ???? ??? ??????.
3. ?? ?? ??
?? ?? ??? ???? ?? CAS? ?? ??? ???? ?? ? ????. ?? ?? ??? java.util.concurrent.atomic ???? Atomic ??? AtomicInteger? ?? CompareAndSet ???? ????????. ???? ????. ??? ????? ???? ??? ??? ???? ????. ???? Windows ????? Atomic::cmpxchg ??? ???????. ?? ?????.
public?class?AtomicInteger?extends?Number?implements?java.io.Serializable?{ ????//?setup?to?use?Unsafe.compareAndSwapInt?for?updates ????private?static?final?Unsafe?unsafe?=?Unsafe.getUnsafe(); ????private?static?final?long?valueOffset; ????static?{ ????????try?{ ????????????//?計算變量?value?在類對象中的偏移 ????????????valueOffset?=?unsafe.objectFieldOffset ????????????????(AtomicInteger.class.getDeclaredField("value")); ????????}?catch?(Exception?ex)?{?throw?new?Error(ex);?} ????} ????private?volatile?int?value; ???? ????public?final?boolean?compareAndSet(int?expect,?int?update)?{ ????????/* ?????????*?compareAndSet?實際上只是一個殼子,主要的邏輯封裝在?Unsafe?的? ?????????*?compareAndSwapInt?方法中 ?????????*/ ????????return?unsafe.compareAndSwapInt(this,?valueOffset,?expect,?update); ????} ???? ????//?...... } public?final?class?Unsafe?{ ????//?compareAndSwapInt?是?native?類型的方法,繼續(xù)往下看 ????public?final?native?boolean?compareAndSwapInt(Object?o,?long?offset, ??????????????????????????????????????????????????int?expected, ??????????????????????????????????????????????????int?x); ????//?...... }
? ??? LOCK_IF_MP ?? ???? ???? cmpxchg ??? ?????. ? ? ???? ?? ?? cmpxchg ??? LOCK_IF_MP? ?? ???? ??? ?????.
//?unsafe.cpp /* ?*?這個看起來好像不像一個函數(shù),不過不用擔(dān)心,不是重點。UNSAFE_ENTRY?和?UNSAFE_END?都是宏, ?*?在預(yù)編譯期間會被替換成真正的代碼。下面的?jboolean、jlong?和?jint?等是一些類型定義(typedef): ?*? ?*?jni.h ?*?????typedef?unsigned?char???jboolean; ?*?????typedef?unsigned?short??jchar; ?*?????typedef?short???????????jshort; ?*?????typedef?float???????????jfloat; ?*?????typedef?double??????????jdouble; ?*? ?*?jni_md.h ?*?????typedef?int?jint; ?*?????#ifdef?_LP64?//?64-bit ?*?????typedef?long?jlong; ?*?????#else ?*?????typedef?long?long?jlong; ?*?????#endif ?*?????typedef?signed?char?jbyte; ?*/ UNSAFE_ENTRY(jboolean,?Unsafe_CompareAndSwapInt(JNIEnv?*env,?jobject?unsafe,?jobject?obj,?jlong?offset,?jint?e,?jint?x)) ??UnsafeWrapper("Unsafe_CompareAndSwapInt"); ??oop?p?=?JNIHandles::resolve(obj); ??//?根據(jù)偏移量,計算?value?的地址。這里的?offset?就是?AtomaicInteger?中的?valueOffset ??jint*?addr?=?(jint?*)?index_oop_from_field_offset_long(p,?offset); ??//?調(diào)用?Atomic?中的函數(shù)?cmpxchg,該函數(shù)聲明于?Atomic.hpp?中 ??return?(jint)(Atomic::cmpxchg(x,?addr,?e))?==?e; UNSAFE_END //?atomic.cpp unsigned?Atomic::cmpxchg(unsigned?int?exchange_value, ?????????????????????????volatile?unsigned?int*?dest,?unsigned?int?compare_value)?{ ??assert(sizeof(unsigned?int)?==?sizeof(jint),?"more?work?to?do"); ??/* ???*?根據(jù)操作系統(tǒng)類型調(diào)用不同平臺下的重載函數(shù),這個在預(yù)編譯期間編譯器會決定調(diào)用哪個平臺下的重載 ???*?函數(shù)。相關(guān)的預(yù)編譯邏輯如下: ???*? ???*?atomic.inline.hpp: ???*????#include?"runtime/atomic.hpp" ???*???? ???*????//?Linux ???*????#ifdef?TARGET_OS_ARCH_linux_x86 ???*????#?include?"atomic_linux_x86.inline.hpp" ???*????#endif ???*??? ???*????//?省略部分代碼 ???*???? ???*????//?Windows ???*????#ifdef?TARGET_OS_ARCH_windows_x86 ???*????#?include?"atomic_windows_x86.inline.hpp" ???*????#endif ???*???? ???*????//?BSD ???*????#ifdef?TARGET_OS_ARCH_bsd_x86 ???*????#?include?"atomic_bsd_x86.inline.hpp" ???*????#endif ???*? ???*?接下來分析?atomic_windows_x86.inline.hpp?中的?cmpxchg?函數(shù)實現(xiàn) ???*/ ??return?(unsigned?int)Atomic::cmpxchg((jint)exchange_value,?(volatile?jint*)dest, ???????????????????????????????????????(jint)compare_value); }
CAS ?? ????? ??? ?????. CAS ??? ???? ??? ???? ?????. ?? ??? ?? ??? ?? ??? ???
?? ?? ???? ?? cmpxchg ??????.lock cmpxchg dword ptr [edx], ecx
CAS? ????? ????? CAS? ABA ??? ????? ???. CAS? "??->??->??"? ? ??? ?????. ??? 1? ??? 2? ??? CAS ??? ???? ??? ??? ????. ? ???? ?? ??? ??? ????.
?? 1: ??? 1? ?? ??? ???? ?? ? A? ?? ?? ???? ???????.- ?? 2: ??? 2? CAS ??? ???? ?? ?? A?? B
- ? ?????. ?? 3: ??? 2? CAS ??? ?? ???? ?? ?? B?? A
- ?? 4? ?????. Thread 1? ??? ???? ?(compareValue)? ?? ?(oldValue)? ???? ? ?? ??? ??? ?????. ?? ?? ? ?(newValue)? ???? ?? CAS ??? ?????.
- ? ???? ??? ??? 1? ?? ?? ??? ?? ??? ??? ???? ??? ???? ???? ????? ?????. ABA ??? ?? ???? ?? ??? ? CAS ??? ?? ??? ???? ????. java.util.concurrent.atomic ???? ABA ??? ??? ? ?? ?? ??? AtomicStampedReference? ?????. ???? ?? ??? ???? ????. ?? ?? ??? ?? ??? ? ????.
? ?? ?? ??? ?? ?????. CAS? ?? ??? ??? ??? ??? ??? ??? ????? ?? ????. ???? ??? ?? ??? ??? ???? ????. ??? ?? ??? ??? ????? ?????. ?? ?? ?? ???? ?? ?? ?? ? ??? ????? ?? ? ????. ??? ??? ??? ???? ??? ?????. ?? ? ???? ???? ?? ?? ????.
?????. ?? ??? ???????. ????? ?????. ??? ???.
Appendix?? ???? ?? ???? ??? ?? ?? ?, ??? ??? ???? ????. ??? ?? ?? ??? ??? ???? ? ??? ???.
Path | |
---|---|
openjdk/jdk/src/share/classes/sun/misc/Unsafe.java | |
openjdk/hotspot/src/share/vm/prims/unsafe.cpp | |
openjdk/hotspot/src/share/vm/runtime/atomic.cpp | |
openjdk/hotspot/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp |
? ??? Java CAS ?? ?? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

NetworkPortSandfirewallsworkTogetToenableCommunication whileensuringsecurity.1.networkportSarevirtualendpointsnumbered0–65535, Withwell-nownports like80 (http), 443 (https), 22 (ssh) ? 25 (smtp) ?? (specservices

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

DEFER? ??? ???? ?? ??? ??? ???? ? ?????. ?? ??? ?? ? ? ?? ????, ??? ??? ? ?? ?? (LIFO)? ??? ?????. 1. ?? ??? ??? ? ??? ?????. 2. ?? ??? ?? ??? ??? ????? ?????. 3. ?? ? ?? ?? ??? ? ????. 4. ??? ?????? ??? ??? ???? ?????. 5. ?? ??? ???? ?? ??? ?? ??? ?????. ??? ??? ?? ?? ? ???? ???? ? ????.

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.
