Enviar búsqueda
Cargar
ClassLoader Leak Patterns
•
30 recomendaciones
•
8,916 vistas
N
nekop
Seguir
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 30
Descargar ahora
Descargar para leer sin conexión
Recomendados
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
クラスローダーについて
クラスローダーについて
Suguru ARAKAWA
Recomendados
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
クラスローダーについて
クラスローダーについて
Suguru ARAKAWA
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Takahiro YAMADA
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Metaspace
Metaspace
Yasumasa Suenaga
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
Koji Shinkubo
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Best practice laravel
Best practice laravel
Risa Ohnishi
Más contenido relacionado
La actualidad más candente
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Takahiro YAMADA
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Metaspace
Metaspace
Yasumasa Suenaga
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
Koji Shinkubo
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
La actualidad más candente
(20)
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Metaspace
Metaspace
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
Similar a ClassLoader Leak Patterns
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
Best practice laravel
Best practice laravel
Risa Ohnishi
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
Trait in scala
Trait in scala
Yuta Shimakawa
Google App Engine for Java
Google App Engine for Java
Takuya Tsuchida
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
kunihikokaneko1
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
kimukou_26 Kimukou
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
pi-12. 時間, スリープ, 疑似乱数, タイマー
pi-12. 時間, スリープ, 疑似乱数, タイマー
kunihikokaneko1
20110820 metaprogramming
20110820 metaprogramming
Masanori Kado
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Norito Agetsuma
Scala EE 7 Essentials
Scala EE 7 Essentials
tnoda
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
David Buck
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
JavaLearning_1.pptx
JavaLearning_1.pptx
RyuuGaku
Similar a ClassLoader Leak Patterns
(20)
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
Best practice laravel
Best practice laravel
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
Trait in scala
Trait in scala
Google App Engine for Java
Google App Engine for Java
MoteMote Compiler Plugin
MoteMote Compiler Plugin
明日から使える Java SE 7
明日から使える Java SE 7
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
pi-12. 時間, スリープ, 疑似乱数, タイマー
pi-12. 時間, スリープ, 疑似乱数, タイマー
20110820 metaprogramming
20110820 metaprogramming
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Scala EE 7 Essentials
Scala EE 7 Essentials
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
JavaLearning_1.pptx
JavaLearning_1.pptx
Más de nekop
Java Drag Race Tuning
Java Drag Race Tuning
nekop
JBoss AS 7 / EAP 6 modules and class loading
JBoss AS 7 / EAP 6 modules and class loading
nekop
Module classloading
Module classloading
nekop
JBoss AS7 rev3
JBoss AS7 rev3
nekop
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2
nekop
JBoss AS7 rev2
JBoss AS7 rev2
nekop
JBoss AS7
JBoss AS7
nekop
CDI, Seam 3 and Forge
CDI, Seam 3 and Forge
nekop
Infinispan - Open Source Data Grid
Infinispan - Open Source Data Grid
nekop
Iteratorパターン
Iteratorパターン
nekop
Proxy
Proxy
nekop
mod_cluster
mod_cluster
nekop
Más de nekop
(12)
Java Drag Race Tuning
Java Drag Race Tuning
JBoss AS 7 / EAP 6 modules and class loading
JBoss AS 7 / EAP 6 modules and class loading
Module classloading
Module classloading
JBoss AS7 rev3
JBoss AS7 rev3
Infinispan - Open Source Data Grid rev2
Infinispan - Open Source Data Grid rev2
JBoss AS7 rev2
JBoss AS7 rev2
JBoss AS7
JBoss AS7
CDI, Seam 3 and Forge
CDI, Seam 3 and Forge
Infinispan - Open Source Data Grid
Infinispan - Open Source Data Grid
Iteratorパターン
Iteratorパターン
Proxy
Proxy
mod_cluster
mod_cluster
Último
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Último
(12)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
ClassLoader Leak Patterns
1.
クラスローダ リークパターン なにそれおいしいの?
Takayoshi Kimura Senior Software Maintenance Engineer, JBoss Global Support Service Red Hat
2.
自己紹介
3.
nekop ● JBoss の中の人 ●
Emacs で Java 書く人 ● オープンソース大好きっ子 ● ネコよりイヌが好き
4.
宣伝
5.
JBoss では エンジニアを
募集して おります!
6.
JBoss で働きませんか ● Java
とオープンソースが好き な人におすすめ ● おやつ無料 ● 飲み物自動販売機無料
7.
JBoss で働きませんか ● 主に「オープンソースで遊ぶ」
のと「技術的な人助け」 ● Linux カーネルから Java アー キテクトまで豊富な同僚
8.
本題
9.
クラスローダ リーク
10.
何が起こる? ● java.lang.OutOfMemoryError:
perm gen space ● クラス定義情報が置いてあるメ モリ領域 (Perm) を消費しっぱ なし
11.
いつリークする? ● クラスローダが破棄、再作成さ
れるタイミング ● 具体例として、アプリケーショ ンサーバに再デプロイを行った とき
12.
なぜリークする? ● そのクラスローダへの参照が
残ってるから ● そのクラスローダからロードさ れたクラスへの参照が残ってる から ● クラスローダをまたがる参照
13.
パターン
その1 ThreadLocal
14.
ThreadLocal ● 同一スレッド上で値の受け渡し
ができて便利 ● フレームワークなどでよく使わ れている
15.
ThreadLocal の参照構造 ● ThreadLocal
に設定した値は Thread から強参照される ● 詳しく知りたい人はソース嫁
16.
ThreadLocal 開放条件 ● ThreadLocal
へ到達可能な強参 照が一つもない場合開放される ● Thread が開放されたら一緒に 開放される
17.
ありがちなリークコード public class ThreadLocalKeyValue
{ private ThreadLocal tl = new ThreadLocal(); public void add(Object key, Object value) { tl.set(new KeyValuePair(key, value)); } public Object getKey() { return ((KeyValuePair)tl.get()).key; } public Object getValue() { return ((KeyValuePair)tl.get()).value; } private class KeyValuePair { public Object key, value; public KeyValuePair(Object key, Object value) { this.key = key; this.value = value; } } }
18.
テスト ThreadLocalKeyValue target =
new ThreadLocalKeyValue(); ReferenceQueue queue = new ReferenceQueue(); PhantomReference ref = new PhantomReference(target, queue); target.add("foo", "bar"); target = null; System.gc(); System.out.println("Released?: " + ref.isEnqueued());
19.
テスト結果 false って何よ
( ゚Д゚)
20.
修正 public class ThreadLocalKeyValue
{ private ThreadLocal tl = new ThreadLocal(); public void add(Object key, Object value) { tl.set(new KeyValuePair(key, value)); } public Object getKey() { return ((KeyValuePair)tl.get()).key; } public Object getValue() { return ((KeyValuePair)tl.get()).value; } private static class KeyValuePair { public Object key, value; public KeyValuePair(Object key, Object value) { this.key = key; this.value = value; } } }
21.
テスト結果 true
22.
ハァ ? ( ゚Д゚)
23.
ThreadLocal まとめ ●
設定した値は Thread から強参照される ● ThreadLocal に渡す「値」の参照関係に注意 ● スレッドのコントロールが自分に無い環境では Thread の開放に伴う ThreadLocal の開放は 期待できない – アプリケーションサーバ上では当然スレッドは プールされている – リークしないのは「入れたら確実に消す ( 一時的な 利用 ) 」か「入れっぱなしでも値の参照関係が安 全だと保証できる」場合のみ
24.
ThreadLocal と Tomcat ●
Tomcat はアンデプロイ時に ThreadLocal を リフレクションで開放してくれる機能がある – アプリケーションやフレームワーク、ライブラリ のクラスローダリークバグを隠してしまういやん な機能 – 心当たりのあるフレームワーク / ライブラリ開発者 さんは直してください! ● でもその機能にスレッドセーフじゃないバグが あるので 6.0.27 以降は無効になっている – https://issues.apache.org/bugzilla/show_bug. cgi?id=48895
25.
パターン その2 java.util.
logging
26.
java.util.logging の Level ●
Level 継承するとクラスローダ がリークする ● ここ嫁 ● http://blogs.sun.com/fkieviet/entry/cl assloader_leaks_the_dreaded_java
27.
パターン その
3 既成 ライブラリ
28.
既成ライブラリ ●
元々複数のクラスローダ上で動作することを想 定していないライブラリ – ContextClassLoader や static フィールドの誤用 – ThreadLocal や WeakHashMap などの参照構造 の理解不足
29.
既成ライブラリ ●
Commons-logging – だいぶ前に一通り直ったけど、利用する側のコー ドによってはリークする ● Commons-beanutils – 1.8.0 時点で一応メジャーな問題は全部解決してい る – https://issues.apache.org/jira/browse/BEANU TILS-291 ● 他にもいっぱいあるよ!
Descargar ahora