1. Урок 1. 00:04:01
    What do we mean by performance, and what versions of Java does this course cover
  2. Урок 2. 00:01:02
    Example code provided with this course
  3. Урок 3. 00:01:38
    Using different JDK and JVM vendors
  4. Урок 4. 00:05:12
    The structure of this course
  5. Урок 5. 00:01:52
    How to get support while you're taking this course
  6. Урок 6. 00:03:04
    What is bytecode?
  7. Урок 7. 00:05:52
    The concept of "Just In Time Compilation"
  8. Урок 8. 00:03:36
    Introducing the first example project
  9. Урок 9. 00:05:24
    Finding out which methods are being compiled in our applications
  10. Урок 10. 00:04:44
    The C1 and C2 Compilers and logging the compilation activity
  11. Урок 11. 00:06:19
    Tuning the code cache size
  12. Урок 12. 00:08:30
    Remotely monitoring the code cache with JConsole
  13. Урок 13. 00:04:33
    The differences between the 32 bit and 64 bit JVM
  14. Урок 14. 00:06:35
    Specifying which compiler to use at runtime
  15. Урок 15. 00:02:05
    Turning off tiered compilation
  16. Урок 16. 00:09:59
    Tuning native compilation within the Virtual Machine
  17. Урок 17. 00:02:58
    Introduction - the structure of Java's memory
  18. Урок 18. 00:05:57
    How the stack works
  19. Урок 19. 00:05:26
    How the heap works
  20. Урок 20. 00:07:47
    The heap and the stack together - an example
  21. Урок 21. 00:04:55
    What does "passing by value" mean?
  22. Урок 22. 00:02:21
    What does "passing by reference" mean?
  23. Урок 23. 00:04:14
    Passing objects into methods
  24. Урок 24. 00:03:10
    The final keyword and why it's not the same as a constant
  25. Урок 25. 00:05:43
    Why the final keyword doesn't stop an object's values from being changed
  26. Урок 26. 00:01:36
    Instructions for the exercise
  27. Урок 27. 00:08:47
    Walkthrough of the solution
  28. Урок 28. 00:05:34
    Introduction - what is an escaping reference?
  29. Урок 29. 00:07:32
    Strategy 1 - using an iterator
  30. Урок 30. 00:06:55
    Strategy 2 - duplicating collections
  31. Урок 31. 00:04:39
    Strategy 3 - using immutable collections
  32. Урок 32. 00:05:07
    Strategy 4 - duplicating objects
  33. Урок 33. 00:04:40
    Strategy 5 - using interfaces to create immutable objects
  34. Урок 34. 00:09:50
    Strategy 6 - using modules to hide the implementation
  35. Урок 35. 00:04:41
    Instructions for the exercise
  36. Урок 36. 00:07:40
    Walkthrough of the solution
  37. Урок 37. 00:05:10
    The role of the Metaspace
  38. Урок 38. 00:01:59
    The PermGen
  39. Урок 39. 00:04:15
    Are objects always created on the heap?
  40. Урок 40. 00:06:09
    The String Pool
  41. Урок 41. 00:03:04
    Interning Strings
  42. Урок 42. 00:04:11
    How the string pool is implemented
  43. Урок 43. 00:11:37
    Understanding the size and density of the string pool
  44. Урок 44. 00:03:29
    Tuning the size of the string pool
  45. Урок 45. 00:07:45
    Tuning the size of the heap
  46. Урок 46. 00:03:07
    Shortcut syntax for heap tuning flags
  47. Урок 47. 00:04:58
    What it means when we say Java is a managed language
  48. Урок 48. 00:02:50
    How Java knows which objects can be removed from the Heap
  49. Урок 49. 00:04:29
    The System.gc() method
  50. Урок 50. 00:03:53
    Java 11's garbage collector can give unused memory back to the operating system
  51. Урок 51. 00:02:06
    Why it's not a good idea to run the System.gc() method
  52. Урок 52. 00:05:18
    The finalize() method
  53. Урок 53. 00:03:29
    The danger of using finalize()
  54. Урок 54. 00:08:52
    What is a soft leak?
  55. Урок 55. 00:06:59
    Introducing (J)VisualVM
  56. Урок 56. 00:03:00
    Monitoring the size of the heap over time
  57. Урок 57. 00:04:16
    Fixing the problem and checking the heap size
  58. Урок 58. 00:03:14
    Generating a heap dump
  59. Урок 59. 00:05:21
    Viewing a heap dump
  60. Урок 60. 00:03:54
    How the garbage collector works out what is garbage
  61. Урок 61. 00:04:07
    Why the heap is divided into generations
  62. Урок 62. 00:05:01
    The Internals of the Young Generation
  63. Урок 63. 00:06:11
    Viewing the generations in VisualVM
  64. Урок 64. 00:03:06
    Viewing the heap when there's a soft leak
  65. Урок 65. 00:06:28
    Monitoring garbage collections
  66. Урок 66. 00:05:48
    Turning off automated heap allocation sizing
  67. Урок 67. 00:04:56
    Tuning garbage collection - old and young allocation
  68. Урок 68. 00:02:25
    Tuning garbage collection - survivor space allocation
  69. Урок 69. 00:02:07
    Tuning garbage collection - generations needed to become old
  70. Урок 70. 00:05:38
    Selecting a garbage collector
  71. Урок 71. 00:04:11
    The G1 garbage collector
  72. Урок 72. 00:01:55
    Tuning the G1 garbage collector
  73. Урок 73. 00:02:53
    String de-duplication
  74. Урок 74. 00:03:45
    Introducing Java Mission Control (JMC)
  75. Урок 75. 00:05:17
    Building the JMC binaries
  76. Урок 76. 00:03:31
    Running JMC and connecting to a VM
  77. Урок 77. 00:03:42
    Customising the overview tab
  78. Урок 78. 00:01:41
    The MBean Browser tab
  79. Урок 79. 00:02:25
    The System, Memory and Diagnostic Commands tabs
  80. Урок 80. 00:08:00
    Introducing our problem project
  81. Урок 81. 00:09:03
    Using the flight recorder
  82. Урок 82. 00:04:23
    Analyzing a flight recording
  83. Урок 83. 00:04:40
    Improving our application
  84. Урок 84. 00:06:11
    Why benchmarking isn't straight forward.
  85. Урок 85. 00:05:52
    Setting up the code for benchmarking
  86. Урок 86. 00:01:54
    A simple approach to micro-benchmarking
  87. Урок 87. 00:04:38
    Adding in a warm-up period
  88. Урок 88. 00:02:31
    Comparing two code alternatives
  89. Урок 89. 00:05:11
    Using Macro-bencharmking
  90. Урок 90. 00:04:19
    Installing the JMH benchmarking tool
  91. Урок 91. 00:05:57
    Creating and running benchmarks
  92. Урок 92. 00:03:10
    Using different benchmark modes
  93. Урок 93. 00:01:41
    Instructions for exercise 1 (creating a flight recording)
  94. Урок 94. 00:05:13
    Walkthrough of the solution & setting up ready for the next challenge
  95. Урок 95. 00:01:55
    Instructions for exercise 2 (use JMH to macrobenchmark the project)
  96. Урок 96. 00:05:18
    Walkthrough of the solution - part 1 setting up the code
  97. Урок 97. 00:07:10
    Walkthrough of the solution - part 2 - integrating into JMH
  98. Урок 98. 00:01:40
    Why it's important to understand how the different List implementations work
  99. Урок 99. 00:01:40
    The 8 different list implementations
  100. Урок 100. 00:02:38
    The CopyOnWriteArrayList
  101. Урок 101. 00:06:03
    The ArrayList
  102. Урок 102. 00:05:33
    Specifying the initial size of an ArrayList
  103. Урок 103. 00:02:56
    The Vector
  104. Урок 104. 00:01:19
    The Stack
  105. Урок 105. 00:03:08
    The LinkedList
  106. Урок 106. 00:06:58
    Choosing the optimal list type
  107. Урок 107. 00:02:38
    Sorting lists
  108. Урок 108. 00:03:18
    How Hashmaps Work - part 1
  109. Урок 109. 00:01:20
    The role of the Hashcode
  110. Урок 110. 00:03:47
    How Hashmaps Work - part 2
  111. Урок 111. 00:04:31
    Specifying the initial size and factor of a HashMap
  112. Урок 112. 00:02:32
    HashMap Performance
  113. Урок 113. 00:04:16
    The rules for Hashcodes
  114. Урок 114. 00:06:30
    Generating and optimising the Hashcode method
  115. Урок 115. 00:00:50
    Optimising Hashmap Performance
  116. Урок 116. 00:04:53
    How The LinkedHashMap Works
  117. Урок 117. 00:01:51
    The HashTable and TreeMap
  118. Урок 118. 00:01:42
    Introduction to how we'll compare coding options
  119. Урок 119. 00:02:55
    Comparing primatives with objects
  120. Урок 120. 00:03:47
    Comparing BigDecimals with Doubles
  121. Урок 121. 00:04:47
    Using the StringBuilder
  122. Урок 122. 00:06:42
    Comparing loops and streams
  123. Урок 123. 00:03:58
    A note on logging
  124. Урок 124. 00:06:46
    What is GraalVM?
  125. Урок 125. 00:03:00
    Installing GraalVM
  126. Урок 126. 00:06:36
    Using the Graal Virtual Machine
  127. Урок 127. 00:02:25
    Using the Graal Compiler
  128. Урок 128. 00:04:15
    Native image building with Graal
  129. Урок 129. 00:03:35
    Using the Graal experimental features within OpenJDK
  130. Урок 130. 00:07:05
    The principles of using other JVM Languages
  131. Урок 131. 00:10:51
    Looking at bytecode with javap
  132. Урок 132. 00:07:23
    Disassembling bytecode back to Java
  133. Урок 133. 00:03:02
    The OpenJ9 Virtual Machine and what's coming up in future versions of Java