JVM详解

JVM详解

jvm组成结构

java virtual Machine -> 操作系统 -> 硬件系统 jvm是运行在操作系统上的,与硬件系统没有直接交互

1.ClassLoader 类加载器

​ 负责加载.class文件

2.Native Interface 本地接口

调用时加载到本地方法区,使用其他的语言编写,很少使用。

3.Method Area方法区

方法区是被所有线程共享,所有方法的信息都保存在这里

静态变量+常量+类信息+运行时常量池(1.6)+实例变量存储在堆中

4.Pc Register 程序计数器

每个线程都有一个程序计数器,就是一个指针,指向方法区中的字节码,由执行引擎读取下一条指令

5.Native Method Stack 本地方法栈

登记native方法,在执行引擎运行时加载native库。

堆栈详解

栈也叫栈内存,主管java程序的运行。生命周期随着线程的生命周期结束,是线程私有的。基本类型的变量和引用类型的引用存储在栈中。

主要保存:

1.本地变量:输入、输出参数和方法中的局部变量

2.栈操作:出栈、入栈的操作

3.栈帧数据:包括类文件、方法等。 栈帧是一个方法和运行期数据的数据集

三种jvm

1.sun公司的HotSpot

2.BEA公司的JRockit

3.IBM公司的J9 VM

堆内存详解
        |伊甸区    存放刚new出来的对象   

  新生区 |幸存者0区										

   	  |幸存者1区
   |养老区

   |永久存储区      存放jdk自带class和Interface的元数据
   
   一、GC
   对伊甸区的gc叫Minor Gc
   对养老区的gc叫Full Gc,如果gc后还不能释放内存则报OutOfMemeryError:Java heap space
   二、虚拟机内存不够原因(理论上默认为内存的四分之一)
   1.java虚拟机的堆内存不够,通过-Xmx、-Xms参数调整
   2.代码中创建了大量对象,并且长时间不能够被回收(存在引用)
   三、永久区  OutOfMemeryError:PermGen space  永久代内存不够
   1.jdk1.6及之前   有永久代,常量池1.6在方法区
   2.jdk1.7  有永久代,但已经逐步去永久代。常量池1.7在堆
   3.jdk1.8及以后  无永久代,常量池在元空间
   
GC算法

1.复制算法 新生代的gc算法,默认达到老年代的年龄为15 10%的空闲空间 10%的活动空间 80%的用来分配内存

2.标记清除/整理算法 老年代的gc算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值