JVM
Kevin照墨
这个作者很懒,什么都没留下…
展开
-
JVM调优
如果CPU使用率较高,GC频繁且GC时间长,可能就需要JVM调优了,基本思路就是让每一次GC都回收尽可能多的对象,提高吞吐率。对于CMS来说,要合理设置年轻代和年老代的大小。该如何确定它们的大小呢?这是一个迭代的过程,可以先采用JVM的默认值,然后通过压测分析GC日志。如果看年轻代的内存使用率处在高位,导致频繁的Minor GC,而频繁GC的效率又不高,说明对象没那么快能被回收,这时年...原创 2020-03-08 10:15:14 · 263 阅读 · 0 评论 -
JVM编译浅析
1.编译器与解释器的区别与优劣编译器:将完整的用户代码经过一系列处理翻译成完整的目标语言。解释器:直接利用用户提供的输入执行源程序中的操作。因此可以逐个语句的执行源程序。编译器产生的机器语言目标程序通常比解释器快很多,代码的优化效果也比解释器好。但是利用解释器逐句执行的特点,解释器更容易进行错误诊断,与用户的交互效果也比编译器好。2.一个编译器的结构一个编译器可以分为前端和后端:前端...原创 2020-03-07 10:12:52 · 183 阅读 · 0 评论 -
为什么JVM要分栈区和堆区
可以看看编译原理运行时内存区域划分。堆,栈,方法区等都有自己特有的内存管理方式,都有自己合适存储的内容,方便jvm去调用和进行内存管理。我们知道程序最终都会编译成二进制指令执行,而且都是顺序执行的,以main函数为入口(作为栈底)不断向其中添加指令,最后再执行,不断返回,因此最符合这一逻辑的便是栈这种数据结构,且地址上连续,访问速度够快。但是我们从一个程序运行开始考虑,首先是...原创 2020-02-28 17:08:18 · 1262 阅读 · 0 评论 -
Java并发——AQS
1、Lock与AQS与CAS的关系Lock面向用户,AQS面向Lock,也就是说AQS为各种Lock提供了底层的支持,AQS的最核心原理之一就是利用CAS更新同步状态。2、AQS介绍AQS是AbustactQueuedSynchronizer的简称,它是一个Java提供的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Ja...原创 2020-02-12 14:33:15 · 214 阅读 · 0 评论 -
JVM——GC
1、垃圾回收算法1.1 垃圾标记引用计数——最简单的垃圾标记方式就是,对每一个对象指定一个引用计数器,每新增一个引用其对应的引用计数器加一,然后在垃圾回收时只需要判断当前对象的引用计数是否为0,即可进行清除。但是这会造成循环引用的问题,如果两个对象之间形成了循环引用,那将永远无法被标记。可达性分析——这种方式就是从“GC Roots”出发,寻找所有被其引用的对象(可达对象),对于不可...原创 2020-02-12 11:07:06 · 111 阅读 · 0 评论 -
Java锁优化
1、总述我们知道Java的锁有两种形式:一是synchronized,它是由JVM底层实现的,是java语言的关键字,底层是依赖对象内部的monitor锁来实现的,而monitor又依赖操作系统的MutexLock(互斥锁)来实现的,所以在JDK6.0之后,java对synchronized进行了优化,即引出了 偏向锁、轻量级所、自旋锁等概念。二是重入锁lock,它是jdk实现的一个接口,...原创 2020-02-11 13:54:03 · 141 阅读 · 0 评论 -
Java并发——volatile详解+JMM内存模型
https://www.jianshu.com/p/8755e8fd1d20补充说明,缓存和内存的一致性问题:1.在学习计算机组成原理时,我们知道,修改了缓存的数据后,有如下3中写回策略:(1)写回法当CPU写Cache命中时,只修改Cache的内容,而不立即写入主存;只有当此行被替换出时才写回主存。优点:减少了访问主存的次数。缺点:存在不一致性的隐患。解决问题:每个Cache行必须...原创 2019-12-27 17:44:23 · 162 阅读 · 0 评论 -
并发下的容器(ArrayList、HashMap)安全问题
最近在做项目的是后遇到了并发安全问题,当多个线程操作ArrayList、HashMap等数据结构时造成了数据不一致,或者莫名其妙的异常,最后查阅资料发现是本身这些数据结构的并发安全问题导致的。1.ArrayList我们知道ArrayList底层仍是数组模拟:add操作实际上是数组赋值,然后指针++操作另外当容量超过初始容量时会自动进行容量扩展,底层实现即通过copy方式将现在的数组cop...原创 2019-10-22 11:46:45 · 326 阅读 · 0 评论 -
JVM——内存结构和对象的创建、布局、定位
1.内存区域结构方法区和堆 属于 共享内存 而剩下的 程序计数器、虚拟机栈、本地方法栈则属于线程私有的。下面一一解释这五大区域的作用。堆:用于存放对象实例和数组方法区:用于存储jvm加载的类信息(编译后的class文件的元信息)、运行时常量池(包括编译时生成的class文件的字面量和其符号引用,和运行时加入的常量)、JIT编译的代码等class文件的元信息:元信息即是描述类的属...原创 2019-08-29 09:53:23 · 202 阅读 · 1 评论