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