jvm
gsub
简简单单,开心就好
展开
-
jvm8 GC垃圾收集器以及特点
作用于新生代的收集器 1.Serial收集器 特点: 1.单线程收集器; 2.新生代采用复制算法进行垃圾收集; 3.stop the world:它工作时,必须暂停其他所有的工作线程; 4.对于运行在client模式的虚拟机来说是一个好的选择; 5.可以和SerialOld(MSC)或者CMS收集器组合使用。 2.ParNew收集器 特点: 1.多线程收集器; 2.新生代采用复制算法进行垃圾收集...原创 2019-05-24 16:42:24 · 511 阅读 · 0 评论 -
jvm7 对象相关(创建过程,创建方法,内存布局,访问定位)
一. java对象的创建方法 第一种:通过new语句创建对象; 第二种:通过调用对象的clone()方法克隆对象; 第三种:通过反射手段,使用Class.forName().newInstance()创建对象; 第四种:通过反序列化手段,使用java.io.ObjectInputStream对象的readObject()方法创建对象。 扩展: 1.被克隆的类要实现了Cloneable接口;2.被克...原创 2019-05-24 11:24:24 · 145 阅读 · 0 评论 -
jvm6 jvm的内存分配和回收策略
1.作用 第一个作用:给对象分配内存 第二个作用:回收分配给对象的内存 2.怎么给对象分配内存 第一个问题:在哪里给对象分配内存: 主要是在java堆上分配 第二个问题:怎么在java堆上给对象分配内存 java堆主要分为两个部分:新生代和老年代,新生代又分为Eden区,From Survivor区,To Survivor区 分配的原则是: 1.对象优先在Eden分配(当Eden区没有足够的空间进...原创 2019-05-23 22:36:53 · 108 阅读 · 0 评论 -
jvm5 如何判断对象是不是垃圾?
1.如何判断对象是不是垃圾? 引用计数算法和对象可达性分析算法。 2.引用计数算法? 第一步:给对象中添加一个引用计数器; 第二步:每当有一个地方引用它,计数器的值加1; 第三步:每当引用失效时,计数器的值减1; 第四步:计数器为0的对象就是垃圾 缺点 无法解决对象之间循环调用的问题 3.对象可达性分析算法? 第一步:通过一系列的称为“GC Roots”的对象作为起点; 第二步:从这些对象开始向下...原创 2019-05-23 11:05:14 · 437 阅读 · 0 评论 -
jvm4 jvm的垃圾回收算法
垃圾收集算法第一种:标记-清除算法 第一步:标记出所有需要回收的对象(类比删除:记录所有删除的数据) 第二步:在标记完成后统一回收被标记的对象(类比删除:数组没有多余内存存储数据时,全部清除) 缺点: 1.标记和清除效率都很低(时间问题); 2.会产生很多不连续的内存碎片(空间问题),导致以后需要较大内存时,无法找到足够的连续空间而不得不提前触发垃圾收集动作 垃圾收集算法第二种:复制算法(解决时间...原创 2019-05-23 09:13:21 · 90 阅读 · 0 评论 -
算法基本知识1------数组
1.定义 1.数组是一种***线性表***(只有前后位置关系)数据结构; 2.他用一组***连续的内存空间***存储一组***相同类型的数据*** 2.数组和链表的区别 链表适合插入和删除,时间复杂度是O(1); 数组适合***随机访问***,根据下标随机访问的时间复杂度是O(1) 3.数组数据删除的优化 若删除末尾元素,没有数据的移动,时间复杂度O(1); 若删除开头元素,删除之后,所有的数据都...原创 2019-05-22 22:13:33 · 115 阅读 · 0 评论 -
jvm2:jvm的内存布局/内存模型(需要详细到每个区放什么)
运行时数据区存储了哪些数据? a) 程序计数器(PC寄存器) 由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。因此,可以这么说,程序计数器是每个线程所私...原创 2019-05-16 22:12:38 · 744 阅读 · 0 评论 -
jvm10 多线程和并发问题
一.什么是缓存一致性问题?应该怎么解决? 为了解决处理器和内存读写速度相差很大的问题,在它们之间加入了一个缓冲:高速缓存; 运算过程: 当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存中,那么CPU进行运算时就可以直接从他的高速缓存读取数据和向其中写入数据,当运算结束后,再将高速缓存中的数据刷新到主内存中。 缓存一致性问题: 在多处理器系统中,每个处理器都有自己的高速缓存; ...原创 2019-05-25 17:11:12 · 183 阅读 · 0 评论 -
jvm3 java类加载机制
一个java文件从编码到完成到最终执行包含两个过程: 编译 就是把java文件通过javac命令编译成字节码文件,也就是class文件; 运行 就是把class文件交给java虚拟机执行。 类加载机制 jvm把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可被虚拟机直接使用的java类型,这就是java的类加载机制。 类加载过程 类加载的过程主要分为三个部分:...原创 2019-05-21 21:10:13 · 102 阅读 · 0 评论 -
jvm1:内存泄漏和内存溢出
1.定义 内存泄漏是指一个不再被程序使用的对象或者变量还在内存中占有存储空间。 内存溢出是指在程序执行过程中无法申请到足够的内存而导致的一种错误。 2.发生的情况 内存泄漏主要有两种情况:一是堆中申请的空间没有被释放,二是对象已经不再被使用,但还仍然在内存中保留着。 内存溢出的情况: 除了程序计数器,虚拟机内存中的其它几个运行时区域都有发生oom异常的可能 1.虚拟机栈和本地方法栈溢出 如 果线程...原创 2019-05-16 14:46:01 · 357 阅读 · 0 评论 -
jvm9 双亲委派模型
1.双亲委派模型 双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应该有自己的父类加载器。 2.双亲委派模型的工作过程: 第一步:一个类加载器收到了类加载的请求; 第二步:它自己不会尝试去加载这个类,二是将这个请求委派给父类加载器去完成; 第三步:每一个层次的类加载器都是委派给父类加载器去完成,直到顶层的启动类加载器; 第四步:直到父类加载器反馈自己无法完成这个加载过程时(搜索范围没有...原创 2019-05-24 20:57:27 · 150 阅读 · 0 评论 -
类加载机制
虚拟机把描述类的数据从class文件加载到内存,并且对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 类的生命周期:加载,连接(验证,准备,解析),初始化,使用,卸载。 其中解析阶段的顺序不一致,她在某些情况下可以初始化之后再解析。 加载阶段发生的事情: 3.1 通过一个类的全限定名来获取定义此类的二进制字节流。 3.2 将这个字节流所代表...原创 2019-08-06 17:34:14 · 136 阅读 · 0 评论