当前位置:主页 > 查看内容

掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收

发布时间:2021-09-11 00:00| 位朋友查看

简介:前言 JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。 因此,JVM 最重要的作用浮出水面,即……

前言

JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。

因此,JVM 最重要的作用浮出水面,即跨平台性。由于 JVM 为 java 程序屏蔽了操作系统底层的细节,Java 只需要关心如何编译,如何让加载进 JVM 即可。

由于 JVM 接收的是 Class 文件,而不是接收特定的语言,因此只要某种语言可以编译成 Class 文件,就可以在 JVM 上运行,这些语言有 Groovy、Kotlin、Scala 等等。因此 JVM 的另一个重要特性就是语言无关性,即跨语言。

一、JVM内存模型及垃圾收集算法

1.根据Java虚拟机规范,JVM将内存划分为:

New(年轻代)

Tenured(年老代)

永久代(Perm)

其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过 -XX:PermSize -XX:MaxPermSize 等参数调整其大小。

年轻代(New):年轻代用来存放JVM刚分配的Java对象

年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代

永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设置为128M就足够,设置原则是预留30%的空间。

New又分为几个部分:

Eden:Eden用来存放JVM刚分配的对象

Survivor1

Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。


本文转载自网络,原文链接:https://segmentfault.com/a/1190000038437345?utm_source=tuicool&utm_medium=referral
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:实例事件通知 - 云服务器 ECS 下一篇:没有了

推荐图文


随机推荐