jvm 内存溢出-直接内存溢出

0

DirectMemory 容量可通过 -XX:MaxDirectMemorySize 指定,如果不指定,则默认与 Java 堆最大值( -Xmx 指定)一样,下面程序利用 DirectByteBuffe 模拟直接内存溢出的情况

jps - 虚拟机进程状况工具

0

jps(JVM Process Status Tool)与 UNIX 的 ps 命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier,LVMID)。虽然功能比较单一,但它是使用频率最高的 JDK 命令行工具,因为其他的 JDK 工具大多需要输入它查询到的 LVMID 来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID 与操作系统的进程 ID(Process Identifier,PID)是一致的,使用 Windows 的任务管理器或者 UNIX 的 ps 命令也可以查询到虚拟机进程的 LVMID ,但如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依赖 jps 命令显示主类的功能才能区分了。

jconsole - Java 监视与管理控制台

0

JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对 JMX MBean 进行管理,由于 MBean 可以使用代码、中间件服务器的管理控制台或者所有符合 JMX 规范的软件进行访问。

jhat - 虚拟机堆转储快照分析工具

0

jhat(JVM Heap Analysis Tool) 主要是为了和 jmap 搭配使用,来分析 jmap 生成的转储快照。jhat 内置了一个微型的 HTTP/HTML 服务器,生成 dump 文件的分析结果后,可以在浏览器中查看。不过在实际工作中,一般都不会去直接使用 jhat 命令来分析 dump 文件。

jinfo - Java 配置信息工具

0

jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数。使用 jps -v 命令参数可以查看虚拟机启动时显式指定的参数列表,如果想知道未被显式指定的参数的系统默认值,除了去找资料外,还可以使用 jinfo -flag 命令进行查询。

jmap - Java 内存映像工具

0

jmap(Memory Map for Java) 命令用于生成堆转储快照(一般称为 heapdump 或 dump 文件)。目前获取 Java 堆转储快照的方式有以下几种:

jstack - Java 堆栈跟踪工具

0

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstat - 虚拟机统计信息监视工具

0

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。

Java 垃圾回收 - 对象引用

0

在 JDK 1.2 之前,Java 对象的引用很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种状态下只有被引用或不被引用两种状态,有时候我们希望描述这样一类对象:当内存空间还足够时,则能保留在内存之中;如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。

jvm 内存溢出-堆溢出

0

Java 堆用于存储对象实例,只要不断地创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,则在对象数量到达最大堆的容量限制后就会产生内存溢出异常。因此我们用编写如下代码来模拟内存溢出