JVM组成部分
2024-05-23 16:29:49 15 举报
AI智能生成
JVM组成部分
作者其他创作
大纲/内容
类加载器 Class Loader
加载
1、将class文件字节码内容加载到内存
2、将这些静态数据转换成方法区的运行时数据结构(fileds methods construtor)
3、生成一个代表这个类的Class对象
链接
验证:确保加载的类信息符合JVM规范,没有安全方面问题
准备:为类变量(static)分配内存,并初始化值(整数 0,浮点数 0.0 ,字符 /u000,引用类型 null)
解析:虚拟机常量池内的符号引用(常量名) 替换为直接引用(地址)的过程
初始化
执行类构造器<clinit>() 方法,为类变量赋值
运行时数据区
方法区(特殊的堆,在元空间中,使用的是本地内存)
堆 heap (堆内存饱满 OutOfMemoryError)
内存调优
-Xms 设置初始化内存分配大小
-Xmx 设置最大分配内存,默认是 1/4
-XX:+PrintGCDetails 打印GC垃圾回收信息
-XX:+HeapDumpOutofMemoryError oom Dump内存快照
组成部分
新生区 (年轻代)
伊甸园区
幸存区(form、to两者位置不断变化)
幸存0区 (form)
幸存1区 (to)
老年区 (老年代)
永久区(JDK7以前,JDK8以后 元空间 代替了永久区)
栈 stack (栈内存溢出StackOverflowError)
Java栈中存放的是多个栈帧,每一个栈帧对应一个被调用的方法。
每一个方法被执行时,JVM都会创建一个栈帧,并将栈帧压入Java栈,当方法执行完成时,该栈帧弹出栈。
本地方法 Native
Java是基于应用层的高级编程语言,无法访问操作系统底层信息,需要其他语言来完成功能,比如c语言
程序计数器
1、所占空间很小,可以忽略不计。
2、是当前线程所执行的字节码文件行号指示器,通过改变这个计数器的值来选取下一条需要执行的字节码指令
3、多个线程之间的程序计数器相互独立,互不影响
执行引擎
对 JVM 指令进行解析,翻译成机器码,解析完成后提交到操作系统中。
本地接口
本地方法库
0 条评论
下一页