zoukankan      html  css  js  c++  java
  • JVM之VisualVM工具的使用以及GC

    简介:

      VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,

      反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

      VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能

        内存信息

        线程信息

        Dump堆(本地进程)

        Dump线程(本地进程)

        打开堆Dump。堆Dump可以用jmap来生成。

        打开线程Dump

        生成应用快照(包含内存信息、线程信息等等)

        性能分析。CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多

    如何获取VisualVM:

      VisualVM 的一个最大好处就是,它已经在你的 JDK bin 目录里了,只要你使用的是 JDK1.6 Update7 之后的版本。点击一下 jvisualvm.exe 图标它就可以运行了

     

     查看本地进程

     查看CPU、内存、类、线程运行信息

     查看线程详情

     也可以点击右上角Dump按钮,将线程的信息导出,其实就是执行的jstack命令

    抽样器可以对CPU、内存在一段时间内进行抽样,以供分析

     cpu抽样

     VM工具远程连接

      VisualJVM不仅是可以监控本地jvm进程,还可以监控远程的jvm进程,需要借助于JMX技术实现。

    什么是JMX?

      JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。

      JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

    监控远程的Tomcat

      想要监控远程的tomcat,就需要在远程的tomcat进行对JMX配置,方法如下:

      注意:要将该的配置放在catalina.sh的上面,否则将无法创建JMX连接

      JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

      Tomcat解压目录的bin目录中的catalina.sh文件,加入如上配置随便找个位置就行

     

     

     添加成功后监测远程JVM

    GC专题

    1.什么是垃圾回收

      程序运行会产生各种各种的数据,那么这些数据存在于内存当中,这些数据不可能是永久存在的,无效的资源对象需要进行垃圾回收,释放内存

    2.不同的编程语言都有GC垃圾回收

      java语言自带GC垃圾回收器,并且有JVM自动进行垃圾回收,程序员主要关注代码实现,不关注垃圾回收 System.gc();C/C++语言当中,程序员new一个对象,相当于申请了一块内存,如果需要释放资源得手动通过delete关键字进行内存的释放

    3.垃圾回收算法

      如果使用的算法不合理,反倒会造成资源的浪费,垃圾回收常见算法

    3.1 引用计数法

      原理:假如有一个对象A,任何对象对A对象的引用,计数器就+1,当引用失效或者失败时计数器-1,如果对象A的计数器为0,GC就会当成对象没有引用了,就会将该对象回收

    3.2 标记清除法

      标记:从根节点开始标记引用对象
      清除:未被标记的对象就是垃圾对象,可以清除

      原理:初始状态下所有对象的标记都为0,当内存不足的情况下,
      标记阶段:GC先会进行标记阶段,从根节点开始,凡是引用的对象都标记为1,其他没有引用的对象标记为0
      清除阶段:凡是对象标记为1代表该对象存在引用不清除,对象标记为0则清除,清除完毕之后所有对象重新标记为0

    缺点:

      1.效率较低,标记和清除两个动作都需要遍历所有的对象,并且在GC时,需要停止应 用程序,对于交互性要求比较高的应用而言这个体验是非常差的。
      2.碎片化较为严重,可能导致大数据没有办法存储,小数据存储浪费空间

    3.3 标记压缩算法

      同标记清除法相同,标记过程相同,在清除过程中,先将垃圾对象压缩到内存末尾,然后再清除

    缺点:

      对象需要移动,效率有一些影响

    3.4 复制算法

    内存被分为大小相同两块区域,一块为From,一块为To,程序向From区域存放数据,当from数据即将满了的情况下,进行垃圾回收:首先标记垃圾对象,然后将没有标记的对象复制到To当中,然后回头将From所有区域清空,然后角色交换,From和To交换,保证To永远为空
      1.年轻代当中分为Eden去和From和To区,其中From和To区的大小时相同的,程序向Eden去和From区存放数据,当数据即将满了的情况下
      2.Eden区会将活跃对象存放到To区,From区会将年龄小的对象存放到To区,那么年龄大的存放到Old年老代区域当中
      3.清空Eden去和Old区的所有数据,然后将From区角色和To区角色互换,这样保证To区为空
      4.当垃圾回收机制反复运行时,那么To区可能数据饱和,如果数据饱和则将所有对象转移到Old年老区

    3.5 分代算法

      合适的垃圾回收对象沿用合适的算法,在JVM当中年轻代适合复制算法,年老代可以标记清除发,或者标记压缩算法

  • 相关阅读:
    算法笔记 第3章 入门篇(1) 学习笔记
    算法笔记 上机训练实战指南 第3章 入门篇(1)--入门模拟 学习笔记 3.1简单模拟
    机器学习实战:基于Scikit-Learn和TensorFlow 第5章 支持向量机 学习笔记(硬间隔)
    机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树
    算法笔记 第7章 提高篇(1)--数据结构专题(1) 学习笔记
    算法笔记 第6章 C++标准模版库(STL)介绍 学习笔记
    自然语言处理入门 何晗 读书笔记 第2章 词典分词
    自然语言处理入门 何晗 读书笔记 第1章 新手上路
    [ML]随机森林
    [ML]LightGBM论文理解
  • 原文地址:https://www.cnblogs.com/ws1149939228/p/12420792.html
Copyright © 2011-2022 走看看