Section 1 : 1 Chapter 1 - Introduction
|
Lecture 1 | INTRODUCTION TO BRAINMEASURES PROCTOR SYSTEM | |
|
Lecture 2 | Example code provided with this course | 00:01:01 Duration |
|
Lecture 3 | Using different JDK and JVM vendors | 00:01:37 Duration |
|
Lecture 4 | The structure of this course | 00:03:34 Duration |
Section 2 : 2 Chapter 2 - Just In Time Compilation and the Code Cache
|
Lecture 1 | What is bytecode | 00:03:03 Duration |
|
Lecture 2 | The concept of Just In Time Compilation | 00:05:51 Duration |
|
Lecture 3 | Introducing the first example project | 00:03:35 Duration |
|
Lecture 4 | Finding out which methods are being compiled in our applications | 00:05:23 Duration |
|
Lecture 5 | The C1 and C2 Compilers and logging the compilation activity | 00:04:43 Duration |
|
Lecture 6 | Tuning the code cache size | 00:06:18 Duration |
|
Lecture 7 | Remotely monitoring the code cache with JConsole | 00:08:29 Duration |
Section 3 : 3 Chapter 3 - Selecting the JVM
|
Lecture 1 | The differences between the 32 bit and 64 bit JVM | 00:04:32 Duration |
|
Lecture 2 | Specifying which compiler to use at runtime | 00:06:34 Duration |
|
Lecture 3 | Turning off tiered compilation | 00:02:04 Duration |
|
Lecture 4 | Tuning native compilation within the Virtual Machine | 00:09:59 Duration |
Section 4 : 4 Chapter 4 - How memory works - the stack and the heap
|
Lecture 1 | Introduction - the structure of Javas memory | 00:02:58 Duration |
|
Lecture 2 | How the stack works | 00:05:56 Duration |
|
Lecture 3 | How the heap works | 00:05:25 Duration |
|
Lecture 4 | The heap and the stack together - an example | 00:07:47 Duration |
Section 5 : 5 Chapter 5 - Passing objects between methods
|
Lecture 1 | What does passing by value mean | 00:04:55 Duration |
|
Lecture 2 | What does passing by reference mean | 00:02:20 Duration |
|
Lecture 3 | Passing objects into methods | |
|
Lecture 4 | The final keyword and why its not the same as a constant | 00:03:09 Duration |
|
Lecture 5 | Why the final keyword doesnt stop an objects values from being changed | 00:05:43 Duration |
Section 6 : 6 Chapter 6 - Memory exercise 1
|
Lecture 1 | Instructions for the exercise | 00:01:35 Duration |
|
Lecture 2 | Walkthrough of the solution | 00:08:46 Duration |
Section 7 : 7 Chapter 7 - Escaping References
|
Lecture 1 | Introduction - what is an escaping reference | 00:05:33 Duration |
|
Lecture 2 | Strategy 1 - using an iterator | 00:07:31 Duration |
|
Lecture 3 | Strategy 2 - duplicating collections | 00:06:54 Duration |
|
Lecture 4 | Strategy 3 - using immutable collections | 00:04:38 Duration |
|
Lecture 5 | Strategy 4 - duplicating objects | 00:05:06 Duration |
|
Lecture 6 | Strategy 5 - using interfaces to create immutable objects | 00:04:40 Duration |
|
Lecture 7 | Strategy 6 - using modules to hide the implementation | 00:09:49 Duration |
Section 8 : 8 Chapter 8 - Memory Exercise 2
|
Lecture 1 | Instructions for the exercise | 00:04:40 Duration |
|
Lecture 2 | Walkthrough of the solution | 00:07:39 Duration |
Section 9 : 9 Chapter 9 - The Metaspace and internal JVM memory optimisations
|
Lecture 1 | The role of the Metaspace | 00:05:09 Duration |
|
Lecture 2 | The PermGen | 00:01:58 Duration |
|
Lecture 3 | Are objects always created on the heap | 00:04:14 Duration |
|
Lecture 4 | The String Pool | 00:06:08 Duration |
|
Lecture 5 | Interning Strings | 00:03:04 Duration |
Section 10 : 10 Chapter 10 - Tuning the JVMs Memory Settings
|
Lecture 1 | How the string pool is implemented | 00:04:11 Duration |
|
Lecture 2 | Understanding the size and density of the string pool | 00:11:36 Duration |
|
Lecture 3 | Tuning the size of the string pool | 00:03:28 Duration |
|
Lecture 4 | Tuning the size of the heap | 00:07:45 Duration |
|
Lecture 5 | Shortcut syntax for heap tuning flags | 00:03:06 Duration |
Section 11 : 11 Chapter 11 - Introducing Garbage Collection
|
Lecture 1 | What it means when we say Java is a managed language | 00:04:57 Duration |
|
Lecture 2 | How Java knows which objects can be removed from the Heap | 00:02:50 Duration |
|
Lecture 3 | The System | 00:04:29 Duration |
|
Lecture 4 | Java 11s garbage collector can give unused memory back to the operating system | 00:03:53 Duration |
|
Lecture 5 | Why its not a good idea to run the System | 00:02:06 Duration |
|
Lecture 6 | The finalize() method | 00:05:18 Duration |
|
Lecture 7 | The danger of using finalize() | 00:03:28 Duration |
Section 12 : 12 Chapter 12 - Monitoring the Heap
|
Lecture 1 | What is a soft leak | 00:08:52 Duration |
|
Lecture 2 | Introducing (J)VisualVM | 00:06:59 Duration |
|
Lecture 3 | Monitoring the size of the heap over time | 00:02:59 Duration |
|
Lecture 4 | Fixing the problem and checking the heap size | 00:04:16 Duration |
Section 13 : 13 Chapter 13 - Analysing a heap dump
|
Lecture 1 | Generating a heap dump | 00:03:13 Duration |
|
Lecture 2 | Viewing a heap dump |
Section 14 : 14 Chapter 14 - Generational Garbage Collection
|
Lecture 1 | How the garbage collector works out what is garbage | 00:03:54 Duration |
|
Lecture 2 | Why the heap is divided into generations | 00:04:06 Duration |
|
Lecture 3 | The Internals of the Young Generation | 00:05:01 Duration |
|
Lecture 4 | Viewing the generations in VisualVM | 00:06:11 Duration |
|
Lecture 5 | Viewing the heap when theres a soft leak | 00:03:05 Duration |
Section 15 : 15 Chapter 15 - Garbage Collector tuning selection
|
Lecture 1 | Monitoring garbage collections | 00:06:28 Duration |
|
Lecture 2 | Turning off automated heap allocation sizing | 00:05:47 Duration |
|
Lecture 3 | Tuning garbage collection - old and young allocation | 00:04:55 Duration |
|
Lecture 4 | Tuning garbage collection - survivor space allocation | 00:02:24 Duration |
|
Lecture 5 | Tuning garbage collection - generations needed to become old | 00:02:07 Duration |
|
Lecture 6 | Selecting a garbage collector | 00:05:38 Duration |
|
Lecture 7 | The G1 garbage collector | 00:04:11 Duration |
|
Lecture 8 | Tuning the G1 garbage collector | |
|
Lecture 9 | String de-duplication | 00:02:53 Duration |
Section 16 : 16 Chapter 16 - Using a profiler to analyse application performance
|
Lecture 1 | Introducing Java Mission Control (JMC) | 00:03:45 Duration |
|
Lecture 2 | Building the JMC binaries | 00:05:17 Duration |
|
Lecture 3 | Running JMC and connecting to a VM | 00:03:31 Duration |
|
Lecture 4 | Customising the overview tab | |
|
Lecture 5 | The MBean Browser tab | 00:01:40 Duration |
|
Lecture 6 | The System Memory and Diagnostic Commands tabs | 00:02:24 Duration |
|
Lecture 7 | Introducing our problem project | 00:07:59 Duration |
|
Lecture 8 | Using the flight recorder | 00:09:02 Duration |
|
Lecture 9 | Analyzing a flight recording | 00:04:23 Duration |
|
Lecture 10 | Improving our application | 00:04:39 Duration |
Section 17 : 17 Chapter 17 - Assessing Performance
|
Lecture 1 | Why benchmarking isnt straight forward | 00:06:10 Duration |
|
Lecture 2 | Setting up the code for benchmarking | 00:05:52 Duration |
|
Lecture 3 | A simple approach to micro-benchmarking | 00:01:53 Duration |
|
Lecture 4 | Adding in a warm-up period | 00:04:37 Duration |
|
Lecture 5 | Comparing two code alternatives | 00:02:30 Duration |
|
Lecture 6 | Using Macro-bencharmking | 00:05:10 Duration |
Section 18 : 18 Chapter 18 - Benchmarking with JMH
|
Lecture 1 | Installing the JMH benchmarking tool | 00:04:19 Duration |
|
Lecture 2 | Creating and running benchmarks | 00:05:56 Duration |
|
Lecture 3 | Using different benchmark modes | 00:03:10 Duration |
Section 19 : 19 Chapter 19 - Performance and Benchmarking Exercise
|
Lecture 1 | Instructions for exercise 1 (creating a flight recording) | 00:01:41 Duration |
|
Lecture 2 | Walkthrough of the solution setting up ready for the next challenge | 00:05:12 Duration |
|
Lecture 3 | Instructions for exercise 2 (use JMH to macrobenchmark the project) | 00:01:55 Duration |
|
Lecture 4 | Walkthrough of the solution - part 1 setting up the code | 00:05:18 Duration |
|
Lecture 5 | Walkthrough of the solution - part 2 - integrating into JMH | 00:07:10 Duration |
Section 20 : 20 Chapter 20 - How Lists Work
|
Lecture 1 | Why its important to understand how the different List implementations work | 00:01:39 Duration |
|
Lecture 2 | The 8 different list implementations | 00:01:40 Duration |
|
Lecture 3 | The CopyOnWriteArrayList | 00:02:37 Duration |
|
Lecture 4 | The ArrayList | 00:06:02 Duration |
|
Lecture 5 | Specifying the initial size of an ArrayList | 00:05:33 Duration |
|
Lecture 6 | The Vector | 00:02:55 Duration |
|
Lecture 7 | The Stack | 00:01:19 Duration |
|
Lecture 8 | The LinkedList | 00:03:08 Duration |
|
Lecture 9 | Choosing the optimal list type | 00:06:58 Duration |
|
Lecture 10 | Sorting lists | 00:02:38 Duration |
Section 21 : 21 Chapter 21 - How Maps Work
|
Lecture 1 | How Hashmaps Work - part 1 | 00:03:17 Duration |
|
Lecture 2 | The role of the Hashcode | |
|
Lecture 3 | How Hashmaps Work - part 2 | 00:03:46 Duration |
|
Lecture 4 | Specifying the initial size and factor of a HashMap | 00:04:30 Duration |
|
Lecture 5 | HashMap Performance | 00:02:31 Duration |
|
Lecture 6 | The rules for Hashcodes | 00:04:15 Duration |
|
Lecture 7 | Generating and optimising the Hashcode method | 00:06:29 Duration |
|
Lecture 8 | Optimising Hashmap Performance | 00:00:49 Duration |
|
Lecture 9 | How The LinkedHashMap Works | 00:04:52 Duration |
|
Lecture 10 | The HashTable and TreeMap | 00:01:51 Duration |
Section 22 : 22 Chapter 22 - Other Coding Choices
|
Lecture 1 | Introduction to how well compare coding options | 00:01:42 Duration |
|
Lecture 2 | Comparing primatives with objects | 00:02:55 Duration |
|
Lecture 3 | Comparing BigDecimals with Doubles | 00:03:47 Duration |
|
Lecture 4 | Using the StringBuilder | 00:04:46 Duration |
|
Lecture 5 | Comparing loops and streams | 00:06:42 Duration |
|
Lecture 6 | A note on logging | 00:03:57 Duration |
Section 23 : 23 Chapter 23 - GraalVM
|
Lecture 1 | What is GraalVM | 00:06:45 Duration |
|
Lecture 2 | Installing GraalVM | 00:02:59 Duration |
|
Lecture 3 | Using the Graal Virtual Machine | 00:06:35 Duration |
|
Lecture 4 | Using the Graal Compiler | 00:02:25 Duration |
|
Lecture 5 | Native image building with Graal | 00:04:14 Duration |
|
Lecture 6 | Using the Graal experimental features within OpenJDK | 00:03:34 Duration |
Section 24 : 24 Chapter 24 - Using Other JVM Languages
|
Lecture 1 | The principles of using other JVM Languages | 00:07:05 Duration |
|
Lecture 2 | Looking at bytecode with javap | 00:10:50 Duration |
|
Lecture 3 | Disassembling bytecode back to Java | 00:07:23 Duration |
Section 25 : 25 Chapter 25 - Course Summary
|
Lecture 1 | The OpenJ9 Virtual Machine and whats coming up in future versions of Java | 00:03:02 Duration |