黑马Java虚拟机 JVM(二)

wuchangjian2021-12-08 01:43:29编程学习
1. 线程运行诊断

CPU占用过多
定位:

  • 用top定位哪个进程对cpu占用过高
  • ps H -eo pid, tid, %cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高)
  • jstack进程id:可以根据线程id找到有问题的线程,进一步定位到问题代码的源码行号
2. 本地方法栈

在这里插入图片描述

  • Native Method Stacks:本地方法栈
  • 解释:本地方法就是那些不是由Java代码编写的方法,因为Java代码有限制,有些情况下不能和操作系统底层进行交互,所以就需要由C 或 C++ 编写的本地方法来与操作系统打交道,所以本地方法执行时候所使用的就是本地方法栈
  • 作用:为本地方法的运行提供内存空间
3. 堆(Heap)
  • 通过new关键字,创建对象都会使用堆内存
  • 特点:
    • 它是线程共享的,堆中对象都需要考虑线程安全的问题
    • 有垃圾回收机制
4. 堆内存溢出
  • OutOfMemoryError:Java heap space
  • 不断产生对象,且对象被使用(不会被回收),对象堆积会造成堆内存溢出
5. 堆内存诊断
  • jps工具
    • 查看当前系统中有哪些Java进程
  • jmap工具
    • 查看堆内存占用情况 jmap -heap 进程id(查询当前时刻,不能连续监测)
  • jconsole工具
    • 图形界面,多动能的监测工具,可以连续监测
6. 方法区(Method Area)

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。