SlideShare a Scribd company logo
1 of 97
Download to read offline
Designing for
Garbage Collection
Gregg Donovan
Senior Software Engineer
Etsy.com
Wednesday, July 31, 13
3.5Years Search Engineering at
Etsy.com
5 years Search & Web Engineering
atTheLadders.com
Wednesday, July 31, 13
Wednesday, July 31, 13
25+ million members
Wednesday, July 31, 13
20+ million items
Wednesday, July 31, 13
900k+ active sellers
Wednesday, July 31, 13
60+ million monthly
unique visitors
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
CodeAsCraft.etsy.com
Wednesday, July 31, 13
Wednesday, July 31, 13
Understanding GC
Wednesday, July 31, 13
Understanding GC
Monitoring GC
Wednesday, July 31, 13
Understanding GC
Monitoring GC
Debugging Memory Leaks
Wednesday, July 31, 13
Understanding GC
Monitoring GC
Debugging Memory Leaks
Design for Partial Availability
Wednesday, July 31, 13
Wednesday, July 31, 13
public class BuzzwordDetector {
static String[] prefixes = { "synergy", "win-win" };
static String[] myArgs = { "clown synergy", "gorilla win-wins", "whamee" };
public static void main(String[] args) {
args = myArgs;
int buzzwords = 0;
for (int i = 0; i < args.length; i++) {
String lc = args[i].toLowerCase();
for (int j = 0; j < prefixes.length; j++) {
if (lc.contains(prefixes[j])) {
buzzwords++;
}
}
}
System.out.println("Found " + buzzwords + " buzzwords");
}
}
Wednesday, July 31, 13
New():
ref <- allocate()
if ref = null /* Heap is full */
collect()
ref <- allocate()
if ref = null /* Heap is still full */
error "Out of memory"
return ref
atomic collect():
markFromRoots()
sweep(HeapStart, HeapEnd)
From Garbage Collection Handbook
Wednesday, July 31, 13
markFromRoots():
initialise(worklist)
for each fld in Roots
ref <- *fld
if ref != null && not isMarked(ref)
setMarked(ref)
add(worklist, ref)
mark()
initialise(worklist):
worklist <- empty
mark():
while not isEmpty(worklist)
ref <- remove(worklist) /* ref is marked */
for each fld in Pointers(ref)
child <- *fld
if (child != null && not isMarked(child)
setMarked(child)
add(worklist, child)
From Garbage Collection Handbook
Wednesday, July 31, 13
Trivia:Who invented the first
GC and Mark-and-Sweep?
Wednesday, July 31, 13
Weak Generational
Hypothesis
Wednesday, July 31, 13
Where do objects in your application live?
Wednesday, July 31, 13
GC Terminology:
Concurrent vs Parallel
Wednesday, July 31, 13
JVM Collectors
Wednesday, July 31, 13
Serial
Wednesday, July 31, 13
Throughput
Wednesday, July 31, 13
CMS
Wednesday, July 31, 13
Garbage First (G1)
Wednesday, July 31, 13
Continuously Concurrent Compacting Collector (C4)
Wednesday, July 31, 13
IBM, Dalvik, etc.?
Wednesday, July 31, 13
Why Throughput?
Wednesday, July 31, 13
Questions so far?
Wednesday, July 31, 13
Monitoring
Wednesday, July 31, 13
GC time per request
Wednesday, July 31, 13
...
import java.lang.management.*;
...
public static long getCollectionTime() {
long collectionTime = 0;
for (GarbageCollectorMXBean mbean : ManagementFactory.getGarbageCollectorMXBeans())
{
collectionTime += mbean.getCollectionTime();
}
return collectionTime;
}
Available via JMX
Wednesday, July 31, 13
Wednesday, July 31, 13
Visual GC
Wednesday, July 31, 13
Wednesday, July 31, 13
Wednesday, July 31, 13
export GC_DEBUG="-verbose:gc 
-XX:+PrintGCDateStamps 
-XX:+PrintHeapAtGC 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintAdaptiveSizePolicy 
-XX:AdaptiveSizePolicyOutputInterval=1 
-XX:+PrintTenuringDistribution 
-XX:+PrintGCDetails 
-XX:+PrintCommandLineFlags 
-XX:+PrintSafepointStatistics 
-Xloggc:/var/log/search/gc.log"
Wednesday, July 31, 13
Wednesday, July 31, 13
2013-04-08T20:14:00.162+0000: 4197.791: [Full GCAdaptiveSizeStart: 4206.559 collection: 213
PSAdaptiveSizePolicy::compute_generation_free_space limits: desired_promo_size: 9927789154
promo_limit: 8321564672 free_in_old_gen: 4096 max_old_gen_size: 22190686208 avg_old_live:
22190682112
AdaptiveSizePolicy::compute_generation_free_space limits: desired_eden_size: 9712028790
old_eden_size: 8321564672 eden_limit: 8321564672 cur_eden: 8321564672 max_eden_size: 8321564672
avg_young_live: 7340911616
AdaptiveSizePolicy::compute_generation_free_space: gc time limit gc_cost: 1.000000 GCTimeLimit: 98
PSAdaptiveSizePolicy::compute_generation_free_space: costs minor_time: 0.167092 major_cost:
0.965075 mutator_cost: 0.000000 throughput_goal: 0.990000 live_space: 29859940352 free_space:
16643129344 old_promo_size: 8321564672 old_eden_size: 8321564672 desired_promo_size: 8321564672
desired_eden_size: 8321564672
AdaptiveSizeStop: collection: 213
[PSYoungGen: 8126528K->7599356K(9480896K)] [ParOldGen: 21670588K->21670588K(21670592K)] 29797116K-
>29269944K(31151488K) [PSPermGen: 58516K->58512K(65536K)], 8.7690670 secs] [Times: user=137.36
sys=0.03, real=8.77 secs]
Heap after GC invocations=213 (full 210):
PSYoungGen total 9480896K, used 7599356K [0x00007fee47ab0000, 0x00007ff0dd000000,
0x00007ff0dd000000)
eden space 8126528K, 93% used [0x00007fee47ab0000,0x00007ff0177ef080,0x00007ff037ac0000)
from space 1354368K, 0% used [0x00007ff037ac0000,0x00007ff037ac0000,0x00007ff08a560000)
to space 1354368K, 0% used [0x00007ff08a560000,0x00007ff08a560000,0x00007ff0dd000000)
ParOldGen total 21670592K, used 21670588K [0x00007fe91d000000, 0x00007fee47ab0000,
0x00007fee47ab0000)
object space 21670592K, 99% used [0x00007fe91d000000,0x00007fee47aaf0e0,0x00007fee47ab0000)
PSPermGen total 65536K, used 58512K [0x00007fe915000000, 0x00007fe919000000,
0x00007fe91d000000)
object space 65536K, 89% used [0x00007fe915000000,0x00007fe918924130,0x00007fe919000000)
}
Wednesday, July 31, 13
GC Log Analyzers?
GCHisto
GCViewer
garbagecat
github.com/Netflix/gcviz
Wednesday, July 31, 13
Graphing with Logster
github.com/etsy/logster
Wednesday, July 31, 13
Wednesday, July 31, 13
GC Dashboard
github.com/etsy/dashboard
Wednesday, July 31, 13
Wednesday, July 31, 13
YourKit.com
Wednesday, July 31, 13
Designing for Partial Availability
Wednesday, July 31, 13
JVMTI GC Hook?
Wednesday, July 31, 13
How can a client ignore GC-ing hosts?
Wednesday, July 31, 13
Server lies to clients about availability
TCP socket receive buffer
TCP write buffer
Wednesday, July 31, 13
“Banner” protocol
1. Connect via TCP
2.Wait ~1-10ms
3. Either receive magic four byte header or try another host
4. Only send query after receiving header from server
Wednesday, July 31, 13
0xC0DEA5CF
Wednesday, July 31, 13
public function open() {
$this->handle_ = @fsockopen($this->host_, $this->port_, $errno, $errstr,
$this->connectTimeout_ / 1000.0);
try {
stream_set_timeout($this->handle_, 0, $banner_timeout * 1000);
$read_start = microtime(true);
$data = $this->readAll(4);
$read_time = (microtime(true) - $read_start) * 1000; // micros to millis
$arr = unpack('N', $data);
$value = $arr[1];
if ($value !== 0xC0DEA5CF) {
StatsD::increment("search.baddata.{$short_hostname}.{$this->getPort()}");
throw new TTransportException("[$value] does match banner [0xC0DEA5CF]");
}
} catch (Exception $e) {
$this->close(); // this won't necessarily be closed by clients
throw new TTransportException($message, self::BANNER_TIMEOUT_CODE);
}
}
Wednesday, July 31, 13
private static class BannerSendingTProcessorFactory extends TProcessorFactory {
private final TProcessor base;
public BannerSendingTProcessorFactory(TProcessor base)
{ super(base); this.base = base; }
@Override public TProcessor getProcessor(TTransport trans) {
return new BannerTProcessor(base, (TSocket) trans);
}
}
private static final class BannerTProcessor implements TProcessor {
private final TProcessor base; private final TSocket tsocket;
private BannerTProcessor(TProcessor base, TSocket tsocket) {
this.base = checkNotNull(base); this.tsocket = checkNotNull(tsocket);
}
@Override public boolean process(TProtocol in, TProtocol out) throws TException {
this.tsocket.write(TBannerUtil.BANNER, 0, 4);
this.tsocket.flush();
return this.base.process(in, out);
}
}
Wednesday, July 31, 13
What if GC happens
mid-request?
Wednesday, July 31, 13
Backup requests
Wednesday, July 31, 13
Jeff Dean: Achieving Rapid
Response Time in Large
Online Services
Wednesday, July 31, 13
Sharding?
Naive approach: only as fast as the slowest shard.
Wednesday, July 31, 13
“Make a reliable whole
out of unreliable parts.”
Wednesday, July 31, 13
Memory Leaks
Wednesday, July 31, 13
SolrIndexSearcher generation marking with
YourKit triggers
Wednesday, July 31, 13
Wednesday, July 31, 13
Questions so far?
Wednesday, July 31, 13
Miscellaneous Topics
Wednesday, July 31, 13
System.gc()?
Wednesday, July 31, 13
-XX:+UseCompressedOops
Wednesday, July 31, 13
-XX:+UseNUMA
Wednesday, July 31, 13
Paging
Wednesday, July 31, 13
#!/usr/bin/env bash
# This script is designed to be run every minute by cron.
host=$(hostname -s)
psout=$(ps h -p `cat /var/run/etsy-search.pid` -o min_flt,maj_flt 2>/dev/null)
min_flt=$(echo $psout | awk '{print $1}') # minor page faults
maj_flt=$(echo $psout | awk '{print $2}') # major page faults
epoch_s=$(date +%s)
echo -e "search_memstats.$host.etsy-search.min_fltt${min_flt:-0}t$epoch_s" | nc
graphite.etsycorp.com 2003
echo -e "search_memstats.$host.etsy-search.maj_fltt${maj_flt:-0}t$epoch_s" | nc
graphite.etsycorp.com 2003
Wednesday, July 31, 13
Solution 1: Buy more RAM
Ideally enough RAM to:
Keep data in OS file buffers
AND ensure no paging ofVM memory
AND whatever else happens on the box
~$5-10/GB
Wednesday, July 31, 13
echo “0” > /proc/sys/vm/swappiness
Wednesday, July 31, 13
mlock()/mlockall()
github.com/LucidWorks/mlockall-agent
Wednesday, July 31, 13
echo “-17” > /proc/$PID/oom_adj
Mercy from the OOM Killer
Wednesday, July 31, 13
Huge Pages
Wednesday, July 31, 13
-XX:+AlwaysPreTouch
Wednesday, July 31, 13
Future Directions
Wednesday, July 31, 13
Many small VMs instead of one large VM
microsharding
Wednesday, July 31, 13
Off-heap memory with sun.misc.Unsafe?
Wednesday, July 31, 13
Try G1 again
Wednesday, July 31, 13
Try C4 again
Wednesday, July 31, 13
Resources
Wednesday, July 31, 13
gchandbook.org
Wednesday, July 31, 13
Wednesday, July 31, 13
bit.ly/mmgcb
Mark Miller’s GC Bootcamp
Wednesday, July 31, 13
bit.ly/giltene
GilTene: Understanding Java
Garbage Collection
Wednesday, July 31, 13
bit.ly/cpumemory
Ulrich Drepper: What Every Programmer Should
Know About Memory
Wednesday, July 31, 13
github.com/pingtimeout/jvm-options
Wednesday, July 31, 13
Read the JVM Source
(Not as scary as it sounds.)
hg.openjdk.java.net/jdk7/jdk7
Wednesday, July 31, 13
Mechanical Sympathy Google Group
bit.ly/mechsym
Wednesday, July 31, 13
Questions?
Thanks for coming!
Gregg Donovan
gregg@etsy.com
Wednesday, July 31, 13

More Related Content

Similar to Designing for garbage collection

Bring the Noise
Bring the NoiseBring the Noise
Bring the NoiseJon Cowie
 
Dark Silicon, Mobile Devices, and Possible Open-Source Solutions
Dark Silicon, Mobile Devices, and Possible Open-Source SolutionsDark Silicon, Mobile Devices, and Possible Open-Source Solutions
Dark Silicon, Mobile Devices, and Possible Open-Source SolutionsKoan-Sin Tan
 
Intro to Clojure's core.async
Intro to Clojure's core.asyncIntro to Clojure's core.async
Intro to Clojure's core.asyncLeonardo Borges
 
Introduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfIntroduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfTulasiramKandula1
 
Multi dimensional profiling
Multi dimensional profilingMulti dimensional profiling
Multi dimensional profilingbergel
 
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang MeetupДоклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang MeetupBadoo Development
 
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...NoSQLmatters
 
Slippy Map Analytics FOSS4G 2014
Slippy Map Analytics FOSS4G 2014Slippy Map Analytics FOSS4G 2014
Slippy Map Analytics FOSS4G 2014Dustin Sampson
 
Euroclojure 2017
Euroclojure 2017Euroclojure 2017
Euroclojure 2017ehuard
 
Interact your wearable and an iot device
Interact your wearable and an iot deviceInteract your wearable and an iot device
Interact your wearable and an iot deviceJeff Prestes
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScriptYnon Perek
 
Android WebView, The Fifth Element
Android WebView, The Fifth ElementAndroid WebView, The Fifth Element
Android WebView, The Fifth ElementMurat Yener
 
少し幸せになる技術
少し幸せになる技術少し幸せになる技術
少し幸せになる技術kamedon39
 
Project_Automatic Photo Classification Web Service
Project_Automatic Photo Classification Web ServiceProject_Automatic Photo Classification Web Service
Project_Automatic Photo Classification Web ServiceHyo jeong Lee
 
Functional Reactive Programming on Android
Functional Reactive Programming on AndroidFunctional Reactive Programming on Android
Functional Reactive Programming on AndroidSam Lee
 
Performance #1: Memory
Performance #1: MemoryPerformance #1: Memory
Performance #1: MemoryYonatan Levin
 
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...Herman Wu
 
Hotspot Garbage Collection - Tuning Guide
Hotspot Garbage Collection - Tuning GuideHotspot Garbage Collection - Tuning Guide
Hotspot Garbage Collection - Tuning GuidejClarity
 

Similar to Designing for garbage collection (20)

Bring the Noise
Bring the NoiseBring the Noise
Bring the Noise
 
Dark Silicon, Mobile Devices, and Possible Open-Source Solutions
Dark Silicon, Mobile Devices, and Possible Open-Source SolutionsDark Silicon, Mobile Devices, and Possible Open-Source Solutions
Dark Silicon, Mobile Devices, and Possible Open-Source Solutions
 
Intro to Clojure's core.async
Intro to Clojure's core.asyncIntro to Clojure's core.async
Intro to Clojure's core.async
 
Introduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdfIntroduction to computing Processing and performance.pdf
Introduction to computing Processing and performance.pdf
 
Multi dimensional profiling
Multi dimensional profilingMulti dimensional profiling
Multi dimensional profiling
 
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang MeetupДоклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
 
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...
Giovanni Lanzani – SQL & NoSQL databases for data driven applications - NoSQL...
 
Slippy Map Analytics FOSS4G 2014
Slippy Map Analytics FOSS4G 2014Slippy Map Analytics FOSS4G 2014
Slippy Map Analytics FOSS4G 2014
 
QMC: Operator Splitting Workshop, Projective Splitting with Forward Steps and...
QMC: Operator Splitting Workshop, Projective Splitting with Forward Steps and...QMC: Operator Splitting Workshop, Projective Splitting with Forward Steps and...
QMC: Operator Splitting Workshop, Projective Splitting with Forward Steps and...
 
Euroclojure 2017
Euroclojure 2017Euroclojure 2017
Euroclojure 2017
 
Interact your wearable and an iot device
Interact your wearable and an iot deviceInteract your wearable and an iot device
Interact your wearable and an iot device
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScript
 
Android WebView, The Fifth Element
Android WebView, The Fifth ElementAndroid WebView, The Fifth Element
Android WebView, The Fifth Element
 
少し幸せになる技術
少し幸せになる技術少し幸せになる技術
少し幸せになる技術
 
Project_Automatic Photo Classification Web Service
Project_Automatic Photo Classification Web ServiceProject_Automatic Photo Classification Web Service
Project_Automatic Photo Classification Web Service
 
Functional Reactive Programming on Android
Functional Reactive Programming on AndroidFunctional Reactive Programming on Android
Functional Reactive Programming on Android
 
Performance #1: Memory
Performance #1: MemoryPerformance #1: Memory
Performance #1: Memory
 
Performance #1 memory
Performance #1   memoryPerformance #1   memory
Performance #1 memory
 
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...
運用CNTK 實作深度學習物件辨識 Deep Learning based Object Detection with Microsoft Cogniti...
 
Hotspot Garbage Collection - Tuning Guide
Hotspot Garbage Collection - Tuning GuideHotspot Garbage Collection - Tuning Guide
Hotspot Garbage Collection - Tuning Guide
 

Recently uploaded

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Designing for garbage collection