JVM优化

开场白:java幕后的英雄-jvm(Java Virtual Machine)

1,why 优化

内存溢出:对象占用内存过多。最终会导致内存泄露。

内存泄露:GC失效。

 

什么对象会被GC?

算法:可达性算法。引用计数法:jvm弃用,不能解决循环依赖的问题。

在Java语言里,可作为GC Roots对象的包括如下几种: 
a.虚拟机栈(栈桢中的本地变量表)中的引用的对象 
b.方法区中的类静态属性引用的对象 
c.方法区中的常量引用的对象 
d.本地方法栈中JNI的引用的对象

GC-ROOT是否可达,判断对象是否会被GC。不可达会被GC,可达不会被GC。

 

 2,java内存模型 JMM:

https://www.cnblogs.com/lewis0077/p/5143268.html

https://blog.csdn.net/lirenzuo/article/details/71710543

JMM

JVM优化_第1张图片

  JVM运行时数据区

JVM优化_第2张图片

 

 

3,GC回收算法及回收器

JVM heap分区块:heap分代:新生代,老年代,永久代(>1.8 meta space)

  • YongGeneration/NewGeneration:新生代,在Eden/S0/S1的存活的对象。

  • OldGeneration:老年代,在Tenured区存活的对象。

  • PermanentGeneration:永久代。

Space 区:8:1:1

  • Eden:伊甸园区,是新生代的一个区。- Survivor:幸存区,属于新生代,为了复制算法的需要。一般分成大小相等的两个区(S0/S1或者From/To)。

  • Tenured:存放老年代的区域。

  • Permanent:永久代。

JVM优化_第3张图片

 

 垃圾回收算法:3种

  • 标记清除:效率低,空间不连续。后面两种算法都是对标记清除算法的优化。适合老年代。
  • 标记整理:效率低,空间连续。适合老年代。
  • 复制算法:效率高,单空间浪费大。适合新生代。

 

 垃圾回收器(分代回收):7种。

新生代(复制算法):Serial、ParNew、ParallelScavenge

老年代(标记清除、标记整理):CMS(Concurrent Mark Sweep)、Serial Old(MSC)、Parallel Old

 G1(Garbge first):

    名词解释: 串行与并行,指垃圾回收线程之间的关系。并发,指工作线程与垃圾回收线程的关系。    

JVM优化_第4张图片

https://www.cnblogs.com/chengxuyuanzhilu/p/7088316.html

 

4,jvm优化经验

如何将新对象预留在年轻代

何让大对象进入年老代

如何设置对象进入年老代的年龄

稳定的 Java 堆 VS 动荡的 Java 堆

增大吞吐量提升系统性能

尝试使用大的内存分页

使用非占有的垃圾回收器

http://www.importnew.com/16327.html

 

5,jvm优化流程及工具介绍

https://www.cnblogs.com/lishijia/p/5897236.html

java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat

https://blog.csdn.net/jiyiqinlovexx/article/details/51171452

步骤:

1,打印日志

 

2,日志分析,定位问题

 

3,设置调优参数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java基础)