SlideShare a Scribd company logo
1 of 66
Download to read offline
Kotlin Backend Development 5 Yrs Recap.
The Good, the Bad and the Ugly
Haim Yadid VP Technology @ Next Insurance
Kotlin Backend Development 6 Yrs Recap.
The Good, the Bad and the Ugly
Haim Yadid VP Technology @ Next Insurance
NEXT
3
@lifexy
NEXT
4
NEXT
5
Prelude
So… decisions
NEXT
6
Decisions
NEXT
7
NEXT
8
NEXT
9
NEXT
#Backend Developers
1
2016 2017
8 150
2022
This is important
NEXT
#LOC
10k
2016 2017
100K 1.2M
2022
NEXT
Kotlin Version
1.0.2
2016 2017
1.1.50 1.6.10
2022
NEXT
JVM
1.8
2016 2017
1.8 17
2022
NEXT
14
● Working flawlessly in production
● Smooth Onboarding of Java
developers
● Good IDE support
● Community Adoption is growing
● Selling point for hiring
NEXT
15
Huge Success
NEXT
16
Some Short stories:
Kotlin Promises
Are mostly kept
NEXT
Main Tech Stack Components
AWS EC2
K8s
JVM
Kotlin
Dropwizard
Jetty Jersey Logback JDBI
Guice
JUNIT
Flyway
RDS
Kotlin
Script
17
Jackson
NEXT
Main Tech Stack Components
AWS EC2
K8s
18
NEXT
Main Tech Stack Components
JUNIT
19
NEXT
Main Tech Stack Components
JVM
Kotlin
20
AWS EC2
K8s
NEXT
Main Tech Stack Components
JVM
Kotlin
Kotlin
Script
21
Policy
Rating
Formula
Rating
Formulas
Other versions
AWS EC2
K8s
NEXT
Main Tech Stack Components
Dropwizard
Jetty Jersey Logback JDBI
Guice
22
Jackson
NEXT
Main Tech Stack Components
Flyway
RDS
23
NEXT
Main Tech Stack Components
AWS EC2
K8s
JVM
Kotlin
Dropwizard
Jetty Jersey Logback JDBI
Guice
JUNIT
Flyway
RDS
Kotlin
Script
24
Jackson
NEXT
25
Data classes - The Prince that was Promised
data class AddressInfo(
val telephone: String,
val street: String,
val num: Int,
val city: String,
val zipCode: String,
val state: State?
)
● Widely used >6100 data classes
● Used for DTO, DAO
● Rest API Serialization / deserialization with jackson
● hashcode/equals/(se|ge)tters saves a lot of boilerplate
● copy() helps working with immutable objects
NEXT
26
Data Classes - Jackson Serialization
fun ObjectMapper.applyNiSettings(): ObjectMapper {
NEXT
27
Data Classes - Jackson Serialization
fun ObjectMapper.applyNiSettings(): ObjectMapper {
return this
.registerModule(KotlinModule())
NEXT
28
Data Classes - Jackson Serialization
fun ObjectMapper.applyNiSettings(): ObjectMapper {
return this
.registerModule(KotlinModule())
.configure(
DeserializationFeature
.FAIL_ON_UNKNOWN_PROPERTIES, false)
NEXT
29
Data Classes - Jackson DeSerialization
fun ObjectMapper.applyNiSettings(): ObjectMapper {
return this
.registerModule(KotlinModule())
.configure(
DeserializationFeature
.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES,
true) }
NEXT
30
The Promise of Null Safety
val productVersion:String = versions[versionId]
Map<String,Sting>
NEXT
31
The Promise of Null Safety
val productVersion:String? = versions[versionId]
Map<String,Sting>
NEXT
32
The Promise of Null Safety
val productVersion:String = versions[versionId]!!
NullPointerException
NEXT
33
The Promise of Null Safety
val productVersion:String =
versions.require(versionId)
A better
NullPointerException
NEXT
34
The Promise of Null Safety
val productVersion:String = versions[versionId]!!
require(productVersion.status == Staged) {
"Version $versionId: Can't unstage status…" }
versions[versionId] = productVersion.copy(
status = ProductVersionStatus.Draft,
updatedBy = updatedBy)
NEXT
35
The Promise of Null Safety
● Null Safety Mechanisms baked in the type system
● No more NPEs ?
● ( not really) >11052 invocations of !!
● Where do they come from
○ interacting with Java based third party libraries
○ Getting values from maps
NEXT
36
<|*|>
NEXT
37
Operator Overloading
● 155 overloads (plus,minus,times,get,invoke)
● Most usages makes sense
operator fun times(factor: BigDecimal) = …
operator fun plus(toAdd: AmountWithAttribution) = …
operator fun minus(toSubtract: AmountWithAttribution) =
operator fun compareTo(other: AmountWithAttribution) =
NEXT
38
Extension Functions
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' corresponds to the list
this[index1] = this[index2]
this[index2] = tmp
}
NEXT
39
Extension Functions
private fun String.
NEXT
40
Extension Functions
private fun String.isVersionLowerThan(
thatVersion: String) =
when {
isValidSpecificBranchVersion(thatVersion) &&
this==thatVersion -> false //same branch
isValidSpecificBranchVersion(thatVersion) -> true
NEXT
41
Extension Functions
fun String.isVersionLowerThan(
thatVersion: String) =
when {
isValidSpecificBranchVersion(thatVersion) &&
this==thatVersion -> false //same branch
isValidSpecificBranchVersion(thatVersion) -> true
NEXT
42
Extension Functions - my preferance
private fun isVersionLowerThan(
thisVersion:String , thatVersion: String) =
…
NEXT
43
Extension Functions
data class WhateverDTO(val state: State,
@field:NotBlank val zipCode: String,
@field:NotBlank val city: String,
@field:NotBlank val streetAddress: String
)
NEXT
44
Extension Functions
data class WhateverDTO(val state: State,
@field:NotBlank val zipCode: String,
@field:NotBlank val city: String,
@field:NotBlank val streetAddress: String
)
fun WhateverDTO.getAsParamValue() =
"${streetAddress}$EOL${city}, ${state.dbName} $zipCode"
NEXT
45
Our concurrency model & Tx Ctx
Jetty
Worker
Thread
CTX
Worker
Thread
CTX
Worker
Thread
CTX
Worker
Thread
CTX
Thread Pool(s)
Worker
Thread
CTX
Worker
Thread
CTX
Worker
Thread
CTX
Worker
Thread
CTX
Ctx: (MDC)
TransactionID
Caller
Flow
OpenID Span
NEXT
46
Executors - fixing context
fun Executor.executeWithContext(r: Runnable) {
execute(r)
}
NEXT
47
Executors - MDC Usage
fun Executor.executeWithContext(r: Runnable) {
val mdcContextInfo = MDCContextInfo.fromMDC()
val activeSpan = GlobalTracer.get().activeSpan()
val rWithContext = Runnable {
mdcContextInfo.populateMDC()
GlobalTracer.get().activateSpan(activeSpan)
r.run()
}
execute(rWithContext)
}
NEXT
48
Coroutines : launch
fun CoroutineScope.launchWithContext(
): Job =
launch( )
also async ,runBlocking, flowOn
NEXT
49
Coroutines : launch
fun CoroutineScope.launchWithContext(
context: CoroutineContext = EmptyCoroutineContext,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> Unit
): Job =
launch(MDCContext() + context, start, block)
also asyncWithContext,runBlockingWithContext, flowOnWithContext
NEXT
50
Type Aliases
From Kotlin documentation:
Type aliases provide alternative names for existing types. If the type name is
too long you can introduce a different shorter name and use the new one
instead.
It's useful to shorten long generic types. For instance, it's often tempting to
shrink collection types:
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K,
MutableList<File>>
NEXT
51
Type Aliases - The feature we use too much
typealias AffiliateId = Int
typealias AgencyId = Int
typealias AgencyAggregatorId = Int
typealias AgentId = String
typealias BundleId = Int
typealias BusinessId = String
.
.
.
// additional 50 type aliases
Controversial in the community as
well
○ https://medium.com/@amlcurran/a
voiding-primitive-obsession-in-swift
-5325b65d521e
○ https://medium.com/@jerzy.chalup
ski/kotlin-the-missing-parts-67645d
9a02f4
NEXT
52
typealias ZipCode = String
typealias Address = String
fun main() {
var zip: ZipCode = "56934"
val addr: Address = "bb"
zip = addr
}
Type Aliases - Are not Type Safe
NEXT
53
abstract class SomeClassResponse(
open val success: Success,
open val responseMessage: ResponseMessage)
Type Aliases - What is behind the magic
typealias Success = Boolean
typealias ResponseMessage = String
NEXT
54
abstract class SomeClassResponse(
open val success: Boolean,
open val responseMessage: String)
Type Aliases - What is behind the magic
NEXT
55
@Deprecated("Stop using me")
data class DeprecateMe(val a: String, val b: String)
typealias IamNotDeprecatedAndILikeIt = DeprecateMe
fun main() {
val a = DeprecateMe("a", "b")
val c = IamNotDeprecatedAndILikeIt("a", "b")
Type Aliases - Hides Deprecation
NEXT
56
private typealias ValidationResults =
List<Pair<OTPValidationResponse, DigitsPasswordData>>
Put Type Aliases to Good Use
typealias Row = Array<String>
typealias StringMatrix = List<Array<String>>
NEXT
57
@JvmInline
value class NiJexlExpression(
val expressionString: String)
Inline Classes to the rescue
● Prefer inline classes instead of typealias
● Type safety at compilation
● Migration is not so easy.
● There is a problem with inline classes and our current Jackson Version
● Type erased at runtime ….(Heap Dumps ?)
NEXT
58
A Migration Story
Java11 -> Java 17
NEXT
59
Migrations along the Years
● Migration to Kotlin 1.1.0 ( Java8 support ) was smooth
● Migration to (almost) every version of kotlin immediately
● Migration to Java 11 – only a year ago )
● Migration to Java 17 – 5 months ago
NEXT
NEXT
Build Time
Gradle
7.2
Compiler
&
Bytecode
11
Kotlin
Compiler
1.4
libraries
1.5.21
Run Time
Kotlin
Runtime
1.5.21
JVM
11 / 16
JRE
11 / 16
60
September
2021
NEXT
Proprietary
&
Confidential
NEXT
Kotlin - Java Bytecode Compatibility
● Kotlin 1.4.10 supports Java 14 Bytecode (class version)
● Kotlin 1.4.21 supports Java 15 Bytecode (class version)
● Kotlin 1.5.21 supports Java 16 Bytecode (class version)
● By the time java 17 was released 1.7 bytecode was not
supported
61
Kotlin
NEXT
NEXT
Gradle - Java bytecode Compatibility
Gradle
https://docs.gradle.org/current/userguide/compatibility.html 62
NEXT
Kotlin API deprecation
@Deprecated("Use minOrNull instead."
,
ReplaceWith("this.minOrNull()"))
@DeprecatedSinceKotlin
(warningSince = "1.4", errorSince =
"1.5", hiddenSince = "1.6")
@SinceKotlin("1.1")
public fun Iterable<Double>.min(): Double? {
return minOrNull()
}
min()
max()
minBy()
maxBy()
minOrNull()
maxOrNull()
minByOrNull()
maxByOrNull()
63
NEXT
Detaching gradle compiler version
64
val kotlinVersion = libs.findVersion("kotlin").get()
// 1.6.10 opposed to 1.5.31 from gradle
implementation("org.jetbrains.kotlin:kotlin-gradle-plug
in:$kotlinVersion")
implementation("org.jetbrains.kotlin:kotlin-script-runt
ime:$kotlinVersion")
NEXT
NEXT
Build Time
Gradle
7.4
K1.5.31
Compiler
&
Bytecode
17
Kotlin
Compiler
1.6
libraries
1.6.10
Runtime
Kotlin
Runtime
1.6.10
JVM
17
JRE
17
65
THANKS.

More Related Content

Similar to Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly

Productive Debugging
Productive DebuggingProductive Debugging
Productive DebuggingiThink
 
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on ScalaAndrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on ScalaScala Italy
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010Chris Ramsdale
 
Entender React Native
Entender React NativeEntender React Native
Entender React NativeSantex Group
 
Tips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native codeTips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native codeKenneth Geisshirt
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topicsRajesh Verma
 
Profiling distributed Java applications
Profiling distributed Java applicationsProfiling distributed Java applications
Profiling distributed Java applicationsConstantine Slisenka
 
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Ivan Čukić
 
ez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devicesez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devicesStefan Gränitz
 
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Stefan Marr
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Chris Ramsdale
 
Kotlin / Android Update
Kotlin / Android UpdateKotlin / Android Update
Kotlin / Android UpdateGarth Gilmour
 
JavaFX - Next Generation Java UI
JavaFX - Next Generation Java UIJavaFX - Next Generation Java UI
JavaFX - Next Generation Java UIYoav Aharoni
 
Crossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic LanguagesCrossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic LanguagesBastian Kruck
 
UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)Yoshifumi Kawai
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemGuardSquare
 
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017Andrey Karpov
 
Jvm profiling under the hood
Jvm profiling under the hoodJvm profiling under the hood
Jvm profiling under the hoodRichardWarburton
 

Similar to Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly (20)

Productive Debugging
Productive DebuggingProductive Debugging
Productive Debugging
 
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on ScalaAndrea Lattuada, Gabriele Petronella - Building startups on Scala
Andrea Lattuada, Gabriele Petronella - Building startups on Scala
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JIT
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
 
Entender React Native
Entender React NativeEntender React Native
Entender React Native
 
Tips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native codeTips and tricks for building high performance android apps using native code
Tips and tricks for building high performance android apps using native code
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topics
 
Profiling distributed Java applications
Profiling distributed Java applicationsProfiling distributed Java applications
Profiling distributed Java applications
 
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
 
ez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devicesez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devices
 
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
Metaprogramming, Metaobject Protocols, Gradual Type Checks: Optimizing the "U...
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
Kotlin / Android Update
Kotlin / Android UpdateKotlin / Android Update
Kotlin / Android Update
 
JavaFX - Next Generation Java UI
JavaFX - Next Generation Java UIJavaFX - Next Generation Java UI
JavaFX - Next Generation Java UI
 
Crossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic LanguagesCrossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic Languages
 
00_Introduction to Java.ppt
00_Introduction to Java.ppt00_Introduction to Java.ppt
00_Introduction to Java.ppt
 
UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)UniRx - Reactive Extensions for Unity(EN)
UniRx - Reactive Extensions for Unity(EN)
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
 
Jvm profiling under the hood
Jvm profiling under the hoodJvm profiling under the hood
Jvm profiling under the hood
 

More from Haim Yadid

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?Haim Yadid
 
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a FoeHaim Yadid
 
“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 CollectionHaim Yadid
 
Java Memory Structure
Java Memory Structure Java Memory Structure
Java Memory Structure Haim Yadid
 
Basic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxBasic JVM Troubleshooting With Jmx
Basic JVM Troubleshooting With JmxHaim Yadid
 
The Freelancer Journey
The Freelancer JourneyThe Freelancer Journey
The Freelancer JourneyHaim Yadid
 
Building microservices with Kotlin
Building microservices with KotlinBuilding microservices with Kotlin
Building microservices with KotlinHaim Yadid
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyHaim Yadid
 
Let's talk about Garbage Collection
Let's talk about Garbage CollectionLet's talk about Garbage Collection
Let's talk about Garbage CollectionHaim Yadid
 
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...Haim Yadid
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingHaim Yadid
 
Java 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesJava 8 Launch - MetaSpaces
Java 8 Launch - MetaSpacesHaim Yadid
 
Java 8 - Stamped Lock
Java 8 - Stamped LockJava 8 - Stamped Lock
Java 8 - Stamped LockHaim Yadid
 
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 CompletableFuturesHaim Yadid
 
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 2014Haim Yadid
 
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 ControlHaim Yadid
 
Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Java Enterprise Edition Concurrency Misconceptions
Java Enterprise Edition Concurrency Misconceptions Haim Yadid
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala PerformanceHaim Yadid
 
Israeli JUG - IL JUG presentation
Israeli JUG -  IL JUG presentation Israeli JUG -  IL JUG presentation
Israeli JUG - IL JUG presentation Haim Yadid
 

More from 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?
 
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
 
“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
 

Recently uploaded

WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
%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 tembisamasabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...chiefasafspells
 
%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 Bahrainmasabamasaba
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 

Recently uploaded (20)

WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%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
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%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
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 

Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly