![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 82
星晕留谁
这个作者很懒,什么都没留下…
展开
-
JVM整体讲解
1.类加载1.1 先来搞清楚几个概念编译我们写好".java"文件之后,要打包成".jar"或者".war"文件放到服务器去部署。这里非常关键的一步就是编译,就是把我们的".java"文件编译成".class"的字节码文件,这样才可以被运行起来。类加载器编译好的".class"字节码文件在哪里可以运行呢?java -jar xxx.jar的时候其实启动了JVM进程,它来负责运行我们编译好的".class"文件。此时,类加载器就会把编译好的".class"字节码文件加载到JVM中原创 2021-10-26 15:20:59 · 162 阅读 · 0 评论 -
Young GC和Full GC分别在什么情况下会发生
Young GC的触发时机Young GC其实一般就是在新生代的Eden区域满了之后就会触发,采用复制算法来回收新生代的垃圾Old GC和Full GC的触发时机下面几种情况:(1)发生Young GC之前进行检查,如果“老年代可用的连续内存空间” < “新生代历次Young GC后升入老年代的对象总和的平均大小”,说明本次Young GC后可能升入老年代的对象大小,可能超过了老年代当前可用内存空间。此时必须先触发一次Old GC给老年代腾出更多的空间,然后再执行Young GC。(2)执原创 2021-09-29 20:37:47 · 999 阅读 · 0 评论 -
年轻代和老年代分别适合什么样的垃圾回收算法
年轻代1. 复制算法的背景引入针对新生代的垃圾回收算法,他叫做复制算法简单来说,就是如下图所示,首先把新生代的内存分为两块。接着假设有如下代码,在“loadReplicasFromDisk()”方法中创建了对象,此时对象就就会分配在新生代其中一块内存空间里。而且是由“main线程”的栈内存中的“loadReplicasFromDisk()”方法的栈帧内的局部变量来引用的,如下图所示。接着大家想象一下,假设与此同时,代码在不停的运行,然后大量的对象都分配在了新生代内存的其中一块内存区域里,也只原创 2021-09-27 21:12:40 · 485 阅读 · 0 评论 -
结合实际业务设置JVM参数
JVM核心参数-Xms:Java堆内存的大小-Xmx:Java堆内存的最大大小-Xmn:Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了-XX:PermSize:永久代大小-XX:MaxPermSize:永久代最大大小-Xss:每个线程的栈内存大小-Xms和-Xmx,分别用于设置Java堆内存的刚开始的大小,以及允许扩张到的最大大小。对于这对参数,通常来说,都会设置为完全一样的大小。这两个参数,是用来限定Java堆内存的总大小的。-Xmn,这个参数也是很常见的,原创 2021-09-26 07:36:49 · 257 阅读 · 0 评论 -
JVM 类加载机制
JVM在什么情况下会加载一个类?其实类加载过程非常的琐碎复杂,但是对于我们平时从工作中实用的角度来说,主要是把握他的核心工作原理就可以。一个类从加载到使用,一般会经历下面的这个过程:加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载所以首先要搞明白的第一个问题,就是JVM在执行我们写好的代码的过程中,一般在什么情况下会去加载一个类呢?也就是说,啥时候会从“.class”字节码文件中加载这个类到JVM内存里来。其实答案非常简单,就是在原创 2021-09-24 21:36:05 · 340 阅读 · 0 评论