![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 65
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
JVM之垃圾回收
1. 三种垃圾回收算法1.1 标记清除先沿着GC Root对象的引用链进行标记,然后清除未被标记的对象 CMS就是采用这种回收算法(除了它几乎没别的垃圾回收器采用这种算法了) 会产生内存碎片。1.2 标记整理比标记清除多了整理的动作,将存活的对象向一端移动,避免内存碎片产生。 肯定会比标记清除慢点1.3 标记复制将内存分为两个空间,垃圾回收时将一个空间的存活对象复制到另一个空间中。 确定是空间利用率会低一点 年轻代的垃圾回收都是采用标记复制。2. GC的分类注意,GC这里原创 2021-10-10 13:14:43 · 55 阅读 · 0 评论 -
Java虚拟机常见参数
1. 内存配置参数1.1 配置JVM最大内存为10240M-Xmx10240m1.2 配置JVM最小内存为10240M-Xms10240m线上环境推荐Xms与Xmx配置一样大小1.3 配置JVM新生代内存大小-Xmn5120m1.4 配置eden区与suvivor区占比为8:1:1-XX:SurvivorRatio=81.5 配置老年代与新生代内存占比为2:1-XX:NewRatio=2:1...原创 2021-10-09 20:45:50 · 1091 阅读 · 0 评论 -
happens-before原则与内存屏障
1. happens-before原则定义编译器和处理器会对我们程序优化而进行指令重排,但需要保证前一个操作结果对后一个依赖操作可见(其实只是在单线程下能保证),否则就禁止指令重排1.1 指令重排带来的问题虽然指令重排满足happens-before原则,但这个只能保证单线程下结果具有一致性。 在多线程下,指令重排会导致很严重的并发错误,会导致结果不具有一致性 多线程下想要结果也满足一致性,则需要加入内存屏障来解决指令重排的问题2. 内存屏障2.1 分类Load Barrier:在读原创 2021-09-17 11:57:23 · 378 阅读 · 0 评论 -
类加载机制
类是在运行时期第一次使用时动态加载的,而不是编译时期一次性加载。因为如果编译时期一次性加载,那么会占用很多的内存1. 类的加载过程1.1 加载将字节码文件加载到内存 将这些数据转换为方法区中的运行时数据(静态变量,静态代码块,常量池等) 在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口1.2 连接验证验证字节码信息符合jvm规范,没有安全问题准备正式为类变量分配内存并设置默认初始值。 这些内存都将在方法区中进行分配解析将虚拟机常量池中的原创 2021-09-11 23:08:11 · 79 阅读 · 0 评论