微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM

JVM内存模型

  • 堆:对象。
  • 栈:局部变量,操作数栈,动态连接,方法的返回地址。
  • 方法区:常量,静态变量,类信息。
  • 本地方法栈:Native方法
  • 程序计数器:字节码的访问地址。

类加载过程

  • 过程:1、加载生成class对象;2、验证;3、准备:static变量分配内存和初始值;4、解析:符号引用替换为直接引用;5、初始化父类没初始化需先初始化。(家宴准解出

双亲委派机制

  • 父类加载,不重复加载。
  • 自定义--应用程序--扩展--启动。

分代回收

  • 新生代(Eden/s1/s2),老年代,永久代/元空间。
  • 晋升机制根据对象存活时间。

垃圾回收器

full gc的时机

  • 老年代/永久代空间不足。
  • System.gc()方法
  • 晋升老年代的大小大于老年代的剩余空间。

性能调优

  • 目的:减少gc,stw。
  • 方法:设置堆的最大最小值,调整新生代与老年代的比例,配置高可以设置并发收集算法。

oom种类

  • 对象太多没有释放。
  • 线程创建太多没有释放。
  • fd太多,一个进程1024个fd。

逃逸分析

  • 依据:对象被赋值给堆中对象的字段或类的静态变量(其他线程访问时编译器无法追踪);位于不确定的代码中(保守处理)。

JVM调优的情况

  • 线程死锁
  • 锁竞争
  • cpu过高
  • 内存泄露

JVM指令与工具

  • jps:查看java进程概述
  • jstat -gcutil [pid] [时间间隔]:根据进程id查看进程的详细情况
  • jstack [pid]:查看进程中的线程运行状况
  • jmap -dump:file=[文件名] pid:将进程运行的状况dump到文件中,文件通过fastThread线上工具分析。
  • jmap -heap [pid]:打印进程的堆内存信息
  • jconsolevisual VM工具

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐