JVM性能优化 (一) 初识JVM(2)

简介: JVM性能优化 (一) 初识JVM

2.4 -XX参数


-XX参数也是非标准参数,主要用于jvm的调优和debug操作

-XX参数的使用有2种方式,一种是boolean类型,一种是非boolean类型:


boolean类型


格式:-XX:[+-] <name>标识启用或禁用<name>属性,+表示开启,-表示关闭

如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用System.gc()无效

非boolean类型


格式:-XX:<name>=<value>表示<name>属性的值为<value>

如:-XX:NewRatio=1表示新生代和老年代的比值

是否打印GC收集细节


-XX:+PrintGCDetails

-XX:-PrintGCDetails

是否使用串行垃圾收集器


-XX:+UseSerialGC

-XX:-UserSerialGC

在这里配置-XX:属性值后

屏幕快照 2022-05-10 下午3.12.38.png

2.5 -Xms与-Xmx参数


-Xms与-Xmx分别是设置jvm的堆内存的初始大小和最大大小

-Xmx2048m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M

-Xms512m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M

适当的调整jvm的内存大小,可以充分利用服务器资源,让程序跑的更快

示例:


[root@localhost ~]# java -Xms512m -Xmx2048m TestJvm
muxiaonong


2.6 查看jvm的运行参数


有些时候我们需要查看jvm的运行参数,这个需求可能会存在2种情况:

第一,运行java命令时打印出运行参数;

第二,查看正在运行的java进程的参数;


2.6.1 运行java命令时打印参数

java -XX:+PrintFlagsFinal -version

image.png

在上述的信息可以看出,参数有boolean类型和数字类型,值的操作符是 =或者 :=,分别代表默认值和被修改的值

三、JVM的内存模型

jvm的内存模型在1.7和1.8有较大的区别,虽然本文中是以1.8为例进行讲解,但是我们也会对1.7的内存模型有所了解。所以我们先来了解一下1.7在学习1.8的内存模型

3.1、jdk1.7的堆内存模型

image.png

Young 年轻区(代)

Young区域被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候,GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象被移动到Tenured区间。


Tenured 年老区

Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间


Perm 永久区

Perm代主要保存 class、method、filed对象,这部分的空间一般不会溢出,除非一次性加载了很多的类,不过在设计到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMempryError:PermGen Space的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在perm中,这种情况下,一般重新启动应用服务器可以解决问题


Virtual区

最大内存和初始内存的差值,就是 Virtual区


3.2、jdk1.8的堆内存模型


Young 年轻区(代)

Young区域被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候,GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象被移动到Tenured区间。


Tenured 年老区

Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间


Perm 永久区

Perm代主要保存 class、method、filed对象,这部分的空间一般不会溢出,除非一次性加载了很多的类,不过在设计到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMempryError:PermGen Space的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在perm中,这种情况下,一般重新启动应用服务器可以解决问题


Virtual区

最大内存和初始内存的差值,就是 Virtual区


3.2、jdk1.8的堆内存模型


屏幕快照 2022-05-10 下午3.13.56.png

屏幕快照 2022-05-10 下午3.15.02.png

屏幕快照 2022-05-10 下午3.15.18.png屏幕快照 2022-05-10 下午3.15.26.png

目录
相关文章
|
8月前
|
分布式计算 Java 开发者
GitHub爆款!Java性能优化:轻松道破软件性能调优,不止搞定JVM
今天给大家带来的是:周明耀老师的 《大话Java性能优化:轻松道破软件性能调优方法论和具体实现路径》,全面细致,一本书搞定性能优化 周明耀是谁? 12年投资银行项目、分布式计算项目工作经验,IBM开发者论坛专家作者。一名IT技术狂热爱好者,一名顽强到底的工程师。推崇技术创新、思维创新,对于新技术非常的热爱,致力于技术研发、研究,通过发布文章、书籍、互动活动的形式积极推广软件技术。欢迎添加作者“michael_tec”,共同探讨IT技术话题。
|
6月前
|
Arthas 监控 算法
JVM调优篇:探索Java性能优化的必备种子面试题
本文将带你深入了解JVM调优的重要性、常见问题以及一些实用的调优工具和方法,助你在面试的过程中轻松应对
137 0
JVM调优篇:探索Java性能优化的必备种子面试题
|
10月前
|
运维 监控 Java
35-JVM性能优化总结-JVM性能优化到底该怎么做?
通过之前大量的案例和工具的介绍,相信大家对于JVM优化有了一定的了解和熟悉,接下来我们将整个JVM性能优化的步骤做一个总结。
108 0
|
7月前
|
存储 缓存 Java
101分布式电商项目 - Tomcat性能优化(JVM调优)
101分布式电商项目 - Tomcat性能优化(JVM调优)
41 0
|
7月前
|
Java 程序员 双11
阿里为了双十一,整理亿级JVM性能优化文档,竟被GitHub“抢开”
“随着云计算和微服务大行其道,现代 Java 程序需要适配的计算环境日益多样化。如何在云时代充分发挥Java的性能优势是所有 Java 程序员都必然要面对的挑战。
|
9月前
|
Java 关系型数据库 MySQL
阿里面试官(性能优化):描述一下jvm加载class文件的原理机制?
相信很多人对于性能优化都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。 都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高 楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。
|
9月前
|
存储 Java
揭秘 Java JVM 中的 Eden 区:对象分配、垃圾回收与性能优化
在 Java 虚拟机(JVM)的内存管理中,Eden 区是新生代内存的一部分,负责存储新创建的对象。了解 Eden 区的分配规则、垃圾回收策略以及性能优化方法,对于构建高性能、低延迟的 Java 应用至关重要。本文将深入探讨 Eden 区的原理、工作机制和性能优化,助您更好地管理内存资源。
|
9月前
|
存储 Java
探究 Java JVM 老年代:垃圾回收、内存管理与性能优化
在 Java 虚拟机(JVM)内存管理中,老年代是一个关键的部分,用于存储较长时间存活的对象。了解老年代的垃圾回收策略、内存管理方式以及性能优化方法,对于构建高性能、稳定的 Java 应用至关重要。本文将深入探讨老年代的原理、垃圾回收策略和性能优化,助您更好地掌握 JVM 内存管理。
|
9月前
|
Java
解密 Java JVM 新生代:原理、垃圾回收与性能优化
Java 虚拟机(JVM)的内存管理对于应用程序的性能和稳定性至关重要。其中,新生代是 JVM 内存管理中的一个重要概念,它主要用于存放新创建的对象。本文将深入探讨新生代的原理、垃圾回收策略以及性能优化方法,助您更好地理解并优化 Java 应用的内存使用。
|
10月前
|
算法 Java 程序员
阿里P8大牛精心整理JVM性能优化知识点+最新JVM面试题(附答案)
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。