Java虚拟机的内存结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java虚拟机的内存结构相关的知识,希望对你有一定的参考价值。

1) stack栈内存:用于运行线程,包括了方法里的临时数据,存放的是线程运行的局部变量,还有对象的引用



1, Java虚拟机的内存结构

1) heap 堆内存:对象的实例

2) non heap 非堆内存:方法区域:运行时常量值和静态方法。

例如:person p = new person();

   P 这变量是对象的引用存在stack中, new person()是一个对象的实例,存在堆中。

 

 

 

2, java 的内存模型:heap perm(永久代)

1heap eden 新生代 minor gc 新生代的垃圾回收)  +   old memory 年老代(major gc 年老代的垃圾回收器)。

2heap -xms 最小值  -xmx 最大值。-xmn年轻代的大小

3perm-xx:permsize 最小值, -xx:maxpermsize 最大值。

 

 

 

3, 年轻代:新创建的对象都在年轻代中。

特点:minor gc 执行速度很快,基本看不出应用线程停止。  

4, 年老代:当一个对象被minor gc 多次垃圾回收的时候,都没有收集回去的时候,这个对象就会被转移到年老代。

Major gc:年老代内存被占满时开始执行垃圾回收,major gc 会花费很长时间,并且在执行的时候应用线程会全部停止(stop the world)。

由于major gc 会检查所有存活对象,因此会花费更长时间,应该经量减少major gc 的执行,因为在major gc 垃圾回收期间让你的应用反应迟钝,所以如果你有一个需要快速响应的应用发送多次major gc 时,可能会出超时错误。

5, 垃圾回收时间取决于垃圾回收策略。这就是为什么需要监控和调优垃圾回收,从而避免jvm执行major gc 

6, 永久代:包含了java需要的应用元数据,永久代不是java堆内存的一部分。包含了java se 库的类和方法。 存放了jvm运行时使用的类 永久代的对象是在full GC时进行垃圾收集。  例如,jar 包。

 

 

 

 

 

7, jvm的性能调优:

set java_opts=-xms=1024M –XMX=1024…..

 

-XMS: 在生产环境中,-xms -xmx 最好是设置成一样大,这样的好处是可以减少minor gc 的频率。

-XMX:

-XMN:新生代大小一般是-xms的百分之三四十。

-XX:Permsize:基本是看项目的大小,项目中的jar包特别多,tomcat中运行多个jar项目,这个时候需要调大这个值。 因为在服务启动的时候,会把所有class类都加载进来。

-xx:maxpermsize

 


以上是关于Java虚拟机的内存结构的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机二 虚拟机的基本结构

Java虚拟机的内存结构

Java虚拟机的内存结构

JAVA 虚拟机的内存模型

JVM系列第8讲:JVM 垃圾回收机制

Java虚拟机的类载入机制