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操作,那么你应该尝试增大老年代的内存空间。
全面垃圾收集调优要花费大量的努力和时间,这里没有一尘不变的硬性调优规则。你需要去尝试不同的选项并且对这些选项进行对比,从而找出最适合自己应用的方案。
参考网站: