JVM
Minor GC
虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间
当Eden区满时,触发Minor GC
1、如果大于的话,直接执行minorGC
2、如果小于,判断是否开启HandlerPromotionFailure,没有开启直接FullGC
3、如果开启了HanlerPromotionFailure, JVM会判断老年代的最大连续内存空间是否大于历次晋升的大小,如果小于直接执行FullGC
4、如果大于的话,执行minorGC
Full GC


如何进入老年代

GCroot有哪些

引用

类加载机制
类加载器的本质其实就是通过文件操作扫描到应用classpath下的Jar包,然后读取Jar包里的class文件,经过解析,校验
等等一堆乱七八糟的操作之后,再将文件里的字节码内容加载到内存里,供后面类实例化为对象使用,实例化对象的时候
会根据已加载的类信息去做分配内存,初始化成员变量等等一些工作。
打破双亲委派模型tomcat
https://www.cnblogs.com/june0816/p/10090428.html
静态内部类会被编译成几个class?为什么内部类可以访问外部类的private的方法?
1 内部类对象的创建依赖于外部类对象;
2 内部类对象持有指向外部类对象的引用。
linkedhashmap实现LRU
内存泄漏例子

java中的内存泄露问题,如何出现?如何解决?
OOM的原因及排查方法
CPU占满原因及排查
https://blog.csdn.net/qq_34944965/article/details/81107419
垃圾回收器 CMS G1
CMS 初始标记 并发标记 重新标记
3.对CPU资源敏感,CMS默认启动的回收线程数是(cpu数量+3)/4。所以CPU数量少会导致用户程序执行速度降低较多。
初始标记(GC直接引用)并发标记(全引用图)重新标记(修正并发标记期间, 因用户程序继续运作而导致标记产生变动的那一部分对象的 )
1.浮动垃圾:由于CMS并发清理阶段用户线程还在运行着,伴随程序运行自然会有新垃圾产生,这部分垃圾得标记过程之后,所以CMS无法在当收集中处理掉他们,只好留待下一次GC清理掉,这一部分垃圾称为浮动垃圾。在jdk1.5默认设置下,CMS收集器当老年代使用了68%的空间就会被激活,可以通过-XX:CMSInitialOccupancyFraction的值来提高触发百分比,在jdk1.6中CMS启动阈值提升到了92%,要是CMS运行期间预留的内存无法满足程序的需要,就会出现”Concurrent Mode Failure“,然后降级临时启用Serial Old收集器进行老年代的垃圾收集,这样停顿时间就很长了,所以-XX:CMSInitialOccupancyFraction设置太高容易导致大量”Concurrent Mode Failure“。
2.有空间碎片:CMS是一款基于“标记-清除”算法实现的,所以会产生空间碎片。为了解决这个问题,CMS提供了-XX:UseCMSCompactAtFullCollection开发参数用于开启内存碎片的合并整理,由于内存整理是无法并行的,所以停顿时间会变长。还有-XX:CMSFullGCBeforeCompaction,这个参数用于设置多少次不压缩Full GC后,跟着来一次带压缩的(默认为0)。
G1(分Region)

缺点
![]()
缓存一致性
modified(修改):缓存块已经被修改,必须被写回主存,其他处理器不能再缓存这个块
exclusive(互斥):缓存块还没有被修改,且其他处理器不能装入这个缓存块
share(共享):缓存块未被修改,且其他处理器可以装入这个缓存块
invalid(无效):缓存块中的数据无效

手撕一个阻塞队列,生产者生产0~100的随机数,消费者消费后将其存储到一个list,需要保持list中元素保持递增。(信号量+线程安全)
posted on 2020-04-01 00:14 huangzhihao 阅读(147) 评论(0) 收藏 举报
浙公网安备 33010602011771号