Skip to content

Commit 5390916

Browse files
committedMar 21, 2016
修改一些语句
修改一些不合适的语句
1 parent 712391e commit 5390916

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed
 

‎contents/creating-a-memory-leak-with-java.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@
2121
上述方式可以达到内存泄漏的目的,因为 ThreadLocal 存储了一个指向类B对象的引用,
2222
而该对象又保存了一个指向其类的引用,这个类又保存了一个指向其ClassLoader的引用,
2323
而ClassLoader又保存了一个通过它加载的所有类的引用。
24-
这种方法在许多的JVM的实现中表现很糟糕,因为Classes和ClassLoader被直接存储在老年代(permgen)并且永远都不会被GC处理。
24+
这种方法在许多的JVM的实现中表现更糟糕,因为Classes和ClassLoader被直接存储在老年代(permgen)并且永远都不会被GC处理。
2525

2626
******************************下方为个人理解************************************
2727

28-
通过一个简单的图来描述上述关系:
28+
通过一个简单的图来描述上述关系:<br>
2929
ThreadLocal.obj ---> B.obj ---> B.class <--> ClassLoader.obj<br>
3030
注:上图的\*.obj表示\*类的一个实例对象,B.class表示类B的Class对象
3131

3232
******************************上方为个人理解************************************
3333

34-
这个模式的一个变形:为什么应用容器(例如Tomcat)可以像筛子一样泄漏内存,如果你频繁的重新部署那些可能使用ThreadLocals的应用
35-
因为应用容器使用上述所说的线程,每次重新部署应用是,应用容器都会使用一个新的ClassLoader。
34+
这个模式的一个变形:如果频繁的重新部署那些可能使用ThreadLocals的应用,应用容器(例如Tomcat)就会像筛子一样泄漏内存
35+
因为应用容器使用上述所说的线程,每次重新部署应用时,应用容器都会使用一个新的ClassLoader。
3636

3737
具体代码可以参考:https://gist.github.com/dpryden/b2bb29ee2d146901b4ae
3838

0 commit comments

Comments
 (0)