一.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个内存空间:(很是重要)