关于java:初步了解jvmjvm简介和简单调优

首先份上一份比拟具体的java虚拟机的思维导图: https://www.processon.com/vie…

什么是jvm:

简述就是 : JVM是Java Virtual Machine(Java虚拟机)的缩写,java虚拟机实质上就是一个程序,当它在命令行上启动的时候,就开始执行保留在某字节码文件中的指令。通过jvm虚拟机能够实现跨平台运作。

  • 如图能够晓得 jdk = java-tool + jre ,而jre 蕴含了jvm*

如图能够看出jvm在不同的操作系统能够生成不同 的机器码,这样就实现了跨平台应用。

jvm底层残缺的运行示意图:

栈:又叫线程站

栈内存 寄存 程序运行的局部变量 =》如动态变量

每个线程运行 jvm都会在栈内存开拓一个空间

个性:先进后出 【FILO】

栈帧:JVM 执行 Java 程序时须要装载各种数据到内存中,不同的数据寄存在不同的内存区中(逻辑上)

通过javap 命令将Math.class(就是下面的java代码的类) 反编译一下,前面造成的就是如下图所示的指令码

ps: 办法进口就是a调用b的办法时“口子/地位” 就是b办法的进口

堆:

这个局部变量是对象类型(new进去的),而后会将这个对象的指针【内存地址】寄存到堆外面。

堆的内部结构:

个别new进去的对象放在Eden区。【一旦Eden区放满了 =》会触发 minor GC 1. 非垃圾对象就把它放进From区 同时jvm会分代年龄加一 2.把‘’垃圾‘’对象清理掉 】

什么是垃圾对象 :1.没有指针的对象 2.可达性剖析算法

当老年代都放满了,就会触发Full GC。

jvm垃圾收集机制 简略解说

下图是一个多线程程序 始终new对象 往【堆】内存外面放

上面是jvm的动静:

STW:Java中一种全局暂停景象,全局进展,所有Java代码进行,native代码能够执行,但不能与JVM交互。会让应用程序临时进行。

JVM调优的重点就是缩小STW的次数 ,因为大并发的状况下 STW的影响是很大的 ,用户体验极度不好。

亿级电商流量的线上调优

个别亿级电商网站都是微服务架构,如图:

推算网站大促每秒订单数和机器分配资源 到耗费内存




推算一个订单对象的大小:一个对象一个1024个字节【1kb】 (ps:Int对象4个,string 占用最大字节= 长度*2)

ps: 在eden区能存活一次的对象 ,会被放入Survivor 区

一个对象是挪动到老年代 而不是年老代[Survivor 区],判断规范:
1.对象存活工夫比拟长【通过15次的MInor GC】
2.对象占用内存Survivor 区的一半内存【依据理论硬盘调配设置】,就会间接调配到老年代

如图中的对象jvm参数设置的
13秒后就会让eden区占满,
Survivor 区占100M内存,每次都会被调配到老年代,当5-6分钟后老年代占满了 触发Full GC ,从而呈现利用卡顿/暂停的景象,这是咱们不违心见到的。所以须要jvm调优。

这样25秒左右能力占满Eden区,而后60M的对象也能放入survivor区(没超过其中一半),当survivor区放满是 会触发Minor Gc能够把之前的垃圾对象进行回收,个别状况下 就不会有什么对象进入老年代,不会触发Full GC

本文来源于:宋文超super,专属平台有csdn、思否(SegmentFault)、 简书、 开源中国(oschina)、掘金,转载请注明出处。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据