JVM组成2 之运行时数据区

运行时数据区:方法区,堆,虚拟机栈,PC(程序计数)寄存器,本地方法栈
方法区和堆是线程共享的,其它为线程私有

方法区存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小
对象的堆内存由称为垃圾回收器(GC)的自动内存管理系统回收。 

虚拟机栈是线程私有的,每个线程创建的同时都会创建JVM栈,
JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,
非基本类型的对象在JVM栈上仅存放一个指向堆上的地址
 

猜你喜欢

转载自my.oschina.net/mengzhang6/blog/1619595
今日推荐