下载此文档

java内存分配机制.pdf


文档分类:IT计算机 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
Java 内存分配与管理是 Java 的核心技术之一,之前我们曾介绍过 Java 的内存管理与
内存泄露以及 Java 垃圾回收方面的知识,今天我们再次深入 Java 核心,详细介绍一下 Java
在内存分配方面的知识。一般 Java 在内存分配时会涉及到以下区域:
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
◆堆:存放用 new 产生的数据
◆静态域:存放在对象中用 static 定义的静态成员
◆常量池:存放常量
◆非 RAM 存储:硬盘等永久存储空间
Java 内存分配中的栈
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当该变量退出
该作用域后, Java 会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作
他用。
Java 内存分配中的堆
堆内存用来存放由 new 创建的对象和数组。在堆中分配的内存,由 Java 虚拟机的自动
垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变
量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变
量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的
引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。
引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被
释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句
所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指
向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确
定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。
实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
常量池(constant pool)
常量池指的是在编译期被确定, 文件中的一些数据。除了
包含代码中所定义的各种基本类型(如 int、long 等等)和对象型(如 String 及数组)的
常量值(final)还包含一些以文本形式出现的符号引用,比如:
◆类和接口的全限定名;
◆字段的名称和描述符;
◆方法和名称和描述符。
虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个
有序集和,包括直接常量(string,integer 和 floating point 常量)和对其他类型,字段
和方法的符号引用。
对于 String 常量,它的值是在常量池中的。而 JVM 中的常量池在内存当中是以表的形
式存在的, 对于 String 类型,有一张固定长度的 CONSTANT_String_info 表用来存储文字
字符串值,注意:该表只存储文字字符串值,不存储符号引用。说到这里,对常量池中的
字符串值的存储位置应该有一个比较明了的理解了。
在程序执行的时候,常量池会储存在 Metho

java内存分配机制 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人drp539603
  • 文件大小0 KB
  • 时间2015-09-25