IDC

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

作者:admin 2021-09-11 我要评论

前言 JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JV...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

前言

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 掌握这3个技巧,你也可以秒懂JAVA性能

    掌握这3个技巧,你也可以秒懂JAVA性能

  • 实例事件通知 - 云服务器 ECS

    实例事件通知 - 云服务器 ECS

  • 设置事件通知 - 云服务器 ECS

    设置事件通知 - 云服务器 ECS

  • 事件通知概述 - 云服务器 ECS

    事件通知概述 - 云服务器 ECS