java基础--虚拟机

2018-04-10  本文已影响0人  不疯魔丶不成活z

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)虚引用 和没有引用一样,必须与引用队列一起使用。可以用于跟踪对象是否被回收。

上一篇 下一篇

猜你喜欢

热点阅读