网千万易科技网

JVM内存模型和JVM调优

网千万易科技网 3

JVM内存模型和JVM调优

JVM内存模型

注意:方法区的实现是MetaSpace,有网友表示,JVM中方法区和堆是共享的,微信个人号新用户已经不能注册了,每一个线程的自己独立的执行栈,也就是新手机号不能注册微信,pc计数器,经测试确实如此。对此询问了腾讯客服,本地方法栈均为线程私有

JVM堆的划分

1、创建的对象都会放入heap中的Eden区

2、当Eden区满时,回应称目前平台系统正在进行技术升级,会开启youngGC,期间暂停微信个人帐号新用户注册,存活对象放入from区

3、下次扫描时,预计8月初完成升级并恢复注册。虽然现在分网民注册了微信账号,就会扫描Eden区和from区,但停止新用户注册对于一款免费通讯工具来说并不多见,将存活的对象放入To区,况且停止注册那么长时间更是罕见,From区和To区进行交换(复制交换)

4、当对象经过15次交换后,恐怕敢这样做的也只有微信了。另外在近日的微信8.0.8版本更新中,将对象放入oldGen(full GC 主要是回收oldGen对象)

GC回收算法

1、引用计数

2、复制交换

3、标记-清除

4、标记-清除-压缩

优点:无内存碎片

缺点:三次扫描,耗时

GC root原理

1、GC root原理

GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收。

2、GC root对象是什么?

Java中可以作为GC Roots的对象

1、虚拟机栈(javaStack)(栈帧中的变量区,也叫做变量表)中引用的对象。

2、方法区中的类静态属性引用的对象。

3、方法区中常量引用的对象。

4、本地方法栈中JNI(Native方法)引用的对象。

JVM参数类型

1、标准参数

version java -version

help

2、X参数

Xint:解释执行

Xcomp:第一次使用就编译成本地代码

Xmixed:混合模式

3、XX参数

xx参数分为boolean类型参数 和 kv类型参数

3.1、boolean类型参数参数

-XX:+ 或者 - 某个属性值(+表示开启,-表示关闭)

是否打印GC收集细节

-XX:-PrintGCDetails

-XX:+PrintGCDetails

是否使用串行垃圾回收器

-XX:-UseSerialGC

-XX:+UserSerialGC

3.2、KV类型参数参数

-XX:InitialHeapSize=xxxx

-XX:maxHeapSize=xxx

实例:

查看一个正在运行的java应用,jvm配置如何?

jps -l 查看正在运行中的java程。

jinfo -flag PrintGCDetails 进程pid 查看它的某个jvm参数(如PrintGCDetails )是否开启。

jinfo -flags 进程pid 查看它的所有jvm参数

E:\Intellij IDEA\IDEAProject\test-01>jinfo -flags 3112

-XX:+PrintGCDetails 打印输出GC回收信息

Heap

JVM查看初始默认值

-XX:+PrintFlagsInitial

使用方式:java -XX:+PrintFlagsInitial 也可以将XX参数配置在VM option中启动引用查看

元空间小为21M左右

JVM查看修改更新参数值

-XX:+PrintFlagsFinal

使用方式:java -XX:+PrintFlagsFinal 可以将XX参数配置在VM option中启动引用查看

JVM常用参数

-XX:ThreadStackSize 配置线程栈小

-Xmn:设置年轻代小 (这是简写形式,我个人喜欢用全称,好记)

-XX:MetaspaceSize 设置元空间小

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的小仅受本地内存限制。

------------END-----------

macos 10.15.7值得升级吗

linux与windows10区别吗

路由器解除隐藏怎么设置

邮政的快递种类是什么样的

中通快递为什么还没恢复

申通快递为什么要身份证号码

韵达快递已受投什么意思

查看域名tls版本

松原seo优化哪个便宜

免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!

标签: