JVM初识:

java只是启动JVM的命令。JVM真实位置: C:\Program Files\Java\jdk1.8.0_121\jre\bin\server\jvm.dll

Java 学习笔记之 JVM初识-LMLPHP

1. 第一行JDK版本

2. 第二行JRE版本

3. 第三行JVM版本

Java 学习笔记之 JVM初识-LMLPHP

1. 混合模式:速度最快(默认)

2. 解释模式:解释运行

3. 编译模式:编译优化运行

Java 学习笔记之 JVM初识-LMLPHP

  • 在HostSpot中,方法区在Perm永久代。
  • Heap包括Young新生代和Tenured年老代,不包括Perm。
  • 一个java线程启动一个stack,一个stack默认1024K。所以开很多线程可能会导致StackOverFlow。
  • 本地方法栈通常用来调用C语言。
  • 程序计数器保存的是线程执行到哪段代码的位置。
  • 方法区和Heap是线程共享区域,其他块属于线程独享区域。

会OOM的区域:

  • Perm会OOM
  • Heap会OOM
  • Stack会OOM(概率很低)和StackOverFlow
  • Direct Memory会OOM

Java 学习笔记之 JVM初识-LMLPHP

  • 新生代使用的垃圾回收算法是复制算法,垃圾回收GC叫Minor GC。Eden区满了,就进行Minor GC,把存活的对象复制到Survivor1,Survivor1满之后,把垃圾又复制到Survivor2,如果Survivor都满了,就直接进入Tenured年老代。新生代和年老代垃圾回收的速度比大概是1:10. 年老代的垃圾回收叫Major GC。Full GC指的是JVM内的所有对象进行逐一排查,把垃圾删除。10g堆内存,可能需要5分钟Full GC。
  • HeapDumpOnOurOfMemoryError可以dump出OOM日志,说明问题出在Heap和Perm。没有日志,说明可能在Direct Memory或Stack,不过Stack一般不OOM。
  • Direct Memory直接使用操作系统物理内存。
05-11 20:26