什么是类和jvm参数

类的生命周期

  1. 加载:找class文件
  2. 验证:验证格式
  3. 准备:静态字段,方法表
  4. 解析:符号解析为引用
  5. 初始化:构造器,静态变量赋值,静态代码块
  6. 使用
  7. 卸载
    2,3,4属于链接

三类加载器

  1. 启动类加载器:加载jvm核心 rt.jar。(底层实现c++)
  2. 扩展类加载器:提供的扩展,可主动调用
  3. 应用类加载器(自己的jar包加载的类加载器)

加载器特点(如何避免重复加载)

  1. 双亲委托:从上级加载器查找该类,如果没有则加载
  2. 负责依赖:代码中依赖的jar包都需要加载
  3. 缓存加载:加载一次后缓存

JVM内存结构

栈:类的局部变量和对象的引用地址,每启动一个线程就创建一个栈.
堆:类的静态变量和类的定义
线程执行过程中,一般会有多个方法组成调用栈(Stack Trace),比如A调用B.没执行到一个方法,就会创建对应的栈帧(Frame)
如果试用JNI(底层c++),会单独起一个栈

堆内存结构

分代
在这里插入图片描述

java启动参数

堆内存参数

-Xmx, 指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为4g。
这个内存不包括栈内存,也不包括堆外使用的内存。
-Xms, 指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并
不是操作系统实际分配的初始值,而是GC先规划好,用到才分配。 专用服务
器上需要保持 –Xms 和 –Xmx 一致,否则应用刚启动可能就有好几个 FullGC。
当两者配置不一致时,堆内存扩容可能会导致性能抖动。
-Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其
他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4.
-XX:MaxPermSize=size, 这是 JDK1.7 之前使用的。Java8 默认允许的
Meta空间无限大,此参数无效。
-XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设
置该选项。
-XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参
数跟 -Dsun.nio.MaxDirectMemorySize 效果相同。
-Xss, 设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与XX:ThreadStackSize=1m 等价

GC相关

-XX:+UseG1GC:使用 G1 垃圾回收器
-XX:+UseConcMarkSweepGC:使用 CMS 垃圾回收器
-XX:+UseSerialGC:使用串行垃圾回收器
-XX:+UseParallelGC:使用并行垃圾回收器
// Java 11+
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
// Java 12+

  1. 各个 JVM 版本的默认 GC 是什么? -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC

jdk内置命令行工具

java:启动
jps\jinfo:查看java进程 jps -mlv
jstat:查看jvm内部gc相关信息
jmap:查看heap或类占用空间统计;jmap heap pid:打印堆内存(/内存池)的配置和使用信息
jstack:查看线程信息
jcmd:执行jvm相关分析命令(整合命令)
jrunscript/jjs:执行js命令

JVM核心技术-JVM命令行工具

  1. java Java应用的启动程序

  2. javac JDK内置的编译工具

  3. javap 反编译class文件的工具

  4. jps/jinfo 查看java进程

    1. -lmv 进程详情
  5. jstat 查看JVM内部gc信息

    1. -gc
      在这里插入图片描述
  6. jmap 查看heap或类占用空间统计

    1. -heap 打印堆内存
    2. -histo 看哪些类占用的空间最多
  7. jstack 查看线程信息

  8. jcmd 执行JVM相关命令

  9. jjs 执行js命令

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值