1.jconsole是一种集成了上面所有命令功能的可视化工具,可以分析jvm的内存使用情况和线程等信息。
通过JDK/bin目录下的“jconsole.exe”启动Jconsole后,将自动搜索出本机运行的所有JVM进程,不需要用户使用jps来查询 了,双击其中一个进程即可开始监控。也可以“远程连接服务器,进行远程虚拟机的监控。”
插件中,Visual GC(可视化GC)还是比较好用的,可视化GC可以看到内存的具体使用情况。
2.JAVA内存模型
Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区。Java虚拟机运行时数据区域被分为五个区域:堆(Heap)、栈(Stack)、本地方法栈(Native Stack)、方法区(Method Area)、程序计数器(Program Count Register)。
- 堆
Java Heap是Java虚拟机管理的内存的最大一块,这块区域随着虚拟机的启动而创建。在实际的运用中,我们创建的对象和数组就是存放在堆里面,Java Heap是一块共享的区域,操作共享区域的成员就有了锁和同步。与Java Heap相关的还有Java的垃圾回收机制(GC),Java Heap是垃圾回收器管理的主要区域。程序猿所熟悉的新生代、老生代、永久代的概念就是在堆里面,现在大多数的GC基本都采用了分代收集算法。如果再细致一点,Java Heap还有Eden空间,From Survivor空间,To Survivor空间等。
- 栈
相对于Java Heap来讲,Java Stack是线程私有的,她的生命周期与线程相同。Java Stack描述的是Java方法执行时的内存模型,每个方法执行时都会创建一个栈帧(Stack Frame)用语存储局部变量表、操作数栈、动态链接、方法出口等信息。
- 本地方法栈
本地方法栈(Native Stack)与Java虚拟机站(Java Stack)所发挥的作用非常相似,他们之间的区别在于虚拟机栈为虚拟机栈执行java方法(也就是字节码)服务,而本地方法栈则为使用到Native方法服务。
- 方法区