zoukankan      html  css  js  c++  java
  • JVM的内存结构以及性能调优

    JVM的内存结构以及性能调优

    发布时间: 2017-11-22 阅读数: 16675

    JVM的内存结构以及性能调优
    1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)
    堆上面存储的是引用数据类型的实例,栈当中存储的是变量的引用,
    方法区主要存储的是运行时常量池,以及类、方法相关的数据.
    堆主要分为新生代,年老代
    1:新生代 新创建的对象是存放在新生代当中的,
    Person P=new person();
    当新生代内存空间被用完时,就会触发垃圾回收。这个垃圾回收叫做Minor GC。

    2:年老代 被多次GC回收之后还存活的对象被转移到年老代.
    年老代的垃圾收集叫做Major GC,,Major GC会花费更多的时间。
    当major GC进行垃圾回收的时候,会触发 stop the world 事件,所有的线程
    都会暂停,等待GC结束之后,才恢复。所以呢,我们需要对垃圾收集进行监控,
    尽量避免major GC,防止应用程序暂时中断.

    永久代或者“Perm Gen”包含了JVM需要的应用元数据,这些元数据描述了在应用里使用的类和方法。
    注意,永久代不是Java堆内存的一部分。

    方法区是永久代空间的一部分,并用来存储类型信息(运行时常量和静态变量)和方法代码和构造函数代码。
    运行时常量池是每个类常量池的运行时代表。它包含了类的运行时常量和静态方法。运行时常量池是方法区的一部分。

    Java栈内存
    Java栈内存用于运行线程。它们包含了方法里的临时数据、对象引用(变量)

    jvm的性能调优(调整参数)
    -Xms
    设置JVM启动时堆的初始化大小。
    -Xmx
    设置堆最大值。
    -Xmn
    设置年轻代的空间大小,剩下的为老年代的空间大小。
    -XX:PermGen
    设置永久代内存的初始化大小。
    -XX:MaxPermGen
    设置永久代的最大值。

    1:第一种方式 通过myeclipse开发工具,给jvm设置启动参数,可以进行调优
    2:第二种方式  通过在tomcat安装目录下面的bin目录下的,startUp.bat文件当中
    添加一行设置参数:set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m
    window-preference-tomcat7.0-jdk-vm argumets
    -Xms2048m -Xmx2048m -Xmn1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=512m

    jvm监控工具的使用
    Jconsole 在java安装目录下面bin下面的 JConsole 双击打开,选择一个java程序相关的进程
    进入可以看到当前jvm的内存以及使用情况,如果发现堆内存或者永久代内存不够用,或者是垃圾
    回收次数较多,就去调整JVM的参数,提高应用的程序的性能和吞吐量.

    Java垃圾回收调优应该是提升应用吞吐量的最后一个选择。在你发现应用由于长时间垃圾回收导致了应用性能下降、出现超时的时候,应该考虑Java垃圾收集调优。
    如果你在日志里看到 java.lang.OutOfMemoryError: PermGen space错误,那么可以尝试使用 -XX:PermGen 和 -XX:MaxPermGen JVM选项去监控并增加Perm Gen内存空间。你也可以尝试使用-XX:+CMSClassUnloadingEnabled并查看使用CMS垃圾收集器的执行性能。
    如果你看到了大量的Full GC操作,那么你应该尝试增大老年代的内存空间。

    全面垃圾收集调优要花费大量的努力和时间,这里没有一尘不变的硬性调优规则。你需要去尝试不同的选项并且对这些选项进行对比,从而找出最适合自己应用的方案。

    参考网站:

    http://www.importnew.com/17770.html
    http://www.importnew.com/14086.html
    http://blog.csdn.net/ye1992/article/details/9344807
     
  • 相关阅读:
    nginx入门
    nginx负载均衡算法
    Nginx+Tomcat搭建高性能负载均衡集群
    简单搭建dubbo
    webservice和restful的区别
    webservice、httpClient、dubbo的区别
    sublime 插件
    【exam answer 1】
    给定一个 1-100 的整数数组,请找到其中缺少的数字。
    Hibernate中clear()、evict()、flush()的方法使用说明
  • 原文地址:https://www.cnblogs.com/51testing/p/8398564.html
Copyright © 2011-2022 走看看