JVM内存模型及性能调优

参考:https://www.bilibili.com/video/av71330748/?p=7

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

1.jvm 组成结构如下图所示

 

(1) 堆,虚拟机所管理内存中最大的一块,线程共享,在虚拟机启动时创建,生命周期同JVM相同,存储对象信息。

(2) 方法区,方法区是一块线程共享的内存区域,存储类加载信息、保存常量、静态常量、类元信息等。

(3) 线程栈,线程私有,生命周期同线程相同。启动一个线程,程序调用函数,栈帧被压入栈中,函数调用结束,相应栈帧出栈。栈帧:由局部变量表,操作数栈,动态链接,方法出口组成。

(4)本地方法栈,本地方法是由C语言编写的,java 通过本地方法调用系统底层函数。

(5) 程序计数(PC):前线程所执行的字节码的行号指示器.

(6) 直接内存: 不属于java 虚拟机中的内存区域,例如NIO 使用native函数库直接分配堆外内存,受总内存影响,根据实际情况设置参数-Xmx信息。

详细扩展

 

 

基础插件:jvisual vm,Gc 可视化插件 Visual Gc ,Jdk 命令,Gc日志打印

 

1. GC打印参数: -XX:+PrintGCDetails 

(1)jps 查看JVM 进程。

(2)jstack 观察JVM所有线程运行情况和当前状态。

  (3)   jstat 常用查看堆内存各个部分的使用情况、以及加载类的数量。

         类加载统计:

         类编译统计:

         垃圾回收统计:

         堆内存统计:

         新生代垃圾回收统计

         新生代内存统计

         老年代垃圾回收统计

         老年代内存统计

         元数据空间统计

          总结垃圾回收统计

          jstat -gcutil pid interval   数值显示占百分比,jstat -gc pid  打印大小。

(4)jconsole 图形化查看内存线程等信息,集成了jstat、jstack。

(5)jmap,dump java进程的内存状态,jmap -dump:file=xxx pid    , jmap -head pid 打印堆内存使用详细信息,

         -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录} 进行dump 内存使用情况文件。

GC 分类

https://blog.csdn.net/qq_33915826/article/details/79672772

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值