Skip to content

Commit e0b81e3

Browse files
authored
Update Java基础-JVM原理.md
1 parent 923582c commit e0b81e3

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

MD/Java基础-JVM原理.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ JVM虚拟机内存模型实现规范:
4444
5. 初始化(执行类构造器、类变量赋值、静态语句块)
4545

4646
#### 类加载器
47-
启动类加载器:用C++语言实现,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库,无法被Java程序直接引用
47+
启动类加载器:用C++语言实现,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库,无法被Java程序直接引用
4848
扩展类加载器:用Java语言实现,它负责加载<JAVA_HOME>/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库,开发者可以直接使用
4949
系统类加载器:用Java语言实现,它负责加载系统类路径ClassPath指定路径下的类库,开发者可以直接使用
5050

@@ -130,6 +130,17 @@ STW总会发生,不管是新生代还是老年代,比如CMS在初始标记
130130
那么为什么一定要STW?因为在定位堆中的对象时JVM会记录下对所有对象的引用,如果在定位对象过程中,有新的对象被分配或者刚记录下的对象突然变得无法访问,就会导致一些问题,比如部分对象无法被回收,更严重的是如果GC期间分配的一个GC Root对象引用了准备被回收的对象,那么该对象就会被错误地回收。
131131

132132
## JVM调优
133+
前提:在进行GC优化之前,需要确认项目的架构和代码等已经没有优化空间
134+
135+
目的:优化JVM垃圾收集性能从而增大吞吐量或减少停顿时间,让应用在某个业务场景上发挥最大的价值。吞吐量是指应用程序线程用时占程序总用时的比例。暂停时间是应用程序线程让与GC线程执行而完全暂停的时间段
136+
137+
对于交互性web应用来说,一般都是减少停顿时间,所以有以下方法:
138+
139+
1. 如果应用存在大量的短期对象,应该选择较大的年轻代;如果存在相对较多的持久对象,老年代应该适当增大
140+
2. 让大对象进入年老代。可以使用参数-XX:PetenureSizeThreshold 设置大对象直接进入年老代的阈值。当对象的大小超过这个值时,将直接在年老代分配
141+
3. 设置对象进入年老代的年龄。如果对象每经过一次 GC 依然存活,则年龄再加 1。当对象年龄达到阈值时,就移入年老代,成为老年对象
142+
4. 使用关注系统停顿的 CMS 回收器
143+
133144
基础:https://www.ibm.com/developerworks/cn/java/j-lo-jvm-optimize-experience/index.html
134145

135146
案例:https://www.wangtianyi.top/blog/2018/07/27/jvmdiao-you-ru-men-er-shi-zhan-diao-you-parallelshou-ji-qi/

0 commit comments

Comments
 (0)