15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 学习笔记-(java虚拟机)

学习笔记-(java虚拟机)

时间:2023-06-26 03:09:01 | 来源:网站运营

时间:2023-06-26 03:09:01 来源:网站运营

学习笔记-(java虚拟机):

JVM定义及作用:

JVM是java Virtual Machine (java 虚拟机),是一个虚拟计算机,也是java程序是爱杭州跨平台的基础。其作用是加载Java程序,将字节码翻译成机器码再交给CPU执行的虚拟计算机。

JVM的主要组成:

工作流程:

首先程序在执行前将java代码(.java)转变成字节码(.class),JVM通过;类加载器将字节码加载到内存中,由于字节码文件是JVM的一套指令集规范,并不能直接交给底层操作系统执行,因此需要特定的命令解析器执行引擎将字节码翻译成底层的机器码,再交给CPU执行,CPU执行过程中需要调用本地库接口来完成整个程序的运行。

JVM的内存布局:

不同的虚拟机存在不同,但都会遵循java虚拟机规范。java 8虚拟机规范规定,内存布局包括以下几个区域:

1.程序计数器

记录正在执行的虚拟机字节码指令的地址(如果正在执行的是native方法,该计数器的值为undefined)。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

线程私有。由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存储。

2.java虚拟机栈

每个java方法在执行的同时会创建一个栈帧用来存储局部变量表、操作数栈、动态链接、方法出口等信息。从方法调用直至执行完成的过程,对应着一个栈帧在java虚拟机栈中入栈和出栈的过程。线程私有,生命周期与线程相同。

该区域有两种异常:

3.本地方法栈

类似于java虚拟机栈,区别是本地方法栈服务于本地方法。

4.java堆

java堆是java虚拟机中内存最大的一块。在虚拟机启动时创建,被所有线程共享。

存放对象实例。垃圾收集器主要管理的就是java堆。

现在的垃圾收集器基本采用分代收集算法,主要思想是针对不同类型的对象采取不同的垃圾回收算法,java堆可以分为两块:

动态扩展内存失败会抛出OutOfMemoryError异常。

5.方法区

被所有线程共享,用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等信息。

动态扩展内存失败会抛出OutOfMemoryError异常。

运行时常量池是方法区的一部分。保存Class文件中的符号引用、翻译出来的直接引用。

垃圾收集

垃圾收集主要针对java堆和方法区。

1.判断一个对象是否可被回收

2.java的4中引用方式

3.垃圾回收算法

垃圾收集器

Minor GC 和Full GC:

Full GC的触发条件

  1. 调用System.gc():不建议使用
  2. 老年代空间不足
  3. 空间分配担保失败
  4. JDK1.7及之前的永久代空间不足
  5. Concurrent Mode Failure (CMS GC工程中老年代空间不足)

内存分配策略

  1. 对象优先在Eden分配
  2. 大对象直接进入老年代
  3. 长期存活的对象进入老年代
  4. 动态对象年龄判定:在Survivor中相同年龄所有对象总和大于Survivor空间的一半,则年龄大于等于该年龄的对象直接进入老年代。
  5. 空间分配担保:在发生Minor GC之前,虚拟机先检查老年代最大可用连续空间是否大于新生代所有对象总空间,如果条件成立,Minor GC确认安全;如果不成立,虚拟机查看HandlePromotionFailure的值是否允许担保失败,如果允许继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于尝试进行Minor GC;如果小于或不允许冒险,就进行Full GC。

类加载器

类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。

类加载过程包括加载、验证、准备、解析、初始化这5个阶段。

1.加载

2.验证

确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会威海虚拟机的安全。

3.准备

4.解析

虚拟机将常量池中的符号引用替换为直接引用。

5.初始化

开始执行类中定义的java程序代码。初始化阶段是虚拟机执行类构造器<clinit>()方法的过程。

双亲委派模型

如果一个类加载器收到一个类加载的请求,首先将类加载请求转发到父类加载器,只有当父类加载器无法完成时才尝试自己加载。

java内存模型

并发注意操作的原子性、可见性、有序性。

volatile

关键字volatile是java虚拟机提供的最轻量级的同步机制。

happens-before(先行发生原则)

这个原则是判断数据是否存在竞争、线程是否安全的主要依据。先行发生是 Java 内存模型中定义的两项操作之间的偏序关系

java线程

线程状态转换

参考资料:



关键词:虚拟,笔记,学习

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭