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