Java复习之JVM

论坛 期权论坛     
选择匿名的用户   2021-5-22 22:24   38   0
<h3>转载于<a href="https://mp.weixin.qq.com/s/gBr3UfC1HRcw4U-ZMmtRaQ">三太子敖丙</a>!!!</h3>
<h3>jre、jdk、jvm的关系:</h3>
<p>jdk是最小的开发环境,由jre&#43;&#43;java工具组成。</p>
<p>jre是java运行的最小环境,由jvm&#43;核心类库组成。</p>
<p>jvm是虚拟机,是java字节码运行的容器,如果只有jvm是无法运行java的,因为缺少了核心类库。</p>
<h3>JVM内存模型</h3>
<p>(1):堆&lt;对象,静态变量,共享</p>
<p>(2):方法区&lt;存放类信息,常量池,共享&gt;(java8移除了永久代(PermGen),替换为元空间(Metaspace))</p>
<p>(3):虚拟机栈&lt;线程执行方法的时候内部存局部变量<em>会存堆中对象的地址</em>等等数据&gt;</p>
<p>(4):本地方法栈&lt;存放各种native方法的局部变量表之类的信息&gt;</p>
<p>(5):程序计数器&lt;记录当前线程执行到哪一条字节码指令位置&gt;</p>
<h3>对象4种引用</h3>
<p>(1):强(内存泄露主因)</p>
<p>(2):软(只有软引用的话,空间不足将被回收),适合缓存用</p>
<p>(3):弱(只,GC会回收)</p>
<p>(4):虚引用(用于跟踪GC状态)用于管理堆外内存</p>
<h3>对象的构成:</h3>
<p>一个对象分为3个区域:对象头、实例数据、对齐填充</p>
<p>对象头:主要是包括两部分,1.存储自身的运行时数据比如hash码,分代年龄,锁标记等(但是不是绝对哦,锁状态如果是偏向锁,轻量级锁,是没有hash码的。。。是不固定的)2.指向类的元数据指针。还有可能存在第三部分,那就是数组类型,会多一块记录数组的长度(因为数组的长度是jvm判断不出来的,jvm只有元数据信息)</p>
<p>实例数据:会根据虚拟机分配策略来定,分配策略中,会把相同大小的类型放在一起,并按照定义顺序排列(父类的变量也会在哦)</p>
<p>对齐填充:这个意义不是很大,主要在虚拟机规范中对象必须是8字节的整数,所以当对象不满足这个情况时,就会用占位符填充</p>
<h3>如果判断一个对象是否存活:</h3>
<p>一般判断对象是否存活有两种算法,一种是引用计数,另外一种是可达性分析。在java中主要是第二种</p>
<h3>java是根据什么来执行可达性分析的:</h3>
<p>根据GC ROOTS。GC ROOTS可以的对象有:虚拟机栈中的引用对象,方法区的类变量的引用,方法区中的常量引用,本地方法栈中的对象引用。</p>
<h3>JVM 类加载顺序</h3>
<p>(1):加载 获取类的二进制字节流,将其静态存储结构转化为方法区的运行时数据结构</p>
<p>(2):校验 文件格式验证,元数据验证,字节码验证,符号引用验证</p>
<p>(3):准备 在方法区中对类的static变量分配内存并设置类变量数据类型默认的初始值,不包括实例变量,实例变量将会在对象实例化的时候随着对象一起分配在Java堆中</p>
<p>(4):解析 将常量池内的符号引用替换为直接引用的过程</p>
<p>(5):初始化 为类的静态变量赋予正确的初始值(Java代码中被显式地赋予的值)</p>
<h3>JVM三种类加载器</h3>
<p>(1):启动类加载器(home) 加载jvm核心类库,如java.lang.*等</p>
<p>(2):扩展类加载器(ext), 父加载器为启动类加载器,从jre/lib/ext下加载类库</p>
<p>(3):应用程序类加载器(用户classpath路径) 父加载器为扩展类加载器,从环境变量中加载类</p>
<h3>双亲委派机制</h3>
<p>(1):类加载器收到类加载的请求</p>
<p>(2):把这个请求委托给父加载器去完成,一直向上委托,直到启动类加载器</p>
<p>(3):启动器加载器检查能不能加载,能就加载(结束);否则,抛出异常,通知子加载器进行加载</p>
<p>(4):保障类的唯一性和安全性以及保证JDK核心类的优先加载</p>
<h3>双亲委派模型有啥作用:</h3>
<p>保证java基础类在不同的环境还是同一个Class对象,避免出现了自定义类覆盖基础类的情况,导致出现安全问题。还可以避免类的重复加载。</p>
<h3>如何打破双亲委派模型?</h3>
<p>(1):自定义类加载器,继承ClassLoader类重写loadClass方法;</p>
<p>(2):SPI</p>
<p>tomcat是
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP