SlideShare uma empresa Scribd logo
1 de 17
Objects Constructed within the
   Final Field Safe Context

 Tibor Digana
Normal Field on an Instance
  What must be the value in provider.f
                Thread 2                    Thread 1

                           provider = new FinalFieldExample();

<read> provider.f;         class FinalFieldExample {

                               private Object f;

                               FinalFieldExample() {
                                   f = new Object();
                               }

                           }
Normal Field on an Instance
 What must be the value in provider.f

• No guarantee of proper visibility of values by a
  read in <f> in Thread 2.
Final Field on an Instance
   What must be the value in provider.f
                Thread 2                    Thread 1

                           provider = new FinalFieldExample();

<read> provider.f;         class FinalFieldExample {

                               private final Object f;

                               FinalFieldExample() {
                                   f = new Object();
                               }

                           }
Final Field on an Instance
 What must be the value in provider.f

• The visibility of values in <f> is guaranteed by
  a read in Thread 2.
Volatile field on an Instance
   What must be the value in provider.f
                Thread 2                    Thread 1

                           provider = new FinalFieldExample();

<read> provider.f;         class FinalFieldExample {

                               private volatile Object f = null;

                               FinalFieldExample() {
                                   f = new Object();
                               }

                           }
Volatile field on an Instance
 What must be the value in provider.f
• No guarantee of proper visibility of values in
  <f> by a read in Thread 2.
• Constructor’s freeze and the guarantees apply
  only to objects with final fields.
• An object is considered to be completely
  initialized when its constructor finishes.
Dereferenced Object in other Thread
Thread 2          Thread 1

Use of s.         s = new String()

                  An implementation detail.

                  The java.lang.String has private members
                                 char value[]
                                   int offset
                                   int count
                                    int hash
Dereferenced Object in other Thread
• Broken JMM in JDK 1.4 and earlier.
• The immutable object (of java.lang.String as a
  real example) has a proper visibility of the
  values in internal fields into other threads due
  to fixes in JMM since JDK 1.5.
Combined Fields on an Instance
         What must be the values.
                Thread 2                    Thread 1

                           provider = new FinalFieldExample();

<read> provider.f;         class FinalFieldExample {
<read> provider.x;
                               private final Object f;
                               private Object x;

                               FinalFieldExample() {
                                   x = new Object();
                                   f = new Object();
                               }

                           }
Combined Fields on an Instance
      What must be the values.
• Suppose<provider> is non-final field, non-null.
• The value which is set to <x> in the
  constructor has improper visibility in Thread 2.
• Value assigned to <f> is properly visible to
  Thread 2.
• Dereference and Memory Chains for the read
  of <f> in Thread 2 can pass through any reads
  by Thread 2 of a reference to <provider>.
Combined Fields on an Instance
         What must be the values.
                Thread 2                     Thread 1

                           provider = new FinalFieldExample();

<read> provider.f;         class FinalFieldExample {
<read> provider.g;              private final Object f;
<read> provider.a;              private final Object g;
<read> provider.b;              private Object a, b, c, d;
<read> provider.c;
<read> provider.d;             FinalFieldExample() {
                                   a = new Object();
                                   b = new Object();
                                   f = new Object();
                                   c = new Object();
                                   g = new Object();
                                   d = new Object();
                               }
                           }
Combined Fields on an Instance
      What must be the values.
• Values in a, b, c, and d have no guarantee to
  be properly visible by a read in Thread 2.
  (see previous slide)
• Since the <f> and <g> are final, their
  operations cannot be reordered with other.
• Operations on <a>, <b> can be reordered.
• <c> is always between <f> and <g>.
• <d> stays behind <g>
Reflection on Final Field
     What must be the value in f

         DO NOT USE IN CONCURRENT CODE
private final Object f = …;

getClass().getField("f").set(this, new Object());

return f;
Reflection on Final Field
       What must be the value in f
• If a final field is initialized to a compile-time
  constant in the field declaration, changes to
  the final field may not be observed, since uses
  of that final field are replaced at compile time
  with the compile-time constant.
Aggressive optimization of final fields.
• Within a thread, it is permissible to reorder
  reads of a final field with calls to methods that
  may change final fields via reflection.
• Reflection can be used to change final fields
  after the constructor for the object completes.
Aggressive optimization of final fields.
• A method which only returns a value held by
  final field will be inlined with compile-time
  value into method’s caller code;
• Static methods and private instance methods
  are considered final and inlined;
• Method code smaller than 35 bytes in byte
  code used to be inlined (-XX:MaxInlineSize)
  and therefore a subject of further reordering.

Mais conteúdo relacionado

Mais procurados

Lecture#7 Call by value and reference in c++
Lecture#7 Call by value and reference in c++Lecture#7 Call by value and reference in c++
Lecture#7 Call by value and reference in c++NUST Stuff
 
Call by value or call by reference in C++
Call by value or call by reference in C++Call by value or call by reference in C++
Call by value or call by reference in C++Sachin Yadav
 
C++ overloading
C++ overloadingC++ overloading
C++ overloadingsanya6900
 
Function class in c++
Function class in c++Function class in c++
Function class in c++Kumar
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answerssheibansari
 
Functions in C++
Functions in C++Functions in C++
Functions in C++home
 
Data Structures- Part5 recursion
Data Structures- Part5 recursionData Structures- Part5 recursion
Data Structures- Part5 recursionAbdullah Al-hazmy
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT03062679929
 
PARAMETER PASSING MECHANISMS
PARAMETER PASSING MECHANISMSPARAMETER PASSING MECHANISMS
PARAMETER PASSING MECHANISMSArpee Callejo
 
Pointer and polymorphism
Pointer and polymorphismPointer and polymorphism
Pointer and polymorphismSangeethaSasi1
 

Mais procurados (20)

Functions in c++
Functions in c++Functions in c++
Functions in c++
 
C++ aptitude
C++ aptitudeC++ aptitude
C++ aptitude
 
Scala functions
Scala functionsScala functions
Scala functions
 
Lecture#7 Call by value and reference in c++
Lecture#7 Call by value and reference in c++Lecture#7 Call by value and reference in c++
Lecture#7 Call by value and reference in c++
 
Functions
FunctionsFunctions
Functions
 
Call by value or call by reference in C++
Call by value or call by reference in C++Call by value or call by reference in C++
Call by value or call by reference in C++
 
C++ overloading
C++ overloadingC++ overloading
C++ overloading
 
C++ programming function
C++ programming functionC++ programming function
C++ programming function
 
Iterations and Recursions
Iterations and RecursionsIterations and Recursions
Iterations and Recursions
 
Chapter 5
Chapter 5Chapter 5
Chapter 5
 
Function class in c++
Function class in c++Function class in c++
Function class in c++
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answers
 
C++ Language
C++ LanguageC++ Language
C++ Language
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Data Structures- Part5 recursion
Data Structures- Part5 recursionData Structures- Part5 recursion
Data Structures- Part5 recursion
 
Functions in c++
Functions in c++Functions in c++
Functions in c++
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
 
PARAMETER PASSING MECHANISMS
PARAMETER PASSING MECHANISMSPARAMETER PASSING MECHANISMS
PARAMETER PASSING MECHANISMS
 
Pointers
PointersPointers
Pointers
 
Pointer and polymorphism
Pointer and polymorphismPointer and polymorphism
Pointer and polymorphism
 

Destaque

RBSC Company Overview
RBSC Company OverviewRBSC Company Overview
RBSC Company Overviewkaufmajs
 
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 Money
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 MoneyBuilding A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 Money
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 MoneyJeremy Snell
 
Speed Technology Dating from Internet Librarian 2012
Speed Technology Dating from Internet Librarian 2012Speed Technology Dating from Internet Librarian 2012
Speed Technology Dating from Internet Librarian 2012Jeremy Snell
 
My first experience with lambda expressions in java
My first experience with lambda expressions in javaMy first experience with lambda expressions in java
My first experience with lambda expressions in javaScheidt & Bachmann
 
Friendly, Positive, Energetic
Friendly, Positive, EnergeticFriendly, Positive, Energetic
Friendly, Positive, Energeticshaanapalmer
 
Intro To Mass Communications/ Slide Pres. #1
Intro To Mass Communications/ Slide Pres. #1Intro To Mass Communications/ Slide Pres. #1
Intro To Mass Communications/ Slide Pres. #1shaanapalmer
 

Destaque (9)

Ant Works Eng
Ant Works EngAnt Works Eng
Ant Works Eng
 
RBSC Company Overview
RBSC Company OverviewRBSC Company Overview
RBSC Company Overview
 
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 Money
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 MoneyBuilding A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 Money
Building A Writers' Portal: 3 Months - 2 Guys - 1 CMS - 0 Money
 
Speed Technology Dating from Internet Librarian 2012
Speed Technology Dating from Internet Librarian 2012Speed Technology Dating from Internet Librarian 2012
Speed Technology Dating from Internet Librarian 2012
 
My first experience with lambda expressions in java
My first experience with lambda expressions in javaMy first experience with lambda expressions in java
My first experience with lambda expressions in java
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
 
Talk With Me
Talk With MeTalk With Me
Talk With Me
 
Friendly, Positive, Energetic
Friendly, Positive, EnergeticFriendly, Positive, Energetic
Friendly, Positive, Energetic
 
Intro To Mass Communications/ Slide Pres. #1
Intro To Mass Communications/ Slide Pres. #1Intro To Mass Communications/ Slide Pres. #1
Intro To Mass Communications/ Slide Pres. #1
 

Último

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Último (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

Java Objects Constructed Within The Final Field Safe Context

  • 1. Objects Constructed within the Final Field Safe Context Tibor Digana
  • 2. Normal Field on an Instance What must be the value in provider.f Thread 2 Thread 1 provider = new FinalFieldExample(); <read> provider.f; class FinalFieldExample { private Object f; FinalFieldExample() { f = new Object(); } }
  • 3. Normal Field on an Instance What must be the value in provider.f • No guarantee of proper visibility of values by a read in <f> in Thread 2.
  • 4. Final Field on an Instance What must be the value in provider.f Thread 2 Thread 1 provider = new FinalFieldExample(); <read> provider.f; class FinalFieldExample { private final Object f; FinalFieldExample() { f = new Object(); } }
  • 5. Final Field on an Instance What must be the value in provider.f • The visibility of values in <f> is guaranteed by a read in Thread 2.
  • 6. Volatile field on an Instance What must be the value in provider.f Thread 2 Thread 1 provider = new FinalFieldExample(); <read> provider.f; class FinalFieldExample { private volatile Object f = null; FinalFieldExample() { f = new Object(); } }
  • 7. Volatile field on an Instance What must be the value in provider.f • No guarantee of proper visibility of values in <f> by a read in Thread 2. • Constructor’s freeze and the guarantees apply only to objects with final fields. • An object is considered to be completely initialized when its constructor finishes.
  • 8. Dereferenced Object in other Thread Thread 2 Thread 1 Use of s. s = new String() An implementation detail. The java.lang.String has private members char value[] int offset int count int hash
  • 9. Dereferenced Object in other Thread • Broken JMM in JDK 1.4 and earlier. • The immutable object (of java.lang.String as a real example) has a proper visibility of the values in internal fields into other threads due to fixes in JMM since JDK 1.5.
  • 10. Combined Fields on an Instance What must be the values. Thread 2 Thread 1 provider = new FinalFieldExample(); <read> provider.f; class FinalFieldExample { <read> provider.x; private final Object f; private Object x; FinalFieldExample() { x = new Object(); f = new Object(); } }
  • 11. Combined Fields on an Instance What must be the values. • Suppose<provider> is non-final field, non-null. • The value which is set to <x> in the constructor has improper visibility in Thread 2. • Value assigned to <f> is properly visible to Thread 2. • Dereference and Memory Chains for the read of <f> in Thread 2 can pass through any reads by Thread 2 of a reference to <provider>.
  • 12. Combined Fields on an Instance What must be the values. Thread 2 Thread 1 provider = new FinalFieldExample(); <read> provider.f; class FinalFieldExample { <read> provider.g; private final Object f; <read> provider.a; private final Object g; <read> provider.b; private Object a, b, c, d; <read> provider.c; <read> provider.d; FinalFieldExample() { a = new Object(); b = new Object(); f = new Object(); c = new Object(); g = new Object(); d = new Object(); } }
  • 13. Combined Fields on an Instance What must be the values. • Values in a, b, c, and d have no guarantee to be properly visible by a read in Thread 2. (see previous slide) • Since the <f> and <g> are final, their operations cannot be reordered with other. • Operations on <a>, <b> can be reordered. • <c> is always between <f> and <g>. • <d> stays behind <g>
  • 14. Reflection on Final Field What must be the value in f DO NOT USE IN CONCURRENT CODE private final Object f = …; getClass().getField("f").set(this, new Object()); return f;
  • 15. Reflection on Final Field What must be the value in f • If a final field is initialized to a compile-time constant in the field declaration, changes to the final field may not be observed, since uses of that final field are replaced at compile time with the compile-time constant.
  • 16. Aggressive optimization of final fields. • Within a thread, it is permissible to reorder reads of a final field with calls to methods that may change final fields via reflection. • Reflection can be used to change final fields after the constructor for the object completes.
  • 17. Aggressive optimization of final fields. • A method which only returns a value held by final field will be inlined with compile-time value into method’s caller code; • Static methods and private instance methods are considered final and inlined; • Method code smaller than 35 bytes in byte code used to be inlined (-XX:MaxInlineSize) and therefore a subject of further reordering.