- 博客(7)
- 收藏
- 关注
原创 对象是否存活和引用分类
垃圾收集器所关注的内存是java堆,和方法区 1、判断对象是否存活? 1)引用计数法:给对象添加一个计数器,当有一个地方引用它就计数器加1,当引用失效计数器减1,当计数器为0表示这个对象不能再被使用,引用计数法实现简单但是他很难解决对象之间互相循环引用的问题 2)可达性分析算法:这个算法的基本思想是通过一系列的GCRoot对象做为起始点,从这些节点开始向下搜索,搜索所走过的路径就称为引用链,...
2018-09-08 14:29:12 325
原创 OOM
1、除了程序计数器外,java虚拟机栈 本地方法栈 java堆 方法区都会产生内存溢出异常 2、那么为什么会产生内存溢出,怎么检测,内存溢出怎么办 Java堆异常 1、原因:对象占用空间达到最大堆的容量限制就会产OOM 2、异常栈信息:“java.lang.OutOfMemoryError”后面会提示“Java heap space” 3、怎么处理:  ...
2018-09-08 14:22:42 377
原创 JVM运行时数据区域划分
1、分为5个区域,分别是程序计数器,虚拟机栈,本地方法栈,还有堆和方法区 2、他们各自有什么特点,存放什么数据 1)堆和方法区是所有线程共享的区域而程序计数器,虚拟机栈,本地方法栈是线程私有的 2)接下来讲他们自己的存储的什么数据 a/程序计数器是一块较小的内存空间,他的作用相当于当前线程的所执行字节码的行号指示器,如果当前线程执行的是本地方法那么程序计数器的值为空 b/...
2018-09-08 14:21:51 224
原创 JVM对象创建过程
问题:在语言层面,通过new一个关键字就可以创建一个对象,那么在底层jvm是如何进行一个对象的创的?? 1)首先程序计数器在收到这个new得到指令时候,先到方法区的常量池检查有没有这个类的符号引用,然后检查类是否加载解析初始化过没有就进行类加载 2)类加载完成后,JVM就要在java堆上为对象分配内存,这个内存大小是在类加载的时候就确定的,从java堆中分配内存有两种方式一个指针碰撞,一个空闲...
2018-09-08 14:21:01 1378
原创 垃圾收集算法
1、垃圾回收主要发生在java堆和方法区,一般java堆的对象被分为新生代和老年代,方法区的数据被称为永久代 2、永久代主要回收:废弃常量和无用的类,那么一个类被判定位无用的类要满足3个条件 1)该类的所有的实例都被回收 2)加载该类的classLoader也被回收 3)该类对应的java.lang.Class对象没有在任何地方被引用,无法通过反射访问该类的方法 ...
2018-09-08 14:19:40 143
原创 类加载
1.1 加载 加载主要是将.class文件(并不一定是.class。可以是ZIP包,网络中获取)中的二进制字节流读入到JVM中。 在加载阶段,JVM需要完成3件事: 1)通过类的全限定名获取该类的二进制字节流; 2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构; 3)在内存中生成一个该类的java.lang.Class对象,作为...
2018-09-08 14:18:25 126
原创 G1垃圾收集器&CMS收集器
G1是一款面向服务端的垃圾收集器,他的特点 1)并行并发,并行是指G1利用服务端多核优势缩短stop the world的时间,并发是指G1可以使GC线程和用户线程并发执行 2)分代收集,G1虽然还保存分代收集概念,但是G1 可以管理整个java堆不需要其他收集器配合 3)空间整合:从总体看G1是采用标记清除算法,局部看是采用复制算法,这样就不会产生内存碎片 4)可预测停顿:G1和CMS相...
2018-09-08 14:14:06 491
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人