![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM虚拟机
JVM虚拟机
阿呆布衣酷
纯干货学习笔记:无盈利目的,只想帮自己成长
展开
-
徐无忌深入JVM虚拟机笔记:案例:使用jstat命令摸清线上系统的JVM运行状况并合理优化
徐无忌深入JVM虚拟机笔记:案例:使用jstat命令摸清线上系统的JVM运行状况并合理优化完成:第一遍1.jstat有什么作用?作用一:通过jstat可以查看JVM内部的内存使用情况作用二:通过jstat可以查看还有GC的执行次数以及耗时通过这些指标,可以判断出系统的当前内存使用压力以及GC压力,内存分配是否合理2.jstat常见命令有哪些?jstat -gc [PID][PID]指的是进程编号返回的结果和代表的意思是:S0C:这是S0区的大小S0U:这是S0区当前使用的内存大小S1原创 2020-07-18 15:48:38 · 447 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:案例:高并发支付系统,如何设置JVM堆内存的大小?
徐无忌深入JVM虚拟机笔记:案例:高并发支付系统,如何设置JVM堆内存的大小?完成:第一遍1.以每日百万级别的交易支付系统作为背景,在线上部署一个系统时,最核心的环节是什么?业务流程中,最核心的环节是在用户发起支付请求的时候,会生成一个支付订单2.订单支付业务的核心要素有哪些?谁发起的支付对哪个商品的支付通过哪个渠道进行支付发起支付的时间3.支付订单对象数量如何估算?如果每日有百万笔交易,在JVM的角度来看,就是每天会在JVM中创建上百万个新的支付订单对象假设我们的支付系统部署了3台机原创 2020-07-18 15:16:01 · 344 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:方法调用是如何导致线程栈内存溢出的?
徐无忌深入JVM虚拟机笔记:方法调用是如何导致线程栈内存溢出的?完成:第一遍1.方法调用是如何导致线程栈内存溢出的?java.lang.StackOverflowError栈内存溢出是进行复杂运算时非常容易出现的错误每个线程的虚拟机栈的大小是固定的,默认为1MB每次线程调用一个方法,都会将本次方法调用的栈桢压入虚拟机栈里,这个栈桢里保存着方法内部的局部变量和其他信息既然一个线程的虚拟机栈内存大小是有限的,那么假设不停去调用各种方法,对应的栈桢不停进压入栈中大置的栈桢会消耗完毕这个1MB的线程栈原创 2020-07-17 15:06:09 · 179 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:JVM可能会发生哪几种OOM?如何进行排查和处理?
徐无忌深入JVM虚拟机笔记:JVM可能会发生哪几种OOM?如何进行排查和处理?完成:第一遍1.什么是OOM?当JVM内存严重不足时,会抛出java.lang.OutOfMemoryError:XXXX 错误根据实际生产经验,OOM是非常严重的问题,一般会对程序日志中的 OutOfMemoryError 配置关键字告警,一经发现,立即处理2.什么原因会出现Java heap space OOM?当堆内存没有足够空间存放新创建的对象时,就抛出 java.lang.OutOfMemoryError:原创 2020-07-17 14:53:44 · 278 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:什么是堆外内存?什么情况会发生堆外内存溢出或泄露?
徐无忌深入JVM虚拟机笔记:什么是堆外内存?什么情况会发生堆外内存溢出或泄露?完成:第一遍1.什么是堆内内存?一:一般情况下,一个新的对象创建在JVM内的堆上,并为其分配内存空间。堆空间由JVM垃圾回收器管理,称为堆内内存(on-heap memory)二:虚拟机会定期对垃圾内存进行回收,有时会进行一次彻底的回收Full GC三:彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,这意味一次垃圾收集对Java 应用造成的影响STW,跟堆的大小是成正比的,过大的堆会影响 Java 应用的性能原创 2020-07-17 14:18:53 · 429 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:JVM中有哪些常见的垃圾回收器,各自的特点是什么? 完成:第一遍
徐无忌深入JVM虚拟机笔记:JVM中有哪些常见的垃圾回收器,各自的特点是什么?完成:第一遍1.JVM中有哪些常见的垃圾回收器?Java发展至今,已经推出了好几代垃圾收集器,包括Serial、ParNew、Parallel、CMS、JDK9开始,默认使用G1以及Java11中最新的ZGC,每一代GC都对前一代存在的问题做出了很大的改善2.新生代使用的垃圾收集器主要有哪三种?新生代GC三种:Serial收集器ParNew收集器Parallel scavenge收集器3.什么是Serial收集器原创 2020-07-17 13:46:37 · 194 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:垃圾回收算法有哪些,每个算法各自有何优劣?
徐无忌深入JVM虚拟机笔记:垃圾回收算法有哪些,每个算法各自有何优劣?完成:第一遍1.Java中有哪两种垃圾回收机制?思想是如何确定哪些对象是需要被回收的垃圾回收机制确认了哪些对象需要回收垃圾回收算法决定了回收的操作过程第一种垃圾回收机制:引用计数法原理:当对象被引用,程序计数器+1;释放-1;当为0时证明对象未被引用,可回收第二种垃圾回收机制:可达性分析法原理:通过一些列称之为“GC Roots” 的对象作为起点;从此起点向下搜索,所走过的路径称之为引用链,当一个对象到 GC Roots原创 2020-07-17 12:58:37 · 199 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:对于堆内存,虚拟机如何进行分代管理?
徐无忌深入JVM虚拟机笔记:对于堆内存,虚拟机如何进行分代管理?完成:第一遍1.堆内存怎么划分新生代和老年代?JVM根据对象在内存中存活时间的长短把堆内存分为新生代和老年代新生代和老年代的比例是:一比二2.新生代由哪三部分组成?新生代由三部分组成:Eden区(8/10)(伊甸园即刚生成的时候)+(S0(1/10)+S1(1/10))Survivor区Eden去和S0和S1的比例是 8: 1:13.新生代中在创建对象时分配空间?大部分情况下,对象优先分配在Eden区,如果对象实在太大,原创 2020-07-17 11:45:35 · 161 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:JDK8后虚拟机内存包含哪几部分?做了哪些调整与改进?
徐无忌深入JVM虚拟机笔记:JDK8后虚拟机内存包含哪几部分?做了哪些调整与改进?完成:第一遍1.JDK8之前的架构是什么样子的?JDK8之前分为:堆栈程序计数器本地方法栈方法区即永久代栈、程序计数器和本地方法栈是线程私有的堆和永久代是线程共享的2.堆的作用是什么?堆是JVM内存管理的最大的一块区域,主要目的是存放对象的实例所有新创建的对象实例和数组都会在对上为其分配内存空间线程共享是垃圾收集器的主要管理区域,堆内存中可以存在物理上不连续的空间,只要逻辑上是连续的即可如果在堆原创 2020-07-17 11:15:33 · 253 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:什么是JVM类加载器机制和双亲委派模型?
徐无忌深入JVM虚拟机笔记:什么是JVM类加载器机制和双亲委派模型?完成:第一遍1.类加载器可以分为哪两类?通过类加载器,把编译好class字节码文件,加载到JVM虚拟机中进行执行Java中的类加载器大致可以分成两类:一类是系统提供的另外一类则是由 Java 应用开发人员编写的2.系统提供的类加载器主要有哪三个?三个:启动类加载器(bootstrap class loader)扩展类加载器(extensions class loader)系统类加载器(AppClassLoader)3原创 2020-07-17 10:47:04 · 270 阅读 · 0 评论 -
徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的?
徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的?完成:第一遍1.Java代码到底是如何运行起来的?Demo.java编写的源文件打包成:Jar包即Demo.class通过Java-jar运行即是Java系统,把类名放入,执行main()方法或者线上程序想部署后台应用程序:经常代码打包成war包,将war包放入Tomcat中,后运行运行过程:第一步:编译第二步:类加载第三步:链接第四步:初始化2.编译过程做了什么?写好“.java”代码后,会通过编译器将代码编译成.原创 2020-07-17 10:28:48 · 214 阅读 · 0 评论