JDK/JVM

刘超 4天前 ⋅ 5131 阅读   编辑

目录

一、JDK  

  1、工具

    1.1、命令行工具
    a、jmap

    1.2、图形工具
    a、jconsole
    b、jvisualvm

  gc_log_visualizer

  gcviewer

二、JVM

  1、JVM参数http://m.xxfox.perfma.com/jvm/query)
    比较好的dump在线分析:https://fastthread.io/index.jsp

  2、虚拟机
   1、Java虚拟机与程序的生命周期
     什么时候结束生命周期

  3、类
    3.1、类加载 (类的加载的最终产品是位于内存的Class对象(不涉及对象生成),Class对象封装了类在方法区的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。Class对象是整个反射的入口,它就好像是一面镜子一样,能洞悉出来类中的方法、成员变量等)
      a、类加载器
      有哪些类加载器、类加载器之间的关系、类加载器什么时候加载类
      b、类加载过程
      加载、连接(验证、准备、解析)、初始化、类实例化
      c、Java程序对类的使用方式可分为两种

      主动使用(创建类的实例、访问某个类或接口的静态变量或者对该静态变量赋值、调用类的静态方法、反射、初始化一个类的子类、Java虚拟机启动时被标明为启动类的类、JDK1.7开始提供的动态语言支持(例如可以调用javascript))、被动使用
    3.2、类卸载
      什么类会被卸载、类何时被卸载、怎么查看是否被卸载

  4、JVM内存空间
    4.1、JVM中有哪些内存区域,分别都是用来干嘛的?

    4.2、JVM内存空间划分与作用详解

  5、垃圾收集器
    5.1、JVM的垃圾回收机制是用来干嘛的?为什么要垃圾回收?
    5.2、垃圾回收器G1(Garbage First Collector)
    5.3、CMS垃圾收集器(Concurrent Mark Sweep)
      a、CMS介绍
      b、CMS实现(基于标记-清除算法实现),分为:初始标记、并发标记、重新标记(为啥需要重新标记)、并发清除
      c、CMS优点
      d、CMS缺点
      e、空间分配担保(老年代)
      f、CMS收集器步骤

  6、JVM调优案例

  1)、高性能硬件上的程序部署策略

  2)、集群间同步导致的内存溢出

  7、总结

  7.1、metaspace 不设置,在20.8M进行第一个FGC(如果配置了cms,那就是cms gc)

  7.2、JVM不允许定义java.开头的包,否则会抛出SecurityException运行时异常

  7.3、JVM在启动的时候会自动设置Heap Size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项进行设置

  7.4、gc线程不是Java线程,因为gc的时候java线程会暂停,就是操作系统级别的线程,java线程是 ptheadc++pthread)的包装了之后的东西,包裹了一层vm设计的东西

  7.5、执行顺序

  代码块(任何位置)-》 构造方法

  说明:先执行代码块,然后再执行构造方法

  6.7、除了记录停顿时间的-XX:+PrintGCApplicationStoppedTime外,也有记录上次STW以来的Application Thread工作时间

  a、-XX:+PrintGCApplicationStoppedTime:Enable printing of how much time elapsed since the the last pause(for example,a GC pause )By default,the option is disabled

  b、-XX:+PrintGCApplicationConcurrentTime:Enable printing of how much time the pause(for example,a GC pause) lasted.By default,this option is disabled

  但这个两个参数只记录时间,不记录原因(有另外的参数)别看这两个参数的命名中有GC两字,其实从命令help中也能看到,不止GC pause,实际上是所有Safepoint都包含。 又一个傻吊命名的例子

  所以在JDK9的时候,统一所有GC参数的时候,顺便把这2个参数统一为了-Xlog:safepoint了。

 

附录一、

  1、mac jdk 安装路径

  2、查看安装的jdk是Sun/Oraclejdk还是Openjdk


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: