先看一张图

根据JConsole和任务管理器对比,堆内存大小在250M左右,差不多空跑一个程序用idea启动springboot就是这个大小

项目启动初始类在一万个左右,活动线程50个上下,cpu利用率可以忽略。

idea工具本身占用内存在1.7G,这个貌似有点大,具体的内存使用需要后续学习?

google浏览器1G内存感觉也是逆天了。

内存分析这张图比较重要,每一个含义需要搞清楚

说明:

老年代  PS Old Gen

新生代 PS Eden Space 对象创建存放的区域

新生代 PS Survivor Space 第一次GC之后存放的区域

代码缓存 Code Cache jvm编译和存储本地代码所占用的内存

本地内存也叫元空间 Metaspace 永久代PermGen从JDK8开始被metaspce替代 (jdk8新概念)

类指针压缩空间  Compressed Class Space  (jdk8新概念)

回收的顺序如下

JDK6回收

jDK8回收

对metaspace 和 compressed class space做一个专门的解释,看完即懂

先看一张metaspce内存分配图

解释 CL是class loader的简写,从本地加载,然后根据一定的算法把二进制字节码加载到元空间

持久代中存的内容
       1. JVM中类的元数据在Java堆中的存储区域。
       2. Java类对应的HotSpot虚拟机中的内部表示也存储在这里。
       3. 类的层级信息,字段,名字。
       4. 方法的编译信息及字节码。
       5. 变量
       6. 常量池和符号解析
GC是可以对持久代进行垃圾收集的   既然JDK8取消了持久代用元数据替代,那么元数据存储的内容就是持久代中存储的内容

元空间特点

  1. 充分利用了Java语言规范中的好处:类及相关的元数据的生命周期与类加载器的一致。
  2. 每个加载器有专门的存储空间
  3. 只进行线性分配
  4. 不会单独回收某个类
  5. 省掉了GC扫描及压缩的时间
  6. 元空间里的对象的位置是固定的
  7. 如果GC发现某个类加载器不再存活了,会把相关的空间整个回收掉

Compressed Class Space

看图对照解释

JVM中,每个对象都有一个指向它自身类的指针,不过这个指针只是指向具体的实现类,而不是接口或者抽象类。

64位的JVM  _Mark 占8个字节常量 _klass 指向类的8个字节的指针

为了压缩JVM对象中的_klass指针的大小,引入了类指针压缩空间(Compressed Class Pointer Space)。

从字面上看内存的分析应该是最简单的了

下面线程这个图感觉有点蒙圈

后续再详细分析

类图  加载了一万个

VM概要 对内存的一个补充

MBean也是非常的使用

jconsole使用的更多相关文章

  1. JConsole远程连接配置

    JConsole远程连接还是有一点坑的.这里记录一下配置过程,好记性不如烂笔头. 1.在远程机的tomcat的catalina.sh中加入配置: JAVA_OPTS="$JAVA_OPTS ...

  2. 通过jconsole监控tomcat JVM 内存、线程、CPU

    从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击  ...

  3. 使用本地JConsole监控远程JVM(最权威的总结)

    问题背景   Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题.   经过几个小时的努力,参考了众多 ...

  4. 如何利用 JConsole观察分析Java程序的运行,进行排错调优

    原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  5. maven 问题解决 tools以及jconsole两个jar包 无效

    在SVN上下载项目,结果完成后出现两个jar包不存在的情况 如下图: 然后,第一步就是去查看POM.xml文件是否配置了这两个文件,结果并没有,于是就更加奇怪了 所以怀疑是不是其他maven下载的ja ...

  6. JConsole监控远程Tomcat服务器

    为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了.这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况. c ...

  7. 【经验记录】Jconsole Jvisualvm 监控Tomcat

    环境:centos 6 1.首先检查hostname是否正确,输入以下命令 hostname -i 如果输出机器ip,则表示正确,如果输出 hostname: Unknown host 查看/etc/ ...

  8. Jconsole远程监控tomcat 的JVM内存(linux、windows)

    Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界 ...

  9. JVM内存监控工具 Jconsole

    -------------Jconsole监视远程的linux服务器上的tomcat ----------------------------- 1.linux服务器上的tomcat 的bin/cat ...

  10. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

    利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

随机推荐

  1. ServletConfig与ServletContext对象详解

    一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.(配置在某个servlet标签或者整个w ...

  2. blfs(systemv版本)学习笔记-总页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv版本)学习笔记:https://www.cnblogs.com/renren-study-notes/p/ ...

  3. python中文编码&json中文输出问题

    python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 un ...

  4. 2017-10-29 用中文命名API的意义和途径

    "中文编程"知乎专栏原链 在前文对在代码中使用中文命名的质疑与回应中阐述了在代码中使用中文命名的益处. 此文将从软件使用者的角度阐述对API中文化的意义并探讨实现途径. 当然, 文 ...

  5. php获取数据库中数据

    <?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...

  6. ES6模块化与常用功能

    目前开发环境已经普及使用,如vue,react等,但浏览器环境却支持不好,所以需要开发环境编译,下面介绍下开发环境的使用和常用语法: 一,ES6模块化 1,模块化的基本语法 ES6 的模块自动采用严格 ...

  7. Apex 的异常处理

    Apex 中的异常处理 在 Apex 中,和其他语言类似,对于异常处理通常使用 try.catch.finally.throw 等关键字. 对于每一个 try 代码段,必须要有至少一个 catch 或 ...

  8. LeanCloud数据存储相关问题

    1.短信验证码 当注册用户的时候,会发现收不到短信验证码,打印e : That operation isn't allowed for clients. 含义 - 该操作无法从客户端发起.请检查该错误 ...

  9. 你不可不知的Java引用类型之——弱引用

    定义 弱引用是使用WeakReference创建的引用,弱引用也是用来描述非必需对象的,它是比软引用更弱的引用类型.在发生GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收. 说明 弱 ...

  10. Python中列表

    names=["Linda","Lily","Lucy","Grace","Paul"] #切片 p ...