Java基础-JVM调优策略简介

                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

 

一.JVM结构分析

1>.JVM结构图

 Java基础-JVM调优策略简介

2>.JVM运行时数据区功能说明

  JVM管理的内存段可分为两大类:线程共享内存和线程私有内存。

  2.1:线程共享内存

    方法区:存储jvm加载class,常量,静态变量,即时编译器编译后的代码等。

    java堆:存储Java的所有对象实例,数组等;

  2.2:线程私有内存

    程序计数寄存器:每个线程有自己的计数存寄器,存储当前线程执行字节码的地址;

    jvm栈:jvm会为每个运行线程分配一个栈区,线程调用方法时和方法返回时和方法返回时会进行入栈和出栈操作;

    本地方法栈区:与jvm stack类似,只不过此区域是为调用本地方法服务。

   由于每个线程都有自己的私有内存,我们去一一调试他们的内存的话,很显然是不合适的。因此,我们重点关注的对象是线程共享内存的调优。

 

二.JVM进程的内存结构

 Java基础-JVM调优策略简介

新生代:新创建的进程,通常指刚刚创建的对象
老年代:如果对象内存较大通常会放在老年代中,尽管它刚刚创建
持久代:不会被回收

伊甸区Eden:一个对象被创建后,通常被放在伊甸区中,当gc在清理eden时,会将整个eden清空,如果清空时发现eden区创建的对象仍然被引用就会将这些引用对象存入辛存区。

辛存区:
    辛存区主要存储的是Eden清理时未被清理的对象,而辛存区又分为辛存一区(from)和辛存二区(to),当gc清理from时,如果对象没有被引用就会被清理,如果有引用就将其清理到辛存二区,你可以简单的理解是将from中仍然被引用的对象存入到to区,同理,当gc在清理辛存二区(to)时,如果依然存在被引用的对象,那么该对象就会被存入到老年

老年区:
    主要存放新生代传来的对象,而老年代也是会有gc来清理的哟,只不过老年代的垃圾回收器(gc),即gc可能和新生代的不一致。

 

三.JAVA调优介绍

 1>.Categories of java hotspot VM options

  1.1:JavaStaveVM重新定义的标准选项在Java应用程序启动器页面上描述,用于Windows、Solaris和Linux;

  1.2:"-X"是非标准选项,其有以下两个显著特点:

    第一:不保证在所有VM实现上得到支持‘;

    第二:在JDK的后续版本中,如有更改,恕不另行通知;

  1.3:"-XX"选项不稳定,如有更改,恕不另行通知。

  1.4:jinfo -flags 指令

[root@yinzhengjie ~]# jps
2710 Jps
2635 Bootstrap
[root@yinzhengjie ~]# 
[root@yinzhengjie ~]# jinfo -flags 2635
Attaching to process ID 2635, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2048917504 -XX:MaxNewSize=682622976 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
Command line:  -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp
[root@yinzhengjie ~]# 
查看Java线程([root@yinzhengjie ~]# jinfo -flags 2635)

相关文章: