Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
LinuxSuRen
jenkins
提交
cd33cdd8
J
jenkins
项目概览
LinuxSuRen
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cd33cdd8
编写于
8月 18, 2014
作者:
J
Jesse Glick
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIXED JENKINS-24309] Caching class loads and misses from UberClassLoader.
上级
6d298b0a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
35 addition
and
2 deletion
+35
-2
changelog.html
changelog.html
+3
-0
core/src/main/java/hudson/PluginManager.java
core/src/main/java/hudson/PluginManager.java
+32
-2
未找到文件。
changelog.html
浏览文件 @
cd33cdd8
...
...
@@ -64,6 +64,9 @@ Upcoming changes</a>
<li
class=
rfe
>
Allow BuildStep to work with non-AbstractProject
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-23713"
>
issue 23713
</a>
)
<li
class=
bug
>
Improved class loading performance when using Groovy.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-24309"
>
issue 24309
</a>
)
<li
class=
rfe
>
Make the lifetime of queue items cache configurable.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-19691"
>
issue 19691
</a>
)
...
...
core/src/main/java/hudson/PluginManager.java
浏览文件 @
cd33cdd8
...
...
@@ -435,6 +435,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
plugins
.
add
(
p
);
activePlugins
.
add
(
p
);
synchronized
(((
UberClassLoader
)
uberClassLoader
).
loaded
)
{
((
UberClassLoader
)
uberClassLoader
).
loaded
.
clear
();
}
try
{
p
.
resolvePluginDependencies
();
...
...
@@ -1015,6 +1018,8 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
* Keyed by the generated class name.
*/
private
ConcurrentMap
<
String
,
WeakReference
<
Class
>>
generatedClasses
=
new
ConcurrentHashMap
<
String
,
WeakReference
<
Class
>>();
/** Cache of loaded, or known to be unloadable, classes. */
private
final
Map
<
String
,
Class
<?>>
loaded
=
new
HashMap
<
String
,
Class
<?>>();
public
UberClassLoader
()
{
super
(
PluginManager
.
class
.
getClassLoader
());
...
...
@@ -1033,13 +1038,35 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
else
generatedClasses
.
remove
(
name
,
wc
);
}
if
(
name
.
startsWith
(
"SimpleTemplateScript"
))
{
// cf. groovy.text.SimpleTemplateEngine
throw
new
ClassNotFoundException
(
"ignoring "
+
name
);
}
synchronized
(
loaded
)
{
if
(
loaded
.
containsKey
(
name
))
{
Class
<?>
c
=
loaded
.
get
(
name
);
if
(
c
!=
null
)
{
return
c
;
}
else
{
throw
new
ClassNotFoundException
(
"cached miss for "
+
name
);
}
}
}
if
(
FAST_LOOKUP
)
{
for
(
PluginWrapper
p
:
activePlugins
)
{
try
{
Class
<?>
c
=
ClassLoaderReflectionToolkit
.
_findLoadedClass
(
p
.
classLoader
,
name
);
if
(
c
!=
null
)
return
c
;
if
(
c
!=
null
)
{
synchronized
(
loaded
)
{
loaded
.
put
(
name
,
c
);
}
return
c
;
}
// calling findClass twice appears to cause LinkageError: duplicate class def
return
ClassLoaderReflectionToolkit
.
_findClass
(
p
.
classLoader
,
name
);
c
=
ClassLoaderReflectionToolkit
.
_findClass
(
p
.
classLoader
,
name
);
synchronized
(
loaded
)
{
loaded
.
put
(
name
,
c
);
}
return
c
;
}
catch
(
ClassNotFoundException
e
)
{
//not found. try next
}
...
...
@@ -1053,6 +1080,9 @@ public abstract class PluginManager extends AbstractModelObject implements OnMas
}
}
}
synchronized
(
loaded
)
{
loaded
.
put
(
name
,
null
);
}
// not found in any of the classloader. delegate.
throw
new
ClassNotFoundException
(
name
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录