SlideShare a Scribd company logo
The hitchhiker’s guide to
Java class reloading
@antonarhipov
whoami
Anton Arhipov
@antonarhipov
whoami
Anton Arhipov
@antonarhipov
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
https://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/
10%
20%
30%
0.5 1 2 3 4 5 6 7 8 10+ minutes
https://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/
10%
20%
30%
0.5 1 2 3 4 5 6 7 8 10+
The only effective developers??
minutes
https://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/
10%
20%
30%
0.5 1 2 3 4 5 6 7 8 10+
How about those?
minutes
The problem:
where did the time go?
The problem:
where did the time go?
1-30
sec
Container startup time
The problem:
where did the time go?
1-30
sec
Container startup time
~3 min
30 min1 s
Application deployment
The problem:
where did the time go?
1-30
sec
Container startup time
~3 min
30 min1 s
Application deployment
~1
min
Navigation
Technical solutions
Technical solutions
HotSwap
Technical solutions
HotSwap
Class loaders
Technical solutions
HotSwap
Class loaders
Java agents & instrumentation
Technical solutions
HotSwap
Class loaders
Java agents & instrumentation
hotswapEST. 2001
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
HOW ABOUT…
refactoring?
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JDB
instanceKlass constantPoolOop
constants()
pool_holder()
klassVTable
Embedded
klassITable
Embedded
Embedded
statics
M. Dmitriev. Safe class and data evolution in large and long-lived Java (тм) applications. Technical report, Mountain View. 2001
instanceKlass constantPoolOop
constants()
constantPoolCacheOop
cache()
pool_holder()
klassVTable
Embedded
klassITable
Embedded
Embedded
statics
M. Dmitriev. Safe class and data evolution in large and long-lived Java (тм) applications. Technical report, Mountain View. 2001
instanceKlass constantPoolOop
constants()
constantPoolCacheOop
cache()
pool_holder()
klassVTable
Embedded
klassITable
Embedded
Embedded
statics
objArrayOop
methodOop
methods()
M. Dmitriev. Safe class and data evolution in large and long-lived Java (тм) applications. Technical report, Mountain View. 2001
instanceKlass constantPoolOop
constants()
constantPoolCacheOop
cache()
pool_holder()
klassVTable
Embedded
klassITable
Embedded
Embedded
statics
nmethod
code()
method()
constants()
objArrayOop
methodOop
methods()
M. Dmitriev. Safe class and data evolution in large and long-lived Java (тм) applications. Technical report, Mountain View. 2001
instanceKlass constantPoolOop
constants()
constantPoolCacheOop
cache()
pool_holder()
klassVTable
Embedded
klassITable
Embedded
Embedded
statics
nmethod
code()
method()
constants()
objArrayOop
methodOop
methods()
M. Dmitriev. Safe class and data evolution in large and long-lived Java (тм) applications. Technical report, Mountain View. 2001
Limited to individual statements
What if…
hotswap++
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods Fields
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods Fields Hierarchy
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods Fields Hierarchy
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods Fields Hierarchy
+ + +
Binary-compatible
Dynamic Code Evolution for Java
T. Würthinger, C. Wimmer, L. Stadler. 2010
Statements
Methods Fields Hierarchy
+ + +
x x x
Binary-compatible
Binary-incompatible
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
Classloaders
Class<?> uc1 = User.class;
Class<?> uc2 = new DynamicClassLoader().load("com.zt.User");
out.println(uc1.getName()); // com.zt.User
out.println(uc2.getName()); // com.zt.User
out.println(uc1.getClassLoader()); // sun.misc.Launcher$AppClassLoader@18b4aac2
out.println(uc2.getClassLoader()); // com.zt.DynamicClassLoader@22b4bba7
User.age = 11;
out.println((int) ReflectUtil.getStaticFieldValue("age", uc1)); // 11
out.println((int) ReflectUtil.getStaticFieldValue("age", uc2)); // 10
public class User {
public static int age = 10;
}
Class<?> uc1 = User.class;
Class<?> uc2 = new DynamicClassLoader().load("com.zt.User");
out.println(uc1.getName()); // com.zt.User
out.println(uc2.getName()); // com.zt.User
out.println(uc1.getClassLoader()); // sun.misc.Launcher$AppClassLoader@18b4aac2
out.println(uc2.getClassLoader()); // com.zt.DynamicClassLoader@22b4bba7
User.age = 11;
out.println((int) ReflectUtil.getStaticFieldValue("age", uc1)); // 11
out.println((int) ReflectUtil.getStaticFieldValue("age", uc2)); // 10
public class User {
public static int age = 10;
}
Class<?> uc1 = User.class;
Class<?> uc2 = new DynamicClassLoader().load("com.zt.User");
out.println(uc1.getName()); // com.zt.User
out.println(uc2.getName()); // com.zt.User
out.println(uc1.getClassLoader()); // sun.misc.Launcher$AppClassLoader@18b4aac2
out.println(uc2.getClassLoader()); // com.zt.DynamicClassLoader@22b4bba7
User.age = 11;
out.println((int) ReflectUtil.getStaticFieldValue("age", uc1)); // 11
out.println((int) ReflectUtil.getStaticFieldValue("age", uc2)); // 10
public class User {
public static int age = 10;
}
Class<?> uc1 = User.class;
Class<?> uc2 = new DynamicClassLoader().load("com.zt.User");
out.println(uc1.getName()); // com.zt.User
out.println(uc2.getName()); // com.zt.User
out.println(uc1.getClassLoader()); // sun.misc.Launcher$AppClassLoader@18b4aac2
out.println(uc2.getClassLoader()); // com.zt.DynamicClassLoader@22b4bba7
User.age = 11;
out.println((int) ReflectUtil.getStaticFieldValue("age", uc1)); // 11
out.println((int) ReflectUtil.getStaticFieldValue("age", uc2)); // 10
public class User {
public static int age = 10;
}
Class<?> uc1 = User.class;
Class<?> uc2 = new DynamicClassLoader().load("com.zt.User");
out.println(uc1.getName()); // com.zt.User
out.println(uc2.getName()); // com.zt.User
out.println(uc1.getClassLoader()); // sun.misc.Launcher$AppClassLoader@18b4aac2
out.println(uc2.getClassLoader()); // com.zt.DynamicClassLoader@22b4bba7
User.age = 11;
out.println((int) ReflectUtil.getStaticFieldValue("age", uc1)); // 11
out.println((int) ReflectUtil.getStaticFieldValue("age", uc2)); // 10
public class User {
public static int age = 10;
}
while(true) {
Class<?> uc = new DynamicClassLoader().load("com.zt.User");
ReflectUtil.invokeStatic("getHobby", uc);
}
public class User {
public Hobby getHobby() {
return Basketball();
}
}
while(true) {
Class<?> uc = new DynamicClassLoader().load("com.zt.User");
ReflectUtil.invokeStatic("getHobby", uc);
}
public class User {
public Hobby getHobby() {
return Basketball();
}
}
while(true) {
Class<?> uc = new DynamicClassLoader().load("com.zt.User");
ReflectUtil.invokeStatic("getHobby", uc);
}
public class User {
public Hobby getHobby() {
return Basketball();
}
}
Assume there is a trigger / event
public static class Context {
public HobbyService hobbyService = new HobbyService();
public void init() {
hobbyService.user = new User();
anyService.initialize()
}
}
public static class Context {
public HobbyService hobbyService = new HobbyService();
public AnyService anyService = new AnyService();
public void init() {
hobbyService.user = new User();
anyService.initialize()
}
}
public static class Context {
public HobbyService hobbyService = new HobbyService();
public AnyService anyService = new AnyService();
public void init() {
hobbyService.user = new User();
anyService.initialize()
}
}
while(true) {
Class<?> c = new DynamicClassLoader().load("com.zt.Context");
Object context = c.newInstance();
ReflectUtil.invokeMethod("init", context);
invokeService(context);
}
DynamicClassLoader
Context class
HobbyService class
User class
Context object
HobbyService object
User object
Reloadable
“region”
Live thread
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
DEMO
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
Java agents
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String args, Instrumentation inst)
throws Exception {
inst.addTransformer(new ClassFileTransformer {
// here be dragons
});
}
}
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String args, Instrumentation inst)
throws Exception {
inst.addTransformer(new ClassFileTransformer {
// here be dragons
});
}
}
META-INF/MANIFEST.MF
Premain-Class: Agent
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String args, Instrumentation inst)
throws Exception {
inst.addTransformer(new ClassFileTransformer {
// here be dragons
});
}
}
$> java –javaagent:agent.jar application.Main
META-INF/MANIFEST.MF
Premain-Class: Agent
ClassFileTransformer
ClassA
ClassA
ClassA0
+field1
+field2
+field3
+method1
+method2
+method3
+method1
+method2
+method3
+field1
+field2
+field3
+proxy_methods
A thousand years of productivity: the JRebel story
E. Kabanov, V. Vene, 2012
ClassFileTransformer
ClassA
ClassA
ClassA0
+field1
+field2
+field3
+method1
+method2
+method3
+method1
+method2
+method3
+field1
+field2
+field3
+proxy_methods
A thousand years of productivity: the JRebel story
E. Kabanov, V. Vene, 2012
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
What did we learn today?
What did we learn today?
HotSwap - a feature of your JVM, not IDE!
What did we learn today?
HotSwap - a feature of your JVM, not IDE!
Class loaders - easy to implement, but limited
What did we learn today?
HotSwap - a feature of your JVM, not IDE!
Class loaders - easy to implement, but limited
Java agents & instrumentation - very tricky!
anton@zeroturnaround.com
@antonarhipov
slideshare.net/arhan

More Related Content

PDF
JavaOne 2017 - TestContainers: integration testing without the hassle
Anton Arhipov
 
PDF
JavaDay Kiev 2017 - Integration testing with TestContainers
Anton Arhipov
 
PDF
GeeCON Prague 2017 - TestContainers
Anton Arhipov
 
PDF
Docker In Bank Unrated
Aleksandr Tarasov
 
PDF
Everything as a code
Aleksandr Tarasov
 
PDF
The Ring programming language version 1.8 book - Part 77 of 202
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.7 book - Part 75 of 196
Mahmoud Samir Fayed
 
PDF
Checking Bitcoin
Andrey Karpov
 
JavaOne 2017 - TestContainers: integration testing without the hassle
Anton Arhipov
 
JavaDay Kiev 2017 - Integration testing with TestContainers
Anton Arhipov
 
GeeCON Prague 2017 - TestContainers
Anton Arhipov
 
Docker In Bank Unrated
Aleksandr Tarasov
 
Everything as a code
Aleksandr Tarasov
 
The Ring programming language version 1.8 book - Part 77 of 202
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 75 of 196
Mahmoud Samir Fayed
 
Checking Bitcoin
Andrey Karpov
 

What's hot (20)

PPTX
Going native with less coupling: Dependency Injection in C++
Daniele Pallastrelli
 
PDF
Testing the Enterprise layers, with Arquillian
Virtual JBoss User Group
 
PDF
Resilence patterns kr
Jisung Ahn
 
PDF
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Applitools
 
PDF
Testing in android
jtrindade
 
PDF
Testing Java Code Effectively
Andres Almiray
 
PDF
Groovy And Grails JUG Padova
John Leach
 
PDF
20090315 Comet
Eduardo Pelegri-Llopart
 
PDF
Invoke dynamite in Java EE with invoke dynamic
Antoine Sabot-Durand
 
PDF
How to Perform Memory Leak Test Using Valgrind
RapidValue
 
PDF
Design & Performance - Steve Souders at Fastly Altitude 2015
Fastly
 
PPTX
Sapphire Gimlets
Robert Cooper
 
PDF
Dalvik Source Code Reading
kishima7
 
PDF
Tests unitaires mock_kesako_20130516
SOAT
 
PDF
10 Excellent Ways to Secure Your Spring Boot Application - Devoxx Morocco 2019
Matt Raible
 
PDF
Spocktacular testing
Russel Winder
 
PDF
The Ring programming language version 1.2 book - Part 51 of 84
Mahmoud Samir Fayed
 
PDF
The Challenges of Container Configuration
Gareth Rushgrove
 
PDF
Functional tests for dummies
cpsitgmbh
 
PPTX
EPAM IT WEEK: AEM & TDD. It's so boring...
Andrew Manuev
 
Going native with less coupling: Dependency Injection in C++
Daniele Pallastrelli
 
Testing the Enterprise layers, with Arquillian
Virtual JBoss User Group
 
Resilence patterns kr
Jisung Ahn
 
Docker and Your Path to a Better Staging Environment - webinar by Gil Tayar
Applitools
 
Testing in android
jtrindade
 
Testing Java Code Effectively
Andres Almiray
 
Groovy And Grails JUG Padova
John Leach
 
20090315 Comet
Eduardo Pelegri-Llopart
 
Invoke dynamite in Java EE with invoke dynamic
Antoine Sabot-Durand
 
How to Perform Memory Leak Test Using Valgrind
RapidValue
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Fastly
 
Sapphire Gimlets
Robert Cooper
 
Dalvik Source Code Reading
kishima7
 
Tests unitaires mock_kesako_20130516
SOAT
 
10 Excellent Ways to Secure Your Spring Boot Application - Devoxx Morocco 2019
Matt Raible
 
Spocktacular testing
Russel Winder
 
The Ring programming language version 1.2 book - Part 51 of 84
Mahmoud Samir Fayed
 
The Challenges of Container Configuration
Gareth Rushgrove
 
Functional tests for dummies
cpsitgmbh
 
EPAM IT WEEK: AEM & TDD. It's so boring...
Andrew Manuev
 
Ad

Similar to JavaOne 2017 - The hitchhiker’s guide to Java class reloading (20)

PDF
JavaZone 2017 - The Hitchhiker’s guide to Java class reloading
Anton Arhipov
 
PDF
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
PDF
JEEConf 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
PPTX
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Anton Arhipov
 
PDF
Riga Dev Day 2016 - Having fun with Javassist
Anton Arhipov
 
PPTX
Rapid java application development @ JUG.ru 25.02.2012
Anton Arhipov
 
PPT
Java Reflection
elliando dias
 
PDF
java classes in pune
cncwebjava
 
PDF
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
 
PDF
JavaOne 2015 - Having fun with Javassist
Anton Arhipov
 
PDF
the Spring 4 update
Joshua Long
 
PDF
DevoxxPL: JRebel Under The Covers
Simon Maple
 
PPTX
The definitive guide to java agents
Rafael Winterhalter
 
PDF
Java agents are watching your ByteCode
Roman Tsypuk
 
PPTX
Binary patching for fun and profit @ JUG.ru, 25.02.2012
Anton Arhipov
 
PDF
Spring 3 - An Introduction
Thorsten Kamann
 
PDF
Java Bytecode for Discriminating Developers - JavaZone 2011
Anton Arhipov
 
PDF
The Spring 4 Update - Josh Long
jaxconf
 
PPT
Reflection
Luis Goldster
 
PPT
Reflection
Harry Potter
 
JavaZone 2017 - The Hitchhiker’s guide to Java class reloading
Anton Arhipov
 
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
JEEConf 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
Why Doesn't Java Has Instant Turnaround - Con-FESS 2012
Anton Arhipov
 
Riga Dev Day 2016 - Having fun with Javassist
Anton Arhipov
 
Rapid java application development @ JUG.ru 25.02.2012
Anton Arhipov
 
Java Reflection
elliando dias
 
java classes in pune
cncwebjava
 
Marvel of Annotation Preprocessing in Java by Alexey Buzdin
Java User Group Latvia
 
JavaOne 2015 - Having fun with Javassist
Anton Arhipov
 
the Spring 4 update
Joshua Long
 
DevoxxPL: JRebel Under The Covers
Simon Maple
 
The definitive guide to java agents
Rafael Winterhalter
 
Java agents are watching your ByteCode
Roman Tsypuk
 
Binary patching for fun and profit @ JUG.ru, 25.02.2012
Anton Arhipov
 
Spring 3 - An Introduction
Thorsten Kamann
 
Java Bytecode for Discriminating Developers - JavaZone 2011
Anton Arhipov
 
The Spring 4 Update - Josh Long
jaxconf
 
Reflection
Luis Goldster
 
Reflection
Harry Potter
 
Ad

More from Anton Arhipov (20)

PDF
JavaZone 2022 - Building Kotlin DSL.pdf
Anton Arhipov
 
PDF
Idiomatic kotlin
Anton Arhipov
 
PDF
TechTrain 2019 - (Не)адекватное техническое интервью
Anton Arhipov
 
PDF
Build pipelines with TeamCity
Anton Arhipov
 
PDF
Build pipelines with TeamCity
Anton Arhipov
 
PDF
Devoxx Ukraine 2018 - Kotlin DSL in under an hour
Anton Arhipov
 
PDF
GeeCON Prague 2018 - Kotlin DSL in under an hour
Anton Arhipov
 
PDF
Build pipelines with TeamCity and Kotlin DSL
Anton Arhipov
 
PDF
Build pipelines with TeamCity
Anton Arhipov
 
PDF
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
PDF
JUG.ua 20170225 - Java bytecode instrumentation
Anton Arhipov
 
PDF
GeeCON 2017 - TestContainers. Integration testing without the hassle
Anton Arhipov
 
PDF
JEEConf 2017 - Having fun with Javassist
Anton Arhipov
 
PDF
Devclub 01/2017 - (Не)адекватное Java-интервью
Anton Arhipov
 
PDF
Joker 2016 - Bytecode 101
Anton Arhipov
 
PDF
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
 
PDF
JPoint 2016 - Bytecode
Anton Arhipov
 
PDF
Oredev 2015 - Taming Java Agents
Anton Arhipov
 
PDF
Something about Golang
Anton Arhipov
 
PDF
Voxxed Days Vilnius 2015 - Having fun with Javassist
Anton Arhipov
 
JavaZone 2022 - Building Kotlin DSL.pdf
Anton Arhipov
 
Idiomatic kotlin
Anton Arhipov
 
TechTrain 2019 - (Не)адекватное техническое интервью
Anton Arhipov
 
Build pipelines with TeamCity
Anton Arhipov
 
Build pipelines with TeamCity
Anton Arhipov
 
Devoxx Ukraine 2018 - Kotlin DSL in under an hour
Anton Arhipov
 
GeeCON Prague 2018 - Kotlin DSL in under an hour
Anton Arhipov
 
Build pipelines with TeamCity and Kotlin DSL
Anton Arhipov
 
Build pipelines with TeamCity
Anton Arhipov
 
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 
JUG.ua 20170225 - Java bytecode instrumentation
Anton Arhipov
 
GeeCON 2017 - TestContainers. Integration testing without the hassle
Anton Arhipov
 
JEEConf 2017 - Having fun with Javassist
Anton Arhipov
 
Devclub 01/2017 - (Не)адекватное Java-интервью
Anton Arhipov
 
Joker 2016 - Bytecode 101
Anton Arhipov
 
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
 
JPoint 2016 - Bytecode
Anton Arhipov
 
Oredev 2015 - Taming Java Agents
Anton Arhipov
 
Something about Golang
Anton Arhipov
 
Voxxed Days Vilnius 2015 - Having fun with Javassist
Anton Arhipov
 

Recently uploaded (20)

PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Software Development Methodologies in 2025
KodekX
 
PDF
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Software Development Methodologies in 2025
KodekX
 
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 

JavaOne 2017 - The hitchhiker’s guide to Java class reloading