JVM- 类加载过程

1、类加载过程

    1)、加载

     a)、类的信息加载到方法区。

     b)、类对象放在堆里。

   2)、链接

     a)、验证:文件格式,元数据,字节码,符号引用。

               符号引用转为直接引用。

      b)、准备: 为静态变量分配内存(方法区)。并初始化成默认值元数据验证。

      c)、解析: 常量池中的符号引用替换为直接引用。

   3)、初始化( clinit)

          如果类没有被加载和链接,那就先加载和链接。

          如果类存在直接的父类,先初始化直接父类。

          如果类中存在初始化语句。那就依次初始化化语句。

 

双亲委派模型:先委托父类加载器寻找目标类,在找不到的情况下,在自己的路径中查找

沙箱安全机制:自己写的同名核心类不会被加载,这样便可以防止核心API库被随意篡改。

 

1、启动类加载器。rt.jar (java.lang, java.io.)

2、扩展类加载器  %JAVA_HOME%/lib/ext/

3、应用类加载器。classpath

4、自定义类加载器。(自定义路径)如:Tomcat

JVM对class文件是按需加载(运行期间动态加载)

JVM 运行时数据区:

1、Method Area (方法区)。

      Runtime Constant Pool (运行时常量池)

2、Heap( 堆 )。

3、JVM Stacks (虚拟机栈)。

    栈帧:  局部变量区、操作数栈、动态链接。

  

4、Native Method Statcks (本地方法栈)。

5、Program Counter Register (程序计数器)。

 

Java 调优命令:

jps :显示进程id

Jinfo: 查看正在运行的java应用程序的扩展参数。
jinfo -flags 进程号

 Jstat: 查看堆内存的使用量,以及类加载的数量
 jstat -class 进程号

 jstat -gc 进程号

S0C :surivor 0区的大小
S1C:
S0U
S1U
EC:
EU
OC
OU
MC
YGC
CCSC

jstat -gcnewcapacity 
jstat -gcold

Jmap: 查运行时内存信息、
jmap -histo 进程号 -> 内存文件

jmap -heap 进程号
jmap -dump:format=b,file=文件名 进程号
如:
jmap -dump:format=b,file=eureka.hprof 12108 

设置启动时的内存状况: -XX:+PrintGCDetatils -XX:+HeapDumpOnOutOfMemeoryError -XX:HeapDumpPath=D:\jvm.dump

jhat

Jstack: 程序所有线程的堆栈情况,排查死锁

jstack 进程号

jstack 找出占用CPU最高的堆栈信息

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值