【大数据day04】——JVM优化 上(jvm的内存模型( 三 )


由上述的信息可以看出,参数有类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值 。
示例:
java -XX:+PrintFlagsFinal -XX:+VerifySharedSpaces -versionintx ValueMapInitialSize= 11{C1 product}intx ValueMapMaxLoopSize= 8{C1 product}intx ValueSearchLimit= 1000{C2 product}bool VerifyMergedCPBytecodes= true{product}bool VerifySharedSpaces:= true{product}intx WorkAroundNPTLTimedWaitHang= 1{product}uintx YoungGenerationSizeIncrement= 20{product}uintx YoungGenerationSizeSupplement= 80{product}uintx YoungGenerationSizeSupplementDecay= 8{product}uintx YoungPLABSize= 4096{product}bool ZeroTLAB= false{product}intx hashCode= 5{product}java version "1.8.0_141"Java(TM) SE Runtime Environment (build 1.8.0_141-b15)Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)#可以看到VerifySharedSpaces这个参数已经被修改了 。
2.6.2、查看正在运行的jvm参数
如果想要查看正在运行的jvm就需要借助于jinfo命令查看 。
首先,启动一个用于测试,来观察下运行的jvm参数 。
cd /tmp/rz 上传tar -xvf apache-tomcat-7.0.57.tar.gz cd apache-tomcat-7.0.57cd bin/./startup.sh#http://192.168.40.133:8080/ 进行访问
#查看所有的参数,用法:jinfo -flags <进程id>#通过jps 或者jps -l 查看java进程[root@node01 bin]# jps6346 Jps6219 Bootstrap[root@node01 bin]# jps -l6358 sun.tools.jps.Jps6219 org.apache.catalina.startup.Bootstrap[root@node01 bin]#[root@node01 bin]# jinfo -flags 6219Attaching to process ID 6219, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.141-b15Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=31457280 -XX:MaxHeapSize=488636416 -XX:MaxNewSize=162529280 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line:-Djava.util.logging.config.file=/tmp/apache-tomcat-7.0.57/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/tmp/apache-tomcat-7.0.57/endorsed -Dcatalina.base=/tmp/apache-tomcat-7.0.57 -Dcatalina.home=/tmp/apache-tomcat-7.0.57 -Djava.io.tmpdir=/tmp/apache-tomcat-7.0.57/temp#查看某一参数的值,用法:jinfo -flag <参数名> <进程id>[root@node01 bin]# jinfo -flag MaxHeapSize 6219-XX:MaxHeapSize=488636416
3、jvm的内存模型
jvm的内存模型在1.7和1.8有较大的区别,虽然本套课程是以1.8为例进行讲解,但是我们也是需要对1.7的内存模型有所了解,所以接下里,我们将先学习1.7再学习1.8的内存模型 。
3.1、jdk1.7的堆内存模型
3.2、jdk1.8的堆内存模型
由上图可以看出,jdk1.8的内存模型是由2部分组成,年轻代 + 年老代 。
年轻代:Eden + 2*
年老代:
在jdk1.8中变化最大的Perm区,用(元数据空间)进行了替换 。
需要特别说明的是:所占用的内存空间不是在虚拟机内部,而是在本地内存空间中,这也是与1.7的永久代最大的区别所在 。
3.3、为什么要废弃1.7中的永久区?
官网给出了解释:
现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.:。
基于此,将永久区废弃,而改用元空间,改为了使用本地内存空间 。
3.4、通过jstat命令进行查看堆内存使用情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量 。命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
3.4.1、查看class加载统计
[root@node01 ~]# jps7080 Jps6219 Bootstrap[root@node01 ~]# jstat -class 6219LoadedBytesUnloadedBytesTime32737122.300.03.98