
JVM
由浅入深,学习总结JVM
代码量不够
词汇量不多
展开
-
JVM - 12:年轻代ParNew和老年代CMS垃圾回收器
年轻代垃圾回收器ParNew新生代的辣鸡回收器ParNew,主打的就是多线程回收另外一种Serial垃圾回收器,主打的是单线程回收回收算法一样当ParNew垃圾回收器,在合适的时机进行垃圾回收的时候会暂停当前的工作线程让自己的垃圾线程去回收垃圾如何为系统指定ParNew垃圾回收器使用“-XX:+UseParNewGC”只要加入这个选项,JVM启动之后对新生代进行垃圾回收的,就是P...原创 2019-08-09 16:37:05 · 2816 阅读 · 1 评论 -
JVM - 11:JVM最让人无奈的痛点 Stop the World
新生代垃圾回收场景我们新生代有三块区域 Eden 、s0、s1此时系统不停运行就会把Eden占满这个时候就会触发Minor GC触发垃圾回收会有专门的线程来处理的而对不同的区域会有不同的垃圾回收器相当于垃圾回收线程配合垃圾回收器使用垃圾回收算法对指定的区域进行回收针对新生代的垃圾回收器Serial单线程,会直接暂停系统工作线程。通常不用ParNew支持多个线程回收GC的时...原创 2019-08-09 15:25:44 · 434 阅读 · 0 评论 -
JVM - 10:JVM中有哪些垃圾回收算法,每个算法的场景和优劣
回顾上一篇说了垃圾回收时机,强引用、软引用、弱引用、虚引用新生代的垃圾回收算法新生代使用的是复制算法新生代分为3块区域默认比例为8:1:1eden:s1:s2平时可以使用的,就是Eden区和其中一块Survivor区但是刚开始创建的对象分配在 eden 区的如果eden区垃圾对象越来越多此时会触发垃圾回收机制具体做法复制算法会先标记存活的对象然后把存活的对象复制到另外一...原创 2019-08-08 17:38:05 · 617 阅读 · 1 评论 -
JVM - 9:什么情况下JVM内存中的一个对象会被垃圾回收
什么时候会触发垃圾回收在之前说到,当对象没人引用导致新生代的内存占用越来越多,都快满了这个时候,就会触发垃圾回收被那些变量的引用的不能被回收只要你的对象被方法的局部变量,类的静态变量给引用了就不会回收他们JVM使用了一种可达性分析算法用来分析对象被谁引用了在JVM规范中,局部变量就是一个GC RootsJava中不同的引用类型强引用只要是强引用,引用的类型,垃圾回收器,是不会...原创 2019-08-08 15:54:09 · 1019 阅读 · 0 评论 -
JVM - 8:如何根据自己的系统合理的设置JVM参数
支付系统案例如果有一个电商系统支付系统所处的位置用户 >>> 下单用户 >>> 支付支付 >>> 调用第三方支付通道只要网购过,这个流程都很清楚就是对一个商品加入购物车然后下个订单接着对订单结算大致如此核心流程如下...原创 2019-08-04 00:30:15 · 1130 阅读 · 0 评论 -
JVM - 7:系统部署时如何设置JVM内存大小
上一篇说到了我们创建的对象都是优先分配在新生代的当一个方法执行完毕之后,没人引用的对象,就成为了垃圾对于 通过 static 静态变量引用的 对象会长期存活当新生代的空间满了之后,会触发垃圾回收机制对于躲过垃圾回收的对象,会对它的年龄 +1当年龄达到 15 岁之后会进入老年代老年代也会进行垃圾回收JVM核心参数-Xms:Java堆内存的大小-Xmx:Java堆内存的最大大小...原创 2019-08-02 16:46:06 · 640 阅读 · 0 评论 -
JVM - 6:对象在JVM中如何分配,如何扭转的
在之前的文章中提到了JVM是如何运行起来的JVM中的内存区域以及堆内存的分代模型通过之前的文章,知道了大部分的对象是优先分配在堆内存的但是大部分正常的对象都是优先分配在新生代的最典型的就是通过静态变量引用的对象,虽然它是长期存活的对象但是哪怕是这种对象也是优先分配在新生代的什么情况下会触发新生代垃圾回收垃圾回收有它的触发条件必备的条件是没有人引用这些对象了如果,某个时刻新生代...原创 2019-08-02 10:38:27 · 196 阅读 · 0 评论 -
JVM - 5:分代模型:年轻代、老年代、永久代
第一个知识点:对象存活周期极短的执行 main 方法的时候 会把 main 方法的栈帧 压入 当前线程的虚拟机栈在每次的循环里会一直创建 ReplicaManager 对象 的实例对于创建出来的对象,会放到 堆内存 里面大部分的对象存活时间都是很短的执行下面的方法,创建一个对象 ,调用它的 load 方法,然后 loadReplicasFromDisk() 方法就会出栈此时没有,没...原创 2019-07-25 15:18:18 · 564 阅读 · 0 评论 -
JVM - 4:垃圾回收机制是用来干嘛的?为什么要进行回收
回顾上一篇说到了JVM的内存区域划分线程私有(程序计数器、虚拟机栈、本地方法栈)线程共享(堆内存、方法区)以及 从加载一个类 到 执行方法的流程第一个知识点:对象的分配与引用上一篇说到,在执行某个方法的时候,如果 遇到 XXX xx = new XXX() ,则会在堆内存分配这个实例对象的内存空间同时会让当前方法的栈帧内的 xxx 局部变量去指向这个 XXX 对象的堆内存地址接下...原创 2019-07-24 10:36:52 · 849 阅读 · 0 评论 -
JVM - 3:JVM中的内存区域,分别是用来干嘛的
回顾上一篇讲到了1、类加载机制加载、验证、准备、解析、初始化、应用、卸载2、什么情况下会加载一个类6种主动使用方式new调用类的静态变量调用类的静态方法反射被JVM启动时标为启动类的类初始化一个类的子类3、双亲委派模型始终由自己的父类加载器去加载,父加载器加载不了的,回退给自己的子类去加载,避免了很多类重复加载的问题第一个知识点:JVM内存区域划分JVM在启动我们写好...原创 2019-07-23 14:38:17 · 719 阅读 · 0 评论 -
JVM - 2:类加载机制
回顾上一篇说到了 Java是如何运行的先从 java 文件 编译成 class 文件 通过 类加载机制 加载进 jvm虚拟机然后,jvm 就可以执行我们的代码了第一个知识点:什么情况下会加载一个类一个类从加载到应用,会经历如下几个步骤加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> ...原创 2019-07-22 19:50:04 · 192 阅读 · 0 评论 -
JVM - 1:Java代码是如何运行起来的
第一个知识点Java对各个操作系统平台提供了各自对应的JVM虚拟机,正因为这样,才使得Java能够一次编译到处运行。那我们平时写的Java代码是怎么运行起来的?首先假设我们写好了一份Java代码,然后会把这份代码部署到机器上去运行部署之前,我们先要进行编译,打包 .jar / war然后会把 打包后的文件放到 机器上去部署顺序 java文件 >>> 编译打包 &...原创 2019-07-22 18:03:49 · 542 阅读 · 0 评论