JVM memory Model and Tuning parameters

The concept difference heap, stack, method area

1.堆
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。根据垃圾回收机制的不同,
Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为新生代和老年代。其中新声带存放新生的对象或者年龄不大的
对象,老年代则存放老年对象。新生代分为edn区、s0区、s1区,s0和s1也被称为from和to区域,他们是两块大小相等并且可以
互相角色的空间。绝大多数情况下,对象首先分配在eden区,在新生代回收后,如果对象还存活,则进入s0或s1区,之后每经
过一次新生代回收,如果对 象存活则它的年龄就加1,对象达到一定的年龄后,则进入老年代.

2.栈
Java栈是一块线程私有的空间,一个栈,一般由三部分组成:局部变量表、操作数据栈和帧数据区
局部变量表:用于报错函数的参数及局部变量
操作数栈:主要保存计算过程的中间结果,同时作为计算过程中的变量临时的存储空间。
帧数据区:除了局部变量表和操作数据栈以外,栈还需要一些数据来支持常量池的解析,这里帧数据区保存着
访问常量池的指针,方便计程序访问常量池,另外当函数返回或出现异常时卖虚拟机子必须有一个异常处理表,方便发送异常
的时候找到异常的代码,因此异常处理表也是帧数据区的一部分。

3.方法区
Java方法区和堆一样,方法区是一块所有线程共享的内存区域,他保存系统的类信息。
比如类的字段、方法、常量池等。方法区的大小决定系统可以保存多少个类。如果系统
定义太多的类,导致方法区溢出。虚拟机同样会抛出内存溢出的错误。方法区可以理解
为永久区。

Java Memory Architecture

1、  类加载子系统:负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之方法区的内存空间。
2、  方法区:就是存放类的信息、常量信息、常量池信息、包括字符串字面量和数字常量等。
3、  Java堆:在Java虚拟机启动的时候建立Java堆,它是Java程序最主要的内存工作区域,几乎所有的对象实例都存放到
Java堆中,堆空间是所有线程共享。
4、  直接内存:JavaNio库允许Java程序直接内存,从而提高性能,通常直接内存速度会优于Java堆。读写频繁的场合可能会考虑使用。
5、  每个虚拟机线程都有一个私有栈,一个线程的Java栈在线程创建的时候被创建,Java栈保存着局部变量、方法参数、同事Java的方法调用、
返回值等。
6、  本地方法栈,最大不同为本地方法栈用于本地方法调用。Java虚拟机允许Java直接调用本地方法(通过使用C语言写)
7、  垃圾收集系统是Java的核心,也是不可少的,Java有一套自己进行垃圾清理的机制。
8、  PC(Program Couneter)寄存器也是每个线程私有的空间, Java虚拟机会为每个线程创建PC寄存器,在任意时刻,
一个Java线程总是在执行一个方法,这个方法称为当前方法,如果当前方法不是本地方法,PC寄存器总会执行当前正在被执行的指令,
如果是本地方法,则PC寄存器值为Underfined,寄存器存放如果当前执行环境指针、程序技术器、操作栈指针、计算的变量指针等信息。
9、  虚拟机核心的组件就是执行引擎,它负责执行虚拟机的字节码,一般户先进行编译成机器码后执行。

Virtual machine configuration parameters

-XX:+PrintGC      每次触发GC的时候打印相关日志
-XX:+UseSerialGC      串行回收
-XX:+PrintGCDetails  更详细的GC日志
-Xms               堆初始值
-Xmx               堆最大可用值
-Xmn               新生代堆最大可用值
-XX:SurvivorRatio     用来设置新生代中eden空间和from/to空间的比例.

Tomcat memory overflow in catalina.sh modify JVM heap size

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"

JVM tuning parameters summary

  • GC time is small enough
  • GC enough times less
    in order to GC little time must be a smaller heap, small enough to ensure that the number of GC, must ensure that a larger heap, we can only choose the balance.
    (1) is provided for the JVM stack, generally defined by -Xms -Xmx its minimum, maximum, in order to prevent shrinkage heap garbage collector between a minimum, a maximum additional time is generated, we usually the maximum, minimum set the same value
    (2) and the young generation to the old generation in accordance with a default ratio: heap memory is allocated (12), can be adjusted by adjusting the size ratio between the two NewRadio between them, can also be recovered for substituting such as the young generation, by
    -XX: to set its absolute size MaxNewSize: newSize -XX. Similarly, in order to prevent the contraction of the young generation of the heap, we will usually -XX: newSize -XX: MaxNewSize set to the same size

Guess you like

Origin www.cnblogs.com/Libbo/p/11462780.html