SlideShare una empresa de Scribd logo
1 de 95
Descargar para leer sin conexión
Show Me the Garbage
Haim Yadid @ Next Insurance
@lifeyx
NEXT
7
Today
NEXT
8
Talk Focus
Mainstream applications HPC/ HFT/ Huge heaps
Web apps latency Low latency
Monitor and Tune no allocation
NEXT
9
Agenda
● Memory Management Terminology
● GC Building Blocks
● Current OpenJDK GCs
● Monitoring GC and Memory
● Analysis of common problems
NEXT
Let’s talk
memory
10
NEXT
Heap
Thread
Stacks
Static
11
Memory (Data)
NEXT
Allocator - Memory Allocation mechanism
Collector - memory reclamation mechanism
12
Participants
Mutator
NEXT
Allocator - Memory Allocation mechanism
Mutators - the application threads
Collectors - the GC threads
14
Participants
NEXT
● new / malloc () to create object
● delete() / free() release an object
15
malloc / free
NEXT
● Dangling pointers / Double free
● Memory leaks
● Crashes
● Security Vulnerabilities
● Fragmentation
● Performance Degradation
16
I don’t miss it
NEXT
17
Automatic Reference Counting (ARC)
NEXT
1 1
Heap
2
1
1
1 0
Non Heap
18
Automatic Reference Counting (ARC)
NEXT
1 1
Heap
2
1
1
1 1
19
Automatic Reference Counting - Cycles
NEXT
Concurrency - Every change to reference requires a memory barrier
Very bad for highly concurrent systems Mostly relevant for single threaded
20
Reference Counting Concurrency
NEXT
The (Tracing) Garbage Collector
21
NEXT
22
NEXT
The 3 KPIs
(key performance indicators)
23
NEXT
CPU/Time Overhead
The amount of time the GC consumes / requires
○ Wall clock time
○ CPU time
24
NEXT
Memory Overhead
The amount of memory the GC requires
○ Internal Data structures
○ Headroom
25
NEXT
Latency (Pauses)
What is the probability that the GC will affect your
transaction time and for how long
26
NEXT
Terminology
(Heap)
27
NEXT
Heap
Static &
Stack
28
To Heap or not to Heap
NEXT
Heap
29
Root Set
NEXT
Heap
Stack
30
Live Set (Reachable objects)
NEXT
Heap
Stack
31
Garbage (Unreachable Objects)
NEXT
Heap
Stack
32
Garbage (Unreachable Objects)
NEXT
Heap
Stack
33
Garbage (Unreachable Objects)
NEXT
Heap
Stack
34
Free List
NEXT
Building Blocks
&
Algorithms
35
NEXT
Heap
36
Root Scanning & Safe Points
Work: O(#threads & stack frames)
NEXT
Heap
Work: O(#Objects in LiveSet)
Stack
37
Marking (a.k.a. tracing)
NEXT
Sweep through the heap and collect all unmarked objects
Maintain a list of free memory portions
Work: O(#Objects and
fragments in Heap)
Heap
Unreachable
Reachable
Free
38
Mark & Sweep : Sweep
NEXT
39
Sweep: Fragmentation
NEXT
Moving objects to make bigger free contiguous spaces
Heap Heap
Work:
O( Size of Liveset in Heap)
40
Mark Compact
NEXT
41
Moving object around
● fix incoming references
● Stop application ?
● Read and write memory barriers
○ Brook pointer (shenandoah)
○ colored pointers (zgc, C4)
NEXT
Move all live objects to another space
From Space To Space
Work: O(Size of live set)
Memory: x2
42
Copy collector
NEXT
43
Thread Local Bump allocation
NEXT
Weak Generational Hypothesis - Most object die young
The surviving ones tend to live for a long time
44
Generational collectors
NEXT
Old
Non
Heap
From To
45
New/ Old Generation
there are also survivor spaces (I know)
NEXT
Higher throughput
Shorter new generation collection
46
Generational collectors
NEXT
Heap
Non
Heap
47
Regional
NEXT
Single Threaded
Stop the World Concurrent
Parallel
VS
VS
Monolithic Incremental
VS
48
Collectors Attributes
NEXT
49
STW Collectors - Serial (single threaded) - Monolithic
(Non incremental)
stop the world
Application
Threads
GC
Thread
NEXT
50
STW Collectors - Incremental
NEXT
51
STW Collectors - Parallel
Application
Threads
GC
Threads
NEXT
52
Concurrent Collectors - (single threaded)
NEXT
53
Concurrent Collectors -Parallel
NEXT
Let’s Talk about Mostly
54
NEXT
When do we want to collect Garbage?
55
NEXT
56
NEXT
57
The Open JDK GCs - Serial
Property Serial
-XX:+UseSerialGC
Compacting
Regional
Generational
Concurrent
Mostly Concurrent
When To Use Small Heaps
Single cpu
containers
(*) can be found as part of Corretto JDK
NEXT
58
The Open JDK GCs - Parallel
Property Serial
-XX:+UseSerialGC
Parallel
-XX:+UseParallelGC
Compacting
Regional
Generational
Concurrent
Mostly Concurrent
When To Use Small Heaps
Single cpu
containers
High throughput
Latency of a
single response is
not important
(*) can be found as part of Corretto JDK
NEXT
59
The Open JDK GCs - G1GC
Property Serial
-XX:+UseSerialGC
Parallel
-XX:+UseParallelGC
G1
-XX:+UseG1GC
Compacting
Regional
Generational
Concurrent <200ms
Mostly Concurrent Old gen only
When To Use Small Heaps
Single cpu
containers
High throughput
Latency of a
single response is
not important
Mainstream
applications
(*) can be found as part of Corretto JDK
NEXT
60
The Open JDK GCs - ZGC
Property Serial
-XX:+UseSerialGC
Parallel
-XX:+UseParallelGC
G1
-XX:+UseG1GC
ZGC
-XX:+UseG1GC
Compacting
Regional
Generational WIP
Concurrent <200ms <1ms
Mostly Concurrent Old gen only
When To Use Small Heaps
Single cpu
containers
High throughput
Latency of a
single response is
not important
Mainstream
applications
Large Heaps
Highly
responsive
(*) can be found as part of Corretto JDK
NEXT
61
The Open JDK GCs - Shenandoah
Property Serial
-XX:+UseSerialGC
Parallel
-XX:+UseParallelGC
G1
-XX:+UseG1GC
ZGC
-XX:+UseG1GC
Shenandoah(*)
-XX:+UseShenandoahGC
Compacting
Regional
Generational WIP WIP
Concurrent <200ms <1ms <1ms
Mostly Concurrent Old gen only
When To Use Small Heaps
Single cpu
containers
High throughput
Latency of a
single response is
not important
Mainstream
applications
Large Heaps
Highly
responsive
Large Heaps
Highly responsive
(*) can be found as part of Corretto JDK
NEXT
62
Azul’s C4
Property C4
Compacting
Regional
Generational
Concurrent
Mostly
Concurrent
When To Use Large
Heaps
low latency
NEXT
63
Let’s go practical
Dall-e: practical engineer picasso style
NEXT
Monitoring
64
NEXT
● CPU/Time overhead
● Memory Overhead
● Latency and Pauses
65
So what should we monitor ?
NEXT
-Xlog:gc=info:
file=<file_name>:
time,uptime,level,tags:
filecount=5,filesize=20m
66
GC Logs
Output file
decorators
Output Options
Tag
NEXT
67
GC Logs
[2022-09-01T17:30:40.433+0000][0.004s][info][gc] Using G1
[2022-09-01T17:30:41.975+0000][1.546s][info][gc] GC(0) Pause Young (Concurrent Start) (Metadata GC
Threshold) 126M->30M(4096M) 12.598ms
[2022-09-01T17:30:41.975+0000][1.546s][info][gc] GC(1) Concurrent Mark Cycle
[2022-09-01T17:30:41.988+0000][1.558s][info][gc] GC(1) Pause Remark 32M->22M(4096M) 2.119ms
[2022-09-01T17:30:41.988+0000][1.558s][info][gc] GC(1) Pause Cleanup 22M->22M(4096M) 0.003ms
[2022-09-01T17:30:42.052+0000][1.622s][info][gc] GC(1) Concurrent Mark Cycle 76.584ms
[2022-09-01T17:30:42.824+0000][2.395s][info][gc] GC(2) Pause Young (Concurrent Start) (Metadata GC
NEXT
68
GC Logs - Description
[2022-09-01T17:32:31.262+0000][110.832s][info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause)
486M->130M(4096M) 93.914ms
NEXT
69
GC Logs - Time Stamp (when)
[2022-09-01T17:32:31.262+0000][110.832s]
[info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause)
486M->130M(4096M) 93.914ms
NEXT
70
GC Logs - Memory released (how much)
[2022-09-01T17:32:31.262+0000][110.832s]
[info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause)
486M->130M(4096M) 93.914ms
NEXT
71
GC Logs - Memory released (how long )
[2022-09-01T17:32:31.262+0000][110.832s]
[info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause)
486M->130M(4096M) 93.914ms
NEXT
72
GC Logs
[2022-09-01T17:32:31.262+0000][110.832s][info][gc] GC(15) Pause Young (Normal) (G1 Evacuation Pause) 486M->130M(4096M) 93.914ms
[2022-09-01T17:33:48.974+0000][188.545s][info][gc] GC(16) Pause Young (Normal) (G1 Evacuation Pause) 1240M->169M(4096M) 26.671ms
.
.
.
Start and End Time
Freed memory
Overhead
Frequency
Allocation Rate
Pause Time
NEXT
73
GC Logs - GC Viewer
NEXT
74
GC Logs - GC Viewer
NEXT
75
GC Logs - GC Viewer
NEXT
76
GCEasy.io
NEXT
77
GCEasy.io
NEXT
● MBeans
● Mission Control
78
JMX (Java.lang.GarbageCollector)
NEXT
79
Visual GC
* does not support ZGC and Shenandoah
NEXT
● Wake Up every x ms
● measure amount time passed
● https://github.com/giltene/jHiccup
80
Latency - Hiccup Probe (inspired by jHiccup)
T T+x + p
{
Sleep X ms
NEXT
● GC logs and - System.gc()
● Histogram of live set : jmap -histo:live <PID>
● Grab a Heap dump (or at least a heap histogram)
81
Estimate Live Set
NEXT
● Long lasting memory ( maybe slowly changing)
● Service with large state will benefit from generational GC
● If State is bigger than old gen …. very bad
82
Live set - Long lasting - state
NEXT
● The (maximal/average) amount of memory needed to serve
a request
83
Live set - Working memory
NEXT
Common
Problems
84
NEXT
85
https://github.com/lifey/gcKryptonites
Pause Detector
every 10ms detects (10& 100ms)
State Holder
Holds 2GB of smalls object (100m)
Brutal Allocator
Allocates 500 MB/s
2X
NEXT
86
Some Results
NEXT
87
Some Results
G1
Shenandoah
ZGC
NEXT
88
Some Results(2 min execution 4GB heap)
G1 Shenandoah zGC Parallel
# 10ms pause 27 3 10 107
# 100 ms pause 0 1 4 9
Average runtime
of iteration
302ms 794ms 352ms 434ms
LiveSet 2GB 2GB 2.5GB 2GB
NEXT
● Is it over > 5%
● Improve by :
○ Increase heap size
○ Use Generational Garbage collector
89
Excess GC (Temporal) Overhead
NEXT
● What can you tolerate ?
● Move to a concurrent
● Upgrade to the newest JVM
● Use Zing JVM
90
Latency
NEXT
● Use Generational Garbage collector
● Trade throughput
91
Excess GC (Memory) Overhead
NEXT
● Compacting GC should not have fragmentation
● What about humongous objects ?
● G1 handles it poorly
● ZGC Does better
92
Fragmentation
NEXT
● long term state should fit in old gen
● short term memory should not spill to old gen
93
Generational GC anomalies
New Generation Old Generation
Application State
NEXT
94
Your Service Questionnaire:
Question Value
Heap size the process is using (-Xmx)
GC overhead over an hour of peak time
Max Pause Time over a 24 hour period
Number of collections above GC pause time targets
Live set size (MB)
Allocation Rate
NEXT
95
Additional Reading

Más contenido relacionado

Similar a “Show Me the Garbage!”, Garbage Collection a Friend or a Foe

SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
Chester Chen
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
codebits
 
Term Project Presentation (4)
Term Project Presentation (4)Term Project Presentation (4)
Term Project Presentation (4)
Louis Loizides PE
 
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Akihiro Hayashi
 

Similar a “Show Me the Garbage!”, Garbage Collection a Friend or a Foe (20)

Sheepdog Status Report
Sheepdog Status ReportSheepdog Status Report
Sheepdog Status Report
 
LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205LMG Lightning Talks - SFO17-205
LMG Lightning Talks - SFO17-205
 
Garbage First & You
Garbage First & YouGarbage First & You
Garbage First & You
 
Garbage First and you
Garbage First and youGarbage First and you
Garbage First and you
 
Garbage First and You!
Garbage First and You!Garbage First and You!
Garbage First and You!
 
Choosing Right Garbage Collector to Increase Efficiency of Java Memory Usage
Choosing Right Garbage Collector to Increase Efficiency of Java Memory UsageChoosing Right Garbage Collector to Increase Efficiency of Java Memory Usage
Choosing Right Garbage Collector to Increase Efficiency of Java Memory Usage
 
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
 
Jvm problem diagnostics
Jvm problem diagnosticsJvm problem diagnostics
Jvm problem diagnostics
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and Cassandra
 
Experiences with Power 9 at A*STAR CRC
Experiences with Power 9 at A*STAR CRCExperiences with Power 9 at A*STAR CRC
Experiences with Power 9 at A*STAR CRC
 
Scalable Matrix Multiplication for the 16 Core Epiphany Co-Processor
Scalable Matrix Multiplication for the 16 Core Epiphany Co-ProcessorScalable Matrix Multiplication for the 16 Core Epiphany Co-Processor
Scalable Matrix Multiplication for the 16 Core Epiphany Co-Processor
 
Term Project Presentation (4)
Term Project Presentation (4)Term Project Presentation (4)
Term Project Presentation (4)
 
Accelerating HBase with NVMe and Bucket Cache
Accelerating HBase with NVMe and Bucket CacheAccelerating HBase with NVMe and Bucket Cache
Accelerating HBase with NVMe and Bucket Cache
 
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
 
GIST AI-X Computing Cluster
GIST AI-X Computing ClusterGIST AI-X Computing Cluster
GIST AI-X Computing Cluster
 
OpenFOAM benchmark for EPYC server: cavity medium
OpenFOAM benchmark for EPYC server: cavity mediumOpenFOAM benchmark for EPYC server: cavity medium
OpenFOAM benchmark for EPYC server: cavity medium
 
Experiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah WatkinsExperiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah Watkins
 
Ceph Day Netherlands - Ceph @ BIT
Ceph Day Netherlands - Ceph @ BIT Ceph Day Netherlands - Ceph @ BIT
Ceph Day Netherlands - Ceph @ BIT
 
µCLinux on Pluto 6 Project presentation
µCLinux on Pluto 6 Project presentationµCLinux on Pluto 6 Project presentation
µCLinux on Pluto 6 Project presentation
 

Más de Haim Yadid

Más de Haim Yadid (19)

Loom me up Scotty! Project Loom - What's in it for Me?
Loom me up Scotty!  Project Loom - What's in it for Me?Loom me up Scotty!  Project Loom - What's in it for Me?
Loom me up Scotty! Project Loom - What's in it for Me?
 
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyKotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
 
“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection“Show Me the Garbage!”, Understanding Garbage Collection
“Show Me the Garbage!”, Understanding Garbage Collection
 
Java Memory Structure
Java Memory Structure Java Memory Structure
Java Memory Structure
 
Basic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxBasic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With Jmx
 
The Freelancer Journey
The Freelancer JourneyThe Freelancer Journey
The Freelancer Journey
 
Building microservices with Kotlin
Building microservices with KotlinBuilding microservices with Kotlin
Building microservices with Kotlin
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, Seriously
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage Collection
 
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
JVM Garbage Collection logs, you do not want to ignore them! - Reversim Summi...
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profiling
 
Java 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesJava 8 Launch - MetaSpaces
Java 8 Launch - MetaSpaces
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped Lock
 
The Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFuturesThe Future of Futures - A Talk About Java 8 CompletableFutures
The Future of Futures - A Talk About Java 8 CompletableFutures
 
Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014Concurrency and Multithreading Demistified - Reversim Summit 2014
Concurrency and Multithreading Demistified - Reversim Summit 2014
 
A short Intro. to Java Mission Control
A short Intro. to Java Mission ControlA short Intro. to Java Mission Control
A short Intro. to Java Mission Control
 
Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala Performance
 
Israeli JUG - IL JUG presentation
Israeli JUG -  IL JUG presentation Israeli JUG -  IL JUG presentation
Israeli JUG - IL JUG presentation
 

Último

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Último (20)

How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 

“Show Me the Garbage!”, Garbage Collection a Friend or a Foe