java虚拟机体系结构 方法区 堆 java虚拟机栈 本地方法栈
方法区 java虚拟机编译的class文件中二进制数据类型解析数据存在方法区中 是全部线程共享
和存在数据的线程安全问题 当二个线程使用同一类而且类还被加载 则让一个线程加载 另外一个
线程等待
java虚拟机栈 是线程私有的 既决定了线程的个数 存放的变量 对象引用
堆 是全部线程所共享 存放的是全部的对象 涉及到多线程的并发 对象的引用 直接引用 使用句柄引用
直接内存不是java虚拟机的一部分 加快GC的垃圾回收 但直接内存出现内存溢出还难排除
java虚拟机的加载机制 双亲委派模式 根类加载器 扩展类加载器 应用类加载器 分支 用户自定义加载器 扩展类加载器 应用类加载器会先加载jdk的源码包 而后是用户自定义的包 好比java.lang.String自定义的类永远不会被加载
gc的垃圾收集算法
1.引用计数算法 肯定不能处理循环引用的对象
2.标记清除算法 先将须要清除的标记出来而后进行清除 会产生不少的内存碎片
3.复制算法 先将内存分为2半 将须要清除的放入另外一半中 浪费空间
4.标记整理算法 是结合了标记清除和复制算法的各自的优势 先将须要清除的标记而且整理在一旁
既不会浪费内存也不会产生内存碎片
5.分代收集算法 根据对象的不一样生命周期采用不一样的算法