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