Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Heinz's Happy Hour Webinar Season 01
Episode 01 - Welcome to Webinar Series, ConcurrentHashMap.computeIfAbsent(), IntelliJ IDEA Magic
1.1 Welcome to Heinz's Happy Hour Webinars (3:45)
1.2 5 Minute Guide to IntelliJ IDEA (7:17)
1.3 ConcurrentHashMap (3:17)
1.4 computeIfAbsent() Recursive Update (11:09)
1.5 Replacing computeIfAbsent() with putIfAbsent() (14:56)
1.6 Thread Contention in computeIfAbsent() (12:23)
1.7 Letting Threads Start Work at the Same Time (3:40)
1.8 Using volatile boolean to Start Threads Together (1:20)
1.9 Thanks and Until Next Time (2:21)
Episode 02 - Spliterator Deep Dive
2.1 Welcome to Spliterator Deep Dive (1:32)
2.2 Characteristics.ORDERED (4:52)
2.3 Characteristics.DISTINCT (2:40)
2.4 Characteristics.SORTED (1:23)
2.5 Characteristics.SIZED (4:16)
2.6 Characteristics.SUBSIZED (8:50)
2.7 Characteristics.NONNULL (3:03)
2.8 Characteristics of IdentityHashMap (7:16)
2.9 Characteristics.IMMUTABLE (3:40)
2.10 Characteristics.CONCURRENT (1:05)
2.11 Summary of Characteristics (0:16)
2.12 Implementing Spliterator Interface (0:57)
2.13 Our Own BasicArraySpliterator (2:29)
2.14 estimateSize() (1:58)
2.15 tryAdvance() (3:45)
2.16 trySplit() (19:32)
2.17 characteristics() (9:41)
2.18 forEachRemaining() (4:44)
2.19 getComparator() (0:55)
2.20 Performance of Splitting (6:58)
2.21 Questions (7:09)
Episode 03 - Turbo Charge CPU Utilization with Fork/Join and the ManagedBlocker
3.1 Welcome to ManagedBlocker Talk (2:10)
3.2 Fibonacci Algorithms (4:51)
3.3 Dijkstra's Sum of Squares - Demo 1 (4:48)
3.4 Parallelize Our Algorithm - Demo 2 (3:37)
3.5 Parallelize BigInteger - Demo 3 (10:25)
3.6 Cache Results - Demo 4 (8:30)
3.7 Reserved Caching Scheme - Demo 5 (9:14)
3.8 ManagedBlocker - Demo 6 (10:40)
3.9 Questions (8:00)
Episode 04 - Generifying java.util.Observer
4.1 Welcome (0:24)
4.2 Observer Design Pattern (4:31)
4.3 java.util.Observer (2:26)
4.4 Generifying Observer (5:21)
4.5 Mutually Recursive Generics (3:56)
4.6 Linking Our Generified Observer to the WatchService (12:19)
4.7 Testing our DirectoryChangeWatcher (7:56)
4.8 Creating a ReactiveTableModel Watching a Directory (12:22)
4.9 Creating a GUI to View Directory Changes (3:37)
4.10 Fixing the Race Condition in our Table Model (7:13)
4.11 Why No One Uses java.util.Observer (1:20)
4.12 Observer Livelocks (2:33)
Episode 05 - Q&A with Heinz Kabutz and Maurice Naftalin
5.1 Welcome and Friendly Banter (5:09)
5.2 G1 GC Dynamic Log Viewer (1:54)
5.3 Default Methods in Java and Synchronized (6:11)
5.4 Memory Mapped File Performance (0:29)
5.5 forEach() Performance in Java 8 (2:36)
5.6 Explanation Why Interface Methods Cannot be Synchronized (2:20)
5.7 Java 9 Private Interface Methods (12:06)
5.8 Discussions About Optional in Java 8 and 9 (5:35)
5.9 Lambda Pitfalls (11:14)
5.10 Exceptions in Streams : Lambdas (1:47)
5.11 Compact in Java 8 JavaDocs (5:06)
Episode 06 - Java 9 java.util.* changes, Why you need to upgrade ASAP, Q&A with Maurice Naftalin
6.1 Friendly Banter (1:34)
6.2 java.util.Arrays in Java 9 (11:40)
6.3 Enumeration to Iterator (4:48)
6.4 Observable Replaced by Flow (0:27)
6.5 Immutable Collections Java 9 (12:51)
6.6 Objects.* New Methods in Java 9 (5:32)
6.7 Optional in Java 9 (0:27)
6.8 Scanner in Java 9 (1:15)
6.9 Why You Should Migrate To Java 9 (9:12)
6.10 Question Time (13:00)
Episode 07 - Conference Speaking, StringSquasher with CharSequence
7.1 Conference Speaking (9:17)
7.2 Intrinsics (1:54)
7.3 Review of Immutable Lists in Java 9 (3:18)
7.4 Memory Hogs By Reynolds (2:23)
7.5 String deduplication (5:37)
7.6 Compact Strings in Java 9 (4:27)
7.7 StringSquasher (17:30)
7.8 Questions (10:01)
7.9 JCrete 2017 (3:31)
Episode 08 - Advanced G1GC Tuning Session with Kirk Pepperdine
8.1 Welcome to our Advanced G1GC Tuning Session with Kirk Pepperdine (1:14)
8.2 Oracle's G1 Propaganda (3:09)
8.3 How Region Size is Calculated (2:09)
8.4 How Regions Are Allocated to Generations (3:29)
8.5 Visualizing Layout of the G1GC Heap (1:25)
8.6 Young Collection (1:30)
8.7 Old Collection - Concurrent Mark (1:46)
8.8 Time to Safe Point (TTSP) (2:51)
8.9 Collection Set (0:54)
8.10 Mark and Calculate Liveliness With G1MixedGCLiveThresholdPercent (2:32)
8.11 Eligible Regions for Mixed Collections (1:06)
8.12 Humongous Allocations (6:31)
8.13 Allocators vs Collectors (3:02)
8.14 RSet Refinement Threads (1:08)
8.15 How To Get a GC Log (1:31)
8.16 Analysis of GC Log Using jClarity's Censum Tool (6:47)
8.17 Censum - Heap Graphs (4:09)
8.18 Censum - Memory Pool Sizing (3:22)
8.19 Censum - Allocation Rates (2:27)
8.20 Censum - Pause Times (1:13)
8.21 Censum - G1 Phases (3:37)
8.22 Censum - Tenuring Distribution Summary (0:43)
8.23 Tuning Recommendation Based on Censum Analysis (4:52)
8.24 Questions (5:27)
8.25 Question - Is G1 an alternative as from JDK 8 versus CMS? (6:51)
Episode 09 - Safely Shoot Yourself in the Foot with Java 9
9.1 Welcome (0:40)
9.2 Project Jigsaw (3:36)
9.3 Working Safely in Java (5:13)
9.4 Evolution of Unsafe Usage - AtomicReferenceFieldUpdater (1:11)
9.5 Evolution of Unsafe Usage - Unsafe in ConcurrentLinkedQueue (3:07)
9.6 Introduction of VarHandle in Java 9 (2:25)
9.7 Unsafe Usage in Java 7,8,9 (2:21)
9.8 VarHandles Operations (2:11)
9.9 Striped64 Tutorial (6:20)
9.10 ThreadLocalRandom Evolution and Probe Field (3:23)
9.11 Accessing Thread Probe Field in Java 9 (1:08)
9.12 Changing Strings With VarHandle (3:52)
9.13 Getting Rid of Warnings (1:13)
9.14 MappedByteBuffer (10:15)
9.15 JVisualVM Gone in Java 9 (2:24)
9.16 Marking Fields @Contended in Java 9 (1:52)
9.17 Java 9 Stream Changes (3:18)
9.18 jshell For Scripting (7:03)
9.19 Unix Style Scripting With jshell (2:20)
9.20 Garbage Collection Changes in Java 9 (1:01)
9.21 Hacking BigInteger (4:29)
9.22 Questions (4:03)
Episode 10 - Little Known Java 9 Features
10.1 Welcome (0:13)
10.2 New Cleaner in Java 9 (4:01)
10.3 Finalizers in Java 9, reachabilityFence() (4:43)
10.4 Deprecations Going Forward (12:21)
10.5 Asynchronous Exceptions with Thread.stop() (1:39)
10.6 transferTo() and readAllBytes() (1:57)
10.7 Compiler Bug With Java StackOverFlow (4:06)
10.8 onSpinWait() (0:46)
10.9 Math.fma() (0:40)
10.10 System.Logger (0:17)
10.11 BigDecimal and BigInteger sqrt() (4:33)
10.12 ForkJoinPool New Constructor (0:21)
10.13 Desktop.moveToTrash() (2:53)
10.14 JAlba Unconference in Edinburgh, Scotland (2:15)
10.15 Questions (1:54)
Episode 11 - Refactoring to Java 8 Streams and Lambdas with Maurice Naftalin
11.1 Welcome and Chitter Chatter (7:35)
11.2 Refactoring Loops With Java 8 Streams (7:42)
11.3 Refactoring with stream(), map(), collect(), also Method References (17:47)
11.4 ModelReader.getEntityCache(), distinct(), String joining (18:54)
11.5 EntityGroupUtil.getModelEntityFromRecords(), anyMatch() (difficult) (16:39)
11.6 Comments and Questions (5:03)
Episode 12: The Inglorious History of the Common java.util.ArrayList
12.0 Friendly Banter (2:59)
12.1 Welcome to The Inglorious History of the Common java.util.ArrayList (2:40)
12.2 Review of Java 1.2 ArrayList (1:00)
12.4 Serialization Deadlock Java 1.2 and 1.3 (3:47)
12.3 Java 1.2 -> 1.3 - Negative ArrayList Size (2:29)
12.5 Stuart Marks Challenge (5:35)
12.6 Java 1.3 -> 1.4 Arithmetic Overflow in int calculation (2:11)
12.7 Java 1.3 -> 1.4 - RandomAccess, bulk operations and serialVersionUID (5:18)
12.8 Java 1.4 -> 1.5 - Generics (2:15)
12.9 Serialization - Why is elementData transient? (2:11)
12.10 Java 5 -> 6 (2:48)
12.11 toArray() returning wrong type of array (6:07)
12.12 Arrays.copyOf() (0:38)
12.13 Java 6 -> 7 - No-Args Constructor lazily initializing array (3:12)
12.14 Java 7 Bulk Methods slightly improved (1:11)
12.15 Java 7 Serialization (1:29)
12.16 Java 7 -> 8 (0:31)
12.17 Computational time complexity of removeIf() (1:22)
12.18 List.sort() with exceptions (2:25)
12.19 Java 8 -> Java 9 - Martin Thompson style coding (2:29)
12.20 Thank you! (0:54)
Teach online with
10.14 JAlba Unconference in Edinburgh, Scotland
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock