SlideShare una empresa de 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.

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Destacado

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
 

Destacado (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

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024Stephanie Beckett
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaCzechDreamin
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty SecureFemke de Vroome
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe中 央社
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101vincent683379
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfSrushith Repakula
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...CzechDreamin
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfFIDO Alliance
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireExakis Nelite
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...marcuskenyatta275
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekCzechDreamin
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGDSC PJATK
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024Stephen Perrenod
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...FIDO Alliance
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsStefano
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 

Último (20)

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 

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.