美文网首页
java基础--虚拟机

java基础--虚拟机

作者: 不疯魔丶不成活z | 来源:发表于2018-04-10 14:20 被阅读0次

    1.JDK

     Java程序开发的最小环境 ---

      1)Java 开发工具

      2)Java 虚拟机 JVM

      3)Java API 类库

    JER

      Java程序执行的标准环境

      1)Java 核心类库

      2)Java 虚拟机

    2.JAVA虚拟机

      栈区 堆区 方法区 本地方法栈  (程序计数器 运行时常量池 直接内存)

      程序计数器(私有):当前线程所执行的字节码的行号指示器

      虚拟机栈(私有):用于支持虚拟机进行方法调用和方法执行的数据结构 存放方法参数和方法内部定义的局部变量  局部变量表 操作数栈 动态链接(指向运行时常量池的引用) 方法返回地址

      本地方法栈:虚拟机栈为虚拟机执行的java方法服务,本地是为本地使用的本地操作系统服务

      java堆:对象实例和数组

      方法区:存储已经被虚拟机加载的类信息 常量 静态变量

      堆区又分为新生代和老生代  新生代分伊甸园区 两个幸存区  伊甸园区内存分配比较大 两个幸存区较小 8:1:1

      JVM的优化

    3.Java历史版本特性

      JavaSE5:泛型 增强循环 自动装箱与拆箱 枚举类 可变参数

      JavaSE8 Lambda表达式 函数式接口

    4.GC垃圾收集算法(堆)

      确定垃圾的算法:引用计数法 可达性分析法

      标记-清除算法 标记-整理算法 复制算法 分代收集算法

      标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想。标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。它的主要缺点:①.标记和清除过程效率不高 。②.标记清除之后会产生大量不连续的内存碎片。

      标记整理,标记操作和“标记-清除”算法一致,后续操作不只是直接清理对象,而是在清理无用对象完成后让所有存活的对象都向一端移动,并更新引用其对象的指针。主要缺点:在标记-清除的基础上还需进行对象的移动,成本相对较高,好处则是不会产生内存碎片。

      复制算法,它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次理掉。这样使得每次都是对其中的一块进行内存回收,不会产生碎片等情况,只要移动堆订的指针,按顺序分配内存即可,实现简单,运行高效。主要缺点:内存缩小为原来的一半。

    5.类加载器

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被Java虚拟机直接使用的Java类型,这就是虚拟机的类加载机制

    类加载的全过程,加载,验证,准备,解析和初始化这五个阶段

      类加载器实现了类的加载动作,同时唯一标示类

      双亲委派模型

    6.内存泄漏和内存溢出

        内存泄漏是指分配的内存没有被回收回来

        内存溢出是程序所需要的内存超出了系统所能分配的内存的上限

    7.GC的两种判定方法  引用计数和引用链

    8.volatile

        volatile是Java虚拟机提供的最轻量级的同步机制。当一个变量被定义成volatile之后,具备两种特性:

        1)保证此变量对所有线程的可见性。当一条线程修改了这个变量的值,新值对于其他线程是可以立即得知的。而普通变量做不到这一点。

        2)禁止指令重排序优化。普通变量仅仅能保证在该方法执行过程中,得到正确结果,但是不保证程序代码的执行顺序。

    9.Java中的四种引用

      1)强引用 永远不会被垃圾回收器删除

      2)软引用 内存不足时进行回收。可以做缓存用

      3)弱引用 只要发现就进行回收。可以做缓存、存储元数据、大数据等用

      4)虚引用 和没有引用一样,必须与引用队列一起使用。可以用于跟踪对象是否被回收。

    相关文章

      网友评论

          本文标题:java基础--虚拟机

          本文链接:https://www.haomeiwen.com/subject/gatnhftx.html