主要涉及的知识点:

1.跟踪Java虚拟机的垃圾回收和类加载等信息;

2.配置Java虚拟机的堆空间;

3.配置永久区和Java栈。

4.学习虚拟机的服务器和客户端模式。

1.1 跟踪垃圾回收

Java支持自动垃圾回收(GC),如果垃圾回收频繁出现,或者占用了太长的CPU时间,就必须重视起来。

最简单的一个CG参数是-XX:+PrintGC,使用这个参数启动Java虚拟机后,只要遇到GC,就会打印日志。

使用-XX:+PrintGCDetails参数,打印更加详细的信息。

[GC (System.gc()) [PSYoungGen: 8110K->792K(37888K)] 8110K->6944K(123904K), 0.0043826 secs] [Times: user=0.06 sys=0.02, real=0.00 secs]
[Full GC (System.gc()) [PSYoungGen: 792K->0K(37888K)] [ParOldGen: 6152K->6806K(86016K)] 6944K->6806K(123904K), [Metaspace: 2669K->2669K(1056768K)], 0.0043210 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 37888K, used 328K [0x00000000d6000000, 0x00000000d8a00000, 0x0000000100000000)
eden space 32768K, % used [0x00000000d6000000,0x00000000d6052030,0x00000000d8000000)
from space 5120K, % used [0x00000000d8000000,0x00000000d8000000,0x00000000d8500000)
to space 5120K, % used [0x00000000d8500000,0x00000000d8500000,0x00000000d8a00000)
ParOldGen total 86016K, used 6806K [0x0000000082000000, 0x0000000087400000, 0x00000000d6000000)
object space 86016K, % used [0x0000000082000000,0x00000000826a5970,0x0000000087400000)
Metaspace used 2676K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 286K, capacity 386K, committed 512K, reserved 1048576K

详细信息描述了当前堆的各个区间的使用情况。

通过使用参数-XX:+PrintHeapAtGC ,在每次GC前后分别打印堆的信息。

{Heap before GC invocations= (full ):
PSYoungGen total 37888K, used 8110K [0x00000000d6000000, 0x00000000d8a00000, 0x0000000100000000)
eden space 32768K, % used [0x00000000d6000000,0x00000000d67eb970,0x00000000d8000000)
from space 5120K, % used [0x00000000d8500000,0x00000000d8500000,0x00000000d8a00000)
to space 5120K, % used [0x00000000d8000000,0x00000000d8000000,0x00000000d8500000)
ParOldGen total 86016K, used 0K [0x0000000082000000, 0x0000000087400000, 0x00000000d6000000)
object space 86016K, % used [0x0000000082000000,0x0000000082000000,0x0000000087400000)
Metaspace used 2669K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 285K, capacity 386K, committed 512K, reserved 1048576K
Heap after GC invocations= (full ):
PSYoungGen total 37888K, used 824K [0x00000000d6000000, 0x00000000d8a00000, 0x0000000100000000)
eden space 32768K, % used [0x00000000d6000000,0x00000000d6000000,0x00000000d8000000)
from space 5120K, % used [0x00000000d8000000,0x00000000d80ce010,0x00000000d8500000)
to space 5120K, % used [0x00000000d8500000,0x00000000d8500000,0x00000000d8a00000)
ParOldGen total 86016K, used 6152K [0x0000000082000000, 0x0000000087400000, 0x00000000d6000000)
object space 86016K, % used [0x0000000082000000,0x0000000082602010,0x0000000087400000)
Metaspace used 2669K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 285K, capacity 386K, committed 512K, reserved 1048576K
}
{Heap before GC invocations= (full ):
PSYoungGen total 37888K, used 824K [0x00000000d6000000, 0x00000000d8a00000, 0x0000000100000000)
eden space 32768K, % used [0x00000000d6000000,0x00000000d6000000,0x00000000d8000000)
from space 5120K, % used [0x00000000d8000000,0x00000000d80ce010,0x00000000d8500000)
to space 5120K, % used [0x00000000d8500000,0x00000000d8500000,0x00000000d8a00000)
ParOldGen total 86016K, used 6152K [0x0000000082000000, 0x0000000087400000, 0x00000000d6000000)
object space 86016K, % used [0x0000000082000000,0x0000000082602010,0x0000000087400000)
Metaspace used 2669K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 285K, capacity 386K, committed 512K, reserved 1048576K
Heap after GC invocations= (full ):
PSYoungGen total 37888K, used 0K [0x00000000d6000000, 0x00000000d8a00000, 0x0000000100000000)
eden space 32768K, % used [0x00000000d6000000,0x00000000d6000000,0x00000000d8000000)
from space 5120K, % used [0x00000000d8000000,0x00000000d8000000,0x00000000d8500000)
to space 5120K, % used [0x00000000d8500000,0x00000000d8500000,0x00000000d8a00000)
ParOldGen total 86016K, used 6806K [0x0000000082000000, 0x0000000087400000, 0x00000000d6000000)
object space 86016K, % used [0x0000000082000000,0x00000000826a5970,0x0000000087400000)
Metaspace used 2669K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 285K, capacity 386K, committed 512K, reserved 1048576K
}

如果需要分析GC发生时间,可以使用-XX:+PrintGCTimeStamps参数,该参数会在每次GC发生时,额外输出GC发生的时间,输出的时间为虚拟机启动后的时间偏移量。

由于GC会引起应用程序的停顿,因此,需要特别关注应用程序的执行时间和停顿时间。使用参数 -XX:+PrintGCApplicationConcurrentTime可以打印应用程序的执行时间,

使用参数 -XX:+PrintGCApplicationStoppedTime 可以打印应用程序由于GC而产生的停顿时间。

跟踪系统内的软引用、弱引用、虚引用和Finallize队列,则可以使用-XX:PrintReferenceCG;

使用参数 -Xloggc指定GC日志的输出文件,比如 -Xloggc:log/gc.log

 类加载/卸载的跟踪

Java程序的运行离不开类的加载,为了更好的理解程序的执行,有时候需要知道系统加载了哪些类。一般情况下,系统加载的类存在于文件系统中,以jar的形式打包或者以class文件的形式存在,可以直接通过文件系统查看。

但是随着动态代理、AOP等技术的普遍使用,系统也极有可能在运行时动态生成某些类,这些类相对比较隐蔽,无法通过文件系统找到。

使用参数 -verbose:class 跟踪类的加载和卸载。也可单独使用参数-XX:+TraceClassLoading跟踪类的加载,使用参数 -XX:+TraceClassUnloading 跟踪类的卸载。这两类参数是等价的。

Java虚拟机还允许研发人员在运行时打印、查看系统中类的分布情况,只要在系统启动时加上 -XX:+PrintClassHistogram参数,然后在Java的控制台下Ctrl + Break 组合键,控制台上就会显示当前的类信息柱状图,可以看到占用空间最多的对象,以及其实例数量和空间大小。

Java虚拟机四 常用Java虚拟机参数的更多相关文章

  1. Java进阶(四十)Java类、变量、方法修饰符讲解

    Java进阶(四十)Java类.变量.方法修饰符讲解 Java类修饰符 abstract: 将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. final: 将一个类生命为最终(即非继承类) ...

  2. Java泛型四:Java泛型总结

    原文地址https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 publ ...

  3. 深入java面向对象四:Java 内部类种类及使用解析(转)

    内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...

  4. Java虚拟机详解----常用JVM配置参数

    本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...

  5. 【转】Java虚拟机详解----常用JVM配置参数

    原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: ...

  6. 【java虚拟机】常用的jvm配置参数

    转自:https://www.cnblogs.com/pony1223/p/8661219.html 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技 ...

  7. 《深入理解Java虚拟机》笔记--第四章、虚拟机性能监控与故障处理工具

    主要学习并记录在命令行中操作服务器时使用的六大命令工具,可视化工具JConsole和VisualVM在开发过程中熟悉. 一.jps:虚拟机进程状况工具(JVM Process Status Tool) ...

  8. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  9. 深入理解JVM虚拟机11:Java内存异常原理与实践

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

随机推荐

  1. Greenplum-cc-web监控软件安装

    一环境列表 操作系统 centos6.5  64 Greenplum版本: greenplum-db-4.3.5.3-build-2-RHEL5-x86_64.tar Greenplum集群环境搭建: ...

  2. Npm基本指令(转)

    一些常用的 npm 指令 當你設定好 node.js 的開發環境後, 是時候來把下面這些常用的 npm 指令給摸熟了. 將套件於全域安裝. 全域安裝的套件通常只是為了執行檔而已. $ npm inst ...

  3. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  4. 栈空间默认1M,测试存进数据时间

    #include <stdio.h> 栈空间是1024*1024,一兆1M,其中包含了进入main函数之前的1万左右空间.全空间是足的.速度:栈>全局>堆 测试运算时间.100 ...

  5. Spring-----配置及对象初始化(1)

    一,配置文件进行Spring初始化 1,配置文件编写 <?xml version="1.0" encoding="utf-8" ?> <con ...

  6. 打破基于OpenResty的WEB安全防护(CVE-2018-9230)

    原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 ​ OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...

  7. Python学习--字符串slicing

    Found this great table at http://wiki.python.org/moin/MovingToPythonFromOtherLanguages Python indexe ...

  8. JSP基本用法(一)运行机制和语法

    一.概述 JSP是一种建立在Servlet规范功能上的动态网页技术,在网页文件中嵌入Java代码和JSP标记用于产生动态内容. 本文简单介绍JSP的运行机制和JSP的语法. 二.JSP的运行机制 JS ...

  9. windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数

    windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数 1.KeRaiseIrql函数 这个 KeRaiseIrql() 只是简单地调用 hal 模块的 KfRa ...

  10. WEB中会话跟踪[转]

    今天晚上去华工参加睿智融科的笔试,问到web会话跟踪,一脸懵比,这个词听都没听过,回来后百度下,发现其实会话跟踪的内容我基本都了解的~_~ 转自:http://www.cnblogs.com/gaop ...