java内存管理

来源:互联网 发布:淘宝卖纸巾怎么上架 编辑:程序博客网 时间:2024/06/15 22:25

1):知道  java程序--java虚拟机----操作系统  间关系

         1出现虚拟机为保证与平台无关性

         2 程序所要内存超出初始空间,JVM会再向OS申请内存的

         3 如果java JVM已申请的内存达到规定的最大空间,程序还需要的话,出现内存溢出

 

 

 

开发者只关心javaJVM如果管理内存的,不管OS是怎么管理内存的。

JVM是如何管理内存的?

 

JVM内存= 方法区+堆区+栈区   三区内存都有限制,都会存在内存溢出问题。

方法区 = 保存类的结构(属性+方法),类静态成员等。默认64MB

= 存放对象持有的数据,同时保存对原类的引用。默认64MB

= 程序运行时,遇到方法,它供局部变量(基本型+引用型),调用结束,JVM自动回收。

基本型存放变量值,而引用则存放对象的引用(保存的是堆中对象的地址)  

三者关系:

 

2)值传递和引用传递

              我们知道,当一个方法调用另一个方法时,JVM会在栈中划分一个栈帧给新的方法,而方法有参数,参数值是如何从一个栈帧传到另一个栈帧呢?参数类型不同会为值传递和引用传递。

       1参数是基本型:JVM会拷贝参数的值放入新的栈帧中。

       2参数是引用型:JVM   拷贝引用对象在堆中的地址,放入新栈帧

         中,引用之所以拷对象地址不是对象数据,为提高效率,减少

         内存浪费,

3):垃圾回收机制

       GCGarbage Collection  Programer手工申请内存,不用手工编码

              释放,JVM自动回收不用的内存,此机制为垃圾回收机制

       栈:方法调用时划分栈帧,调用结束回收栈帧,不用垃圾回收。      

       堆:回收不再被引用的对象数据所占用的内存。

       方法区:回收不再被对象引用的类结构所占用的内存。

       使用Runtime来测试内存使用情况

4):字符串在内存中的分配。

       java为节省内存,提出“字符串池”概念;在内存中划分一

       片区--字符串池,编译时可确定字符串常量存入池中,

5):+号在内存的操作  String 类是在不停的创建对象。