jvm
珍惜时间简单生活
这个作者很懒,什么都没留下…
展开
-
GC收集器有哪些?CMS收集器与G1收集器的特点。
1)串行的,也就是采用单线程(比较老了),分类:serial new(收集年轻代,复制算法)和serial old(收集老年代,标记整理),缺点:单线程,进行垃圾回收时暂时所有的用户线程。优点:实现简单。(2)并行的,采用多线程,对于年轻代有两个: parallel new(简称ParNew)(参考serial new的多线程版本)和parallel scavenge;parallel sca...原创 2018-07-24 20:18:07 · 6917 阅读 · 0 评论 -
Minor GC与Full GC分别在什么时候发生?
首先区分一下Minor GC和Full GC。 Minor GC是新生代GC,指的是发生在新生代的垃圾收集动作。由于java对象大都是朝生夕死的,所以Minor GC非常平凡,一般回收速度也比较i快。 Major GC/Full GC 是老年代GC,指的是发生在老年代的GC,出现Major GC一般经常会伴有Minor GC,Major GC的速度比Minor GC慢的多。 何时发生? ...原创 2018-07-24 20:19:57 · 10114 阅读 · 2 评论 -
GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,优化收集方法的思路
面试java中,jvm中的垃圾收集算法一般都会问一下,下面来总结一下这个经常提到的问题。 第一种:标记清除 它是最基础的收集算法。 原理:分为标记和清除两个阶段:首先标记出所有的需要回收的对象,在标记完成以后统一回收所有被标记的对象。 特点:(1)效率问题,标记和清除的效率都不高;(2)空间的问题,标记清除以后会产生大量不连续的空间碎片,空间碎片太多可能会导致程序运行过程需要分配较...原创 2018-07-22 20:46:23 · 30589 阅读 · 17 评论 -
JVM:对象的创建
在使用java编程的过程中,肯定会经常性的创建对象,在语言层面上,一般只需要直接new出对象即可。但是在java虚拟机中是由一套完整的流程的。1.当虚拟机遇到一个new指令的时候,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有必须先执行相应的类加载过程; (类加载过程分为五步:加载、验证、准备,解析和初始化)...原创 2018-09-05 16:19:19 · 212 阅读 · 0 评论 -
JVM:对象是否存活的算法
一般判断对象是否存活有两种方法,一种是引用计数法,另一种是可达性分析法1.引用计数法 核心思想:给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1;当引用失效时候,计数器值就减1。任何计数器为0的对象就是不可能在被使用的。 优势:引用计数法的实现简单,判定效率高。 缺点:很难解决对象之间相互循环引用的问题。2.可达性分析法 核心思想:通过一系列的称为 GC Roo...原创 2018-09-05 17:30:08 · 263 阅读 · 0 评论 -
什么是乐观锁和悲观锁
1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别...原创 2018-10-01 17:07:07 · 8987 阅读 · 0 评论 -
多线程中总内存和线程的工作内存
Java内存模型将内存分为了 主内存和工作内存 。类的状态,也就是类之间共享的变量,是存储在主内存中的,每个线程都有一个自己的工作内存(相当于CPU高级缓冲区,这么做的目的还是在于进一步缩小存储系统与CPU之间速度的差异,提高性能),每次Java线程用到这些主内存中的变量的时候,会读一次主内存中的变量,并让这些内存在自己的工作内存中有一份拷贝,运行自己线程代码的时候,用到这些变量,操作的都是自己...原创 2018-10-01 17:11:42 · 4489 阅读 · 1 评论 -
什么是CAS
CAS,全称为Compare and Set,即比较-设置。假设有三个操作数: 内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返回false 。当然CAS一定要volatile变量配合,这样才能保证每次拿到的变量是主内存中最新的那个值,否则旧的预期值A对某条线程来说,永远是一个不会变的值A,只要某次CAS操作失败,永远都...原创 2018-10-01 17:12:49 · 333 阅读 · 0 评论