酒类做网站,wordpress网站首页,网站二次开发公司,seo营销推广平台1.概述
JVM指的是Java虚拟机#xff0c;本质上是一个运行在计算机上的程序#xff0c;他的职责是运行Java字节码文件#xff0c;作用是为了支持跨平台特性。
功能#xff1a; 装载字节码#xff0c;解释/编译为机器码 管理数据存储和垃圾回收 优化热点代码提升效率
…1.概述
JVM指的是Java虚拟机本质上是一个运行在计算机上的程序他的职责是运行Java字节码文件作用是为了支持跨平台特性。
功能 装载字节码解释/编译为机器码 管理数据存储和垃圾回收 优化热点代码提升效率
2.构成 类加载子系统从硬盘上加载字节码文件到JVM 运行时方法区按照不同的数据分区存储方法区栈堆本地方法栈程序计数器 执行引擎将字节码再次编译/解释为机器码 本地库接口负责调用本地方法 3.类加载子系统 3.1加载 通过类的全限类名获得此类的二进制字节流 将静态存储转化为运行时存储方法区 在内存中生成该类的class对象
3.2链接
验证检验被加载的字节码是否正确 1.文件格式验证比如文件是否以0xCAFEBABE开头主次版本号是否满足当前Java虚拟机版本要求。 2.元信息验证例如类必须有父类super不能为空。 3.验证程序执行指令的语义比如方法内的指令执行到一半强行跳转到其他方法中去。 4.符号引用验证例如是否访问了其他类中private的方法等。 准备为该类的静态属性分配内存并设置默认值不包括被final修饰,此时会直接赋值因为在编译时就被加载 解析将常量池中二进制的符号引用替换成直接引用符号引用就是在字节码文件中使用编号来访问常量池中 的内容。直接引用不在使用编号而是使用内存中地址进行访问具体的数据。 3.3初始化
为类的静态变量赋初值执行字节码文件中clint部分的字节码指令
3.4类初始化时机 使用类中的静态变量静态方法 创建对象 运行main方法 反射 初始化子类
4.运行时数据区
4.1程序计数器
记录程序执行的位置不会出现内存溢出的情况内存小速度快是线程私有的不会进行垃圾回收
4.2虚拟机栈
一个方法入栈后可以看作是一个栈帧 局部变量表存放方法的参数和局部变量 操作数栈在执行指令时用来存放临时数据的一块区域 返回地址当一个方法执行完毕之后要返回之前调用它的地方因此在栈帧中必须保 存一个方法返回地址。
4.3本地方法栈
存放本地方法线程私有会造成内存溢出不会进行垃圾回收.
本地方法被native修饰的方法没有方法体例如 native hashCode() 内存地址 native getClass(); native Object clone() native void notify(); native void notifyAll(); native void wait(long timeout) FileInputStream native int read0() Thread native void start0(); 4.4堆
存放程序中的对象实例共享线程会内存溢出会进行垃圾回收是JVM管理最大的一块内存空间 分区 为什么分区
根据存活时间的长短进行划分生命较长的对象放在老年代减少垃圾回收次数和扫描频率
对象分区流程 新创建的对象存放在伊甸园区 当垃圾回收时,将伊甸园存活的对象移入到幸存者0区 再次创建的新对象还是在伊甸园区 下一次垃圾回收到来时会将伊甸园区存货的对象和幸存者0存活的对象转至幸存者1区始终保持幸存者区有一个是空的 当一个对象经过15次垃圾回收后仍然存活该对象被移入老年区 当老年代中空间不足无法放入新的对象时先尝试major gc如果还是不足就会触发Full GCFull GC会对整个堆进行垃圾回收。
4.5方法区
在不同的hotspot版本中会使用永久代和元空间来实现主要包括 每一个加载的类的基本信息 运行时常量池保存了字节码文件中的常量池信息 大小可调节并且线程是共享的但会造成内存溢出 5.本地方法接口
底层由非Java代码实现并不提供方法体由于高级语言无法直接访问底层的硬件所以需要调用操作系统提供的接口进行访问。
6.执行引擎
将装载到虚拟机的字节码编译为机器码 前端编译.java----.class 后端编译.class----机器码
6.1解释执行
用一个解释器对代码逐行进行解释一般用于脚本语言效率低但省去了编译时间
6.2编译执行
一次性的对代码进行整体编译编译费时但执行效率高
6.3解释器和JIT编译器 解释器当 Java 虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。 JITJust In Time Compiler编译器就是虚拟机将源代码一次性直接编译成和本地机器平台相关的机器语言但并不是马上执行。
在Java中采用半解释半编译的方式将字节码转化为机器码程序刚开始执行时解释器就会立即执行但在运行过程中会将热点代码编译并缓存二者结合达到一个平衡点
7.JDK6-8内存区域的区别
7.1方法区的实现
使用元空间替换永久代的原因 1、提高内存上限元空间使用的是操作系统内存而不是JVM内存。如果不设置上限只要不超过操作系统内存 上限就可以持续分配。而永久代在堆中可使用的内存上限是有限的。所以使用元空间可以有效减少OOM情况 的出现。 2、优化垃圾回收的策略永久代在堆上垃圾回收机制一般使用老年代的垃圾回收方式不够灵活。使用元空间 之后单独设计了一套适合方法区的垃圾回收机制
7.2字符串常量池的位置
字符串常量池从方法区移动到堆的原因 1、垃圾回收优化字符串常量池的回收逻辑和对象的回收逻辑类似内存不足的情况下如果字符串常量池中的 常量不被使用就可以被回收方法区中的类的元信息回收逻辑更复杂一些。移动到堆之后就可以利用对象的垃圾 回收器对字符串常量池进行回收。 2、让方法区大小更可控一般在项目中类的元信息不会占用特别大的空间所以会给方法区设置一个比较小的 上限。如果字符串常量池在方法区中会让方法区的空间大小变得不可控。 3、intern方法的优化JDK6版本中intern () 方法会把第一次遇到的字符串实例复制到永久代的字符串常量 池中。JDK7及之后版本中由于字符串常量池在堆上就可以进行优化字符串保存在堆上把字符串的引用放入 字符串常量池减少了复制的操作
8.类加载器
类加载器负责在类的加载过程中将字节码信息以流的方式获取并加载到内存中 1.启动类加载器
JDK9之前由C编写JDK9之后由Java编写
2.拓展类加载器
JDK提供的使用Java编写的加载器派生于 ClassLoader 类.
3.应用类加载器
加载我们自己定义的类,用于加载用户类路径(classpath)上所有的类
4.自定义加载器
我们自己写一个类继承ClassLoder再例如tomcat这种容器,都会有自己加载类的加载器重写findClass方法。
9.双亲委派机制
双亲委派机制指的是当一个类加载器接收到加载类的任务时会向上查找是否加载过再由顶向下进行加载。如果上级找不到,就逐级向下委托,使用子级类加载器加载的类,如果都找不到,就报异常了。
作用 保证类加载的正确性避免恶意代码来替代系统类库中的类比如java.lang.String 避免同一个类被重复加载
9.1如何打破
实现自定义类加载器重写findClass()方法将其中双亲委派机制的代码删除
10.垃圾回收
没有任何引用指向的对象一直占用内存空间知道程序结束被保留的空间的无法对其他对象使用严重的会导致内存溢出。早期的垃圾回收c/c程序员手动在程序中对不使用的对象进行删除如果忘记回收会造成内存泄漏
10.1内存溢出和内存泄漏 内存溢出垃圾回收速度跟不上内存占用的速度 内存泄漏对于对象不被使用但GC无法回收的对象导致OOM是内存溢出的原因之一
例如数据库连接 dataSourse.getConnection()网络连接 socket 和 io 连接必须手动 close否则是不能被回收的。
10.2STW
Stop-the-World简称 STW指的是 GC 事件发生过程中会产生应用程序的停顿。当进行垃圾回收时会导致其他用户线程暂停。可达性分析算法中枚举根节点GC Roots会导致所有 Java 执行线程停顿为什么需要停顿所有 Java 执行线程 分析工作必须在一个能确保一致性的快照中进行 一致性指整个分析期间整个执行系统看起来像被冻结在某个时间点上 如果出现分析过程中对象引用关系还在不断变化则分析结果的准确性无法保 证,会出现漏标,错标问题
10.3标记阶段
主要是为了判断对象是否为垃圾对象
算法 引用计数算法被引用时1。缺点单独维护一个计数器增加了内存空间占用会造成循环引用 可达性分析算法以根GCRoots为起点搜索被跟所连接的对象是否可达
10.3.1哪些对象被称之为GC Root对象 线程Thread对象引用线程栈帧中的方法参数、局部变量等。 系统类加载器加载的java.lang.Class对象引用类中的静态变量。 监视器对象用来保存同步锁synchronized关键字持有的对象。 本地方法调用时使用的全局对象
10.3.2finalize方法
回收前调用且只会调用一次在被回收前此方法会执行一些需要的逻辑。由于 finalize()方法的存在虚拟机中的对象一般处于三种可能的状态. 可触及的从根节点开始可以到达这个对象。 可复活的对象的所有引用都被释放但是对象有可能在 finalize()中复活。 不可触及的对象的 finalize()被调用并且没有复活那么就会进入不可触及 状态。 以上 3 种状态中是由于 finalize()方法的存在进行的区分。只有在对象不可触及时才可以被回收
10.4回收阶段 标记-清除算法
概述1.标记阶段将存活对象进行标记使用可达性分析算法寻找所有的存活对象
2.清除删除没有别标记的对象
优点操作简单只需要维护标志位即可无需进行对象的移动
缺点会造成内存碎片化很有可能这些内存单元的大小过小无法进行分配。由于内存碎片的存在需要维护一个空闲链表极有可能发生每次需要遍历到链表的最后才能获得合适的内存空间。
标记-复制算法
概述准备两块空间From和To在对象分配期间只使用其中一块空间GC阶段将From存活的对象复制到To中再将两块空间名字互换
优点不会造成内碎片只需遍历一次性能较好
缺点会进行对象的移动只有一半的空间来创建对象使用
标记-压缩算法
概述1.标记阶段将所有的存活对象的进行标记使用可达性分析算法寻找所有的存活对象
2.整理阶段将存活的对象移动到堆的一端
优点内存利用率高不会出现碎片化
缺点造成对象移动要选择合适的压缩算法
分区收集 分代回收时创建出来的对象首先会被放入Eden伊甸园区。 随着对象在Eden区越来越多如果Eden区满新创建的对象已经无法放入就会触发年轻代的GC称为Minor GC或者Young GC。Minor GC会把需要eden中和From需要回收的对象回收把没有回收的对象放入To区 如果Minor GC后对象的年龄达到阈值最大15默认值和垃圾回收器有关对象就会被晋升至老年代。当老年代中空间不足无法放入新的对象时先尝试minor gc如果还是不足就会触发Full GCFull GC会对整个堆进行垃圾回收。 如果Full GC依然无法回收掉老年代的对象那么当对象继续放入老年代时就会抛出Out Of Memory异常。
11.垃圾回收器 11.1SerialSerialOld
Serial是是一种单线程串行回收年轻代的垃圾回收器。
11.2Parallel ScavengeParallel Old
PSPO是JDK8默认的垃圾回收器多线程并行回收关注的是系统的吞吐量。具备自动调整堆内存大小的特点。
11.3ParNew
ParNew垃圾回收器本质上是对Serial在多CPU下的优化使用多线程进行垃圾回收
11.4CMS老年代
CMS垃圾回收器关注的是系统的暂停时间允许用户线程和垃圾回收线程在某些步骤中同时执行减少了用户线程的等待时间。 优点停顿时间少
缺点使用标记-清除算法造成内存碎片较多
11.5G1
将每个区域(伊甸园,幸存者,老年代)又划分成若干个小的区域,哪个区域垃圾数量多,优先回收哪个区域,可以做到整堆管理收集也可以做到并发执行
未完待续...... 文章转载自: http://www.morning.lbbyx.cn.gov.cn.lbbyx.cn http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.ysllp.cn.gov.cn.ysllp.cn http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn http://www.morning.zydr.cn.gov.cn.zydr.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.zqkr.cn.gov.cn.zqkr.cn http://www.morning.cbchz.cn.gov.cn.cbchz.cn http://www.morning.blbys.cn.gov.cn.blbys.cn http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.dmtld.cn.gov.cn.dmtld.cn http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn http://www.morning.xrqkm.cn.gov.cn.xrqkm.cn http://www.morning.njpny.cn.gov.cn.njpny.cn http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn http://www.morning.jkbqs.cn.gov.cn.jkbqs.cn http://www.morning.yqndr.cn.gov.cn.yqndr.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.kpygy.cn.gov.cn.kpygy.cn http://www.morning.lskyz.cn.gov.cn.lskyz.cn http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.ptslx.cn.gov.cn.ptslx.cn http://www.morning.ptzbg.cn.gov.cn.ptzbg.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn http://www.morning.yqlrq.cn.gov.cn.yqlrq.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.wcgcm.cn.gov.cn.wcgcm.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.lsnnc.cn.gov.cn.lsnnc.cn http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.gnjkn.cn.gov.cn.gnjkn.cn http://www.morning.ctqlq.cn.gov.cn.ctqlq.cn http://www.morning.nwjd.cn.gov.cn.nwjd.cn http://www.morning.dycbp.cn.gov.cn.dycbp.cn http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.npkrm.cn.gov.cn.npkrm.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.phcqk.cn.gov.cn.phcqk.cn http://www.morning.ntqgz.cn.gov.cn.ntqgz.cn http://www.morning.pzdxg.cn.gov.cn.pzdxg.cn http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn http://www.morning.wmcng.cn.gov.cn.wmcng.cn http://www.morning.kkdbz.cn.gov.cn.kkdbz.cn http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn http://www.morning.lkmks.cn.gov.cn.lkmks.cn http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.slqgl.cn.gov.cn.slqgl.cn http://www.morning.weitao0415.cn.gov.cn.weitao0415.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.pgfkl.cn.gov.cn.pgfkl.cn http://www.morning.ctfh.cn.gov.cn.ctfh.cn http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn http://www.morning.zpfr.cn.gov.cn.zpfr.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.gynls.cn.gov.cn.gynls.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.xcszl.cn.gov.cn.xcszl.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.jlmrx.cn.gov.cn.jlmrx.cn