JVM
文章平均质量分 94
学而知不足~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM第十一课:JVM常见参数总结
前言生产系统中,Serial其实几乎不用了;现在来说,HotSpot的ZGC还不成熟,目前最好用的GC就是G1了JDK8开始支持G1保守一些的企业,可能用的是JDK7,这时候其实响应时间优先,也就是用PS + PO了;CMS一旦SerialOld时,会STW很久,所以没啥必要用它,还会带来很多麻烦(CMS帮G1和ZGC踩了很多坑)如果用了JDK8,那么就建议使用G1CMS的问题Memory Fragmentation(内存碎片化)-XX:+UseCMSCompactAtFullColle原创 2022-02-27 20:29:45 · 585 阅读 · 0 评论 -
JVM第十课:垃圾回收器串讲
G1Garbage First Garbage CollectorG1之前的垃圾回收器(Serial,Parallel Scavenge,CMS等)都是把内存从物理上分块的(为了分代)G1是物理上不分代,只在逻辑上分代,分成了很多Region,用到了分而治之的思想G1是一种服务端应用使用的垃圾收集器,比较适合用在多核CPU,较大内存(几十G)的机器上,暂停时间很短,同时保证较高的吞吐量据说G1和PS相比,吞吐量低了10%~15%但是G1的停顿时间很短,只有200ms基本概念(了解即可)car原创 2022-02-27 16:47:49 · 381 阅读 · 0 评论 -
JVM第九课:JVM调优实战 - arthas 的使用
arthas在线排查工具https://github.com/alibaba/arthas/blob/master/README_CN.md步骤运行起来我们的java程序启动 arthas 的 jar 文件,我们看到 刚才运行的java程序的进程号是 1,所以敲进进程号 1 ,回车,它会把自己挂到这个进程上之后就可以用 arthas 提供的一些命令,来观察你的程序了使用 help 查看 arthas 常用命令:一些常用命令,包括:jvm,dashboard,heapdump等等有了原创 2022-01-29 15:33:32 · 1522 阅读 · 0 评论 -
JVM第八课:JVM调优实战
面试题案例1:系统CPU经常100%,如何调优?推理过程是:CPU100%,那么一定有线程在占用系统资源,所以找出哪个进程cpu高(top命令)该进程中的哪个线程cpu高(top -Hp)如果是java程序,导出该线程的堆栈 (jstack命令)查找哪个方法(栈帧)消耗时间,哪个方法调用的哪个方法 (jstack),然后去看这个方法的代码工作线程占比高 / 垃圾回收线程占比高?案例2:系统内存飙高,如何查找问题?导出堆内存 (jmap)分析 (jhat jvisualvm mat原创 2022-01-18 17:05:52 · 392 阅读 · 1 评论 -
JVM第七课:实战理解GC调优
GC常用参数-Xmn -Xms -Xmx -Xss年轻代 最小堆 最大堆 栈空间大小-XX:+UseTLAB使用TLAB,默认打开-XX:+PrintTLAB打印TLAB的使用情况-XX:TLABSize设置TLAB大小-XX:+DisableExplictGCSystem.gc()不管用 ,FGC-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintHeapAtGC-XX:+PrintGCTimeStamps-XX:+PrintGCApplica原创 2022-01-17 17:38:36 · 692 阅读 · 0 评论 -
JVM第六课:JVM调优必备理论知识 - 3种垃圾清除算法,常见的垃圾回收器
JVM调优是一层窗户纸,只是看起来很难。学完本节课,让你:熟悉 GC 常用算法,熟悉常见垃圾回收器,具有实际 JVM 调优实战经验What is garbage什么是垃圾?没有引用指向的对象就是垃圾。java和c++垃圾回收的区别java:由GC处理垃圾,一般都不是马上回收.GC有自己的想法开发效率高,执行效率低c++代码中手动处理垃圾可能忘记回收,导致内存泄漏可能回收多次,导致非法访问并回收了别人正在用的内存开发效率低,执行效率高怎么找到垃圾?引用计数对象头上有个ref原创 2022-01-13 17:57:07 · 837 阅读 · 1 评论 -
JVM第五课:Java运行时数据区和常用指令
Runtime Data Area 运行时数据区最权威的参考文档:Java Virtual Machine SpecificationJava运行时数据区以及JVM指令i=i++结果为8i=++i结果为9class的生命周期运行时数据区的构成PC:peogram counter 程序计数器存放指令位置虚拟机的执行类似下面的循环:while(not end){取pc中的位置,找到对应位置的指令执行该指令PC++;}堆heap所有线程共享同一个堆空间。堆空间是用来存原创 2022-01-12 16:32:54 · 435 阅读 · 0 评论 -
JVM第四课:volatile和synchronized实现细节、对象的内存布局
保障有序性硬件内存屏障:内存指令sfence: store| 在sfence指令前的写操作当必须在sfence指令后的写操作前完成。lfence:load | 在lfence指令前的读操作当必须在lfence指令后的读操作前完成。mfence:modify/mix | 在mfence指令前的读写操作当必须在mfence指令后的读写操作前完成。原子指令原子指令,如x86上的”lock …” 指令是一个Full Barrier,执行时会锁住内存子系统来确保执行顺序,甚至跨多个CPU。Soft原创 2022-01-11 12:56:44 · 148 阅读 · 0 评论 -
JVM第三课:复习、Linking、Java内存模型
前情回顾:类加载机制双亲委派parent只是一个成员变量,不是继承关系上节课遗留问题parent是怎么指定的?手动指定parent:双亲委派机制可以被打破吗?双亲委派机制是在ClassLoader类里的LoadClass()方法已经写死的,你只需重写FingClass()方法就可以了。那怎么打破它呢?热加载的实现原理Tomcat把整个ClassLoader全部干掉,再用自己实现的ClassLoader把新修改过的类的Class重新Load一遍。package com.mashib原创 2022-01-09 13:57:54 · 394 阅读 · 0 评论 -
JVM第二课:详解Class加载过程
类加载和初始化class cycle首先一个class文件在硬盘里面然后JVM去对它进行以下行为:Loading,把class文件load到内存,双亲委派(安全)Linking,分三小步:Verification,校验,文件是否符合JVM规定的class格式.Preparation,静态变量赋默认值,比如int-0,double-0.0,boolean-falseResolution,解析,将类、方法、属性等符号引用解析为直接引用如常量池中的各种符号引用解析为指针、偏移量等内存地址的直原创 2022-01-08 18:02:41 · 1104 阅读 · 0 评论 -
JVM第一课:JVM入门及class文件格式
JVM入门JDK、JRE和JVM的包含关系JVM特点有的说法说classLoader不属于JVM,概念无所谓解释和编译混合跨语言的平台JVM和java无关任何语言-编译或动态生成->.class文件-运行在->JVMJVM是一种规范java virtual machine specifications虚构出来的一台计算机字节码指令集(汇编语言)内存管理:栈 堆 方法区等javac的过程常见的JVM实现java -version就可以看到自己用原创 2022-01-07 11:02:18 · 538 阅读 · 0 评论
分享