- 博客(8)
- 收藏
- 关注
原创 并发编程之CAS
CAS(Campare And Swap,比较并交换),通常指一种原子操作:针对一个变量,首先比较它的内存值与期望值是否相同,相同就给它赋一个新值。上面的伪代码描述了一个由比较和复制的两个阶段组成的复合操作,实际上,CAS可以看成是他们的一个整合体,一个不可分割的原子操作,由硬件层面来保障原子性。CAS可以看做是乐观锁的一种实现,我们Java中的原子中的递增操作就通过CAS自旋实现的。CAS是一种无锁算法,在没锁的情况下,也就是不阻塞线程的情况下,实现多线程之间的变量同步。
2022-11-11 00:49:37
430
原创 并发编程之深入理解Java线程
join可以理解成是线程合并,当在一个线程调用另一个线程的join方法时,当前线程阻塞等待被调用join方法的线程执行完毕才能继续执行,所以join的好处能够保证线程的执行顺序,但是如果调用线程的join方法其实已经失去了并行的意义,虽然存在多个线程,但是本质上还是串行的,最后join的实现其实是基于等待通知机制的。线程执行时间系统可控,也不会有一个线程导致整个进程阻塞。:是指线程之间所具有的的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。
2022-10-30 00:46:45
794
原创 并发编程之深入理解JMM&并发三大特性
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。
2022-10-29 22:25:06
467
原创 05-JVM调优实战
这个因为之前已经大概知道Young GC的频率,假设是每5分钟一次,那么可以执行命令 jstat -gc pid 300000 10 ,观察每次结果eden,survivor和老年代使用的变化情况,在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出老年代对象增长速率。在编译期其字符串常量的值就确定下来,故上面程序最终的结果都为true。
2022-10-19 23:58:21
210
原创 04-垃圾收集器
而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。
2022-10-04 20:08:46
854
原创 01-JVM类加载机制
Tomcat打破双亲委派机制 Tomcat是个WEB容器,主要解决一下几个问题: 1、一个WEB容器可能会部署多个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个程序都是独立的,保证相互隔离。 2、部署在同一个web容器中的相同类库的相同版本可以共享。否则若部署多个程序,那么会有多个相同的类库加载进虚拟机。 3、web容器也有自己的类库,不能与应用程序类库混淆。基于安全考虑,应该让容器的类库和应用程序的类库隔离开。 4、JSP文件最终也
2022-10-01 12:12:15
131
原创 02-JVM整体结构深度解析
显然,本机直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,则肯定还是会受到本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现。Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩展来实现的(通过参数-Xmx和-Xms设定)。
2022-09-30 22:07:53
471
原创 03-JVM内存分配机制详解
大量对象创建在Eden区,等Eden区满了后,会触发Minor GC,其中99%的对象会被回收掉,剩余存活的对象会进入到一块有空间的Survivor区。一般来说Java对象都是在堆上分配的,当对象没有引用时,需要GC进行回收,如果对象数量较多,回收会有一定的压力,也间接影响性能。给对象添加一个计数器,每当有一个对象引用它时,计数器就加1,当引用失效,计数器减1,当计数器归0时,就表示这个对象没有任何引用,可以回收。堆中存放着几乎所有对象的实例,对堆进行垃圾回收,首先就要判断哪些对象已死亡。
2022-09-28 23:09:04
937
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人