Skip to content

Commit

Permalink
Merge branch 'master' of github.com:rbmonster/learning-note
Browse files Browse the repository at this point in the history
  • Loading branch information
rbmonster committed May 20, 2022
2 parents 195f47d + 358f26c commit 617d667
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/main/java/com/toc/JVM.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,17 @@ java多线程切换时,每个线程独立的程序计数器,各条线程之


> 在 Java 7 之前,JVM 将 Java String Pool 放置在 永久代空间(java7方法区的实现)中,该空间具有固定大小——它不能在运行时扩展并且不符合垃圾收集条件。\
在永久代(而不是堆)中使用字符串的风险是,如果我们创建太多字符串,我们可能会从 JVM 中得到 OutOfMemory 错误。\
在永久代(而不是堆)中使用字符串的风险是,如果我们









建太多字符串,我们可能会从 JVM 中得到 OutOfMemory 错误。\
从 Java 7 开始,Java String Pool 存储在 **Heap 空间**中,由 JVM 进行垃圾回收。 这种方法的优点是降低了 OutOfMemory 错误的风险,因为未引用的字符串将从池中删除,从而释放内存。

### <a name="9">HotSpot 的后台线程</a><a style="float:right;text-decoration:none;" href="#index">[Top]</a>
Expand Down Expand Up @@ -385,7 +395,7 @@ staticObj随着Test的信息类型存放在方法区,instantObj随着Test对

### <a name="18">回收方法区</a><a style="float:right;text-decoration:none;" href="#index">[Top]</a>
方法区的回收主要是两部分内容:废弃的常量和不再使用的类型。
- 废弃的常量的例子:字符创常量进入到常量池中,但当前系统有没有任何一个字符串对象的值为“java”,则该常量就会被系统清理出常量池。
- 废弃的常量的例子:字符串常量进入到常量池中,但当前系统有没有任何一个字符串对象的值为“java”,则该常量就会被系统清理出常量池。
- 不在使用的类,需同时满足一下三个条件:
- 该类的所有实例已经被回收,也就是java对重不存在该类及其任何派生的子类实例。
- 加载该类的类加载器已经被回收。正常很难达成。如OSGi、JSP的重加载会产生。
Expand Down

0 comments on commit 617d667

Please sign in to comment.