JVM内存区域
- java源文件通过javac编译成java字节码文件.class
- 通过类加载器ClassLoader加载.class文件,将class文件内容放入内存中各个区域, 那么这各个区域,分别存放的是什么东西呢?
- 程序计数器: 程序执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能。
- 栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。
- 堆中存的是实例对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用
- 方法区中存放虚拟机加载类的相关信息,如静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,但是实例变量存在堆内存中.
常用JVM参数
参数 | 描述 |
---|---|
-Xms | 初始堆大小,默认为物理内存的1/64(<1GB);空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 |
-Xmx | 最大堆大小,默认空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 |
-Xmn | 新生代的内存空间大小 |
-XX:MaxPermSize | 设置持久代最大值。物理内存的1/4 |
-Xss | 每个线程的堆栈大小 |