jvm学习

一.1.Java语言规范定义了什么是Java语言java

    2.java语言与jvm相对独立缓存

    3.jvm主要定义二进制class文件和jvm指令集jvm

VM指令集
类型转化
l2i  
出栈入栈操做
aload  astore
运算
iadd  isub
流程控制
ifeq ifne
函数调用
invokevirtual invokeinterface  invokespecial  invokestatic函数

二.Java引用的四种状态:spa

强引用:.net

        1.new一个Object存放在堆内存,而后用一个引用指向它,这就是强引用。线程

  若是一个对象具备强引用,那垃圾回收器毫不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具备强引用的对象来解决内存不足的问题。对象

软引用:blog

  2.若是一个对象只具备软引用,则内存空间足够时,垃圾回收器就不会回收它;若是内存空间不足了,就会回收这些对象的内存。(备注:若是内存不足,随时有可能被回收。)生命周期

  只要垃圾回收器没有回收它,该对象就能够被程序使用。软引用可用来实现内存敏感的高速缓存。

弱引用:

  3弱引用与软引用的区别在于:只具备弱引用的对象拥有更短暂的生命周期

  每次执行GC的时候,一旦发现了只具备弱引用的对象,无论当前内存空间足够与否,都会回收它的内存。不过,因为垃圾回收器是一个优先级很低的线程,所以不必定会很快发现那些只具备弱引用的对象

虚引用:

  4.“虚引用”顾名思义,就是形同虚设,与其余几种引用都不一样,虚引用并不会决定对象的生命周期。若是一个对象仅持有虚引用,那么它就和没有任何引用同样,在任什么时候候均可能被垃圾回收器回收

  虚引用主要用来跟踪对象被垃圾回收器回收的活动。

注:关于各类引用的详解,能够参考这篇博客:

http://zhangjunhd.blog.51cto.com/113473/53092

三.

Java中的内存划分:

Java程序在运行时,须要在内存中的分配空间。为了提升运算效率,就对数据进行了不一样空间的划分,由于每一片区域都有特定的处理数据方式和内存管理方式。

jvm运行时的状态,具体划分为以下5个内存空间:(很是重要

  • 程序计数器:保证线程切换后能恢复到原来的执行位置
  • 虚拟机栈:(栈内存)为虚拟机执行java方法服务:方法被调用时建立栈帧-->局部变量表->局部变量、对象引用
  • 本地方法栈:为虚拟机执使用到的Native方法服务
  • 堆内存:存放全部new出来的东西
  • 方法区:存储被虚拟机加载的类信息、常量、静态常量、静态方法等。
  • 运行时常量池(方法区的一部分)
相关文章
相关标签/搜索