易截截图软件、单文件、免安装、纯绿色、仅160KB

Java内存管理(一、内存分配)

关于Java内存分配,很多问题都模模糊糊,不能全面贯通理解。今查阅资料,欲求深入挖掘,彻底理清java内存分配脉络,只因水平有限,没达到预期效果,仅以此文对所研究到之处作以记录,为以后学习提供参考,避免重头再来。
 
一、Java内存分配
1、 Java有几种存储区域?
* 寄存器
     -- 在CPU内部,开发人员不能通过代码来控制寄存器的分配,由编译器来管理
* 栈
     -- 在Windows下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域,即栈顶的地址和栈的最大容量是系统预先规定好的。
     -- 优点:由系统自动分配,速度较快。
     -- 缺点:不够灵活,但程序员是无法控制的。
     -- 存放基本数据类型、开发过程中就创建的对象(而不是运行过程中)
* 堆
     -- 是向高地址扩展的数据结构,是不连续的内存区域
     -- 在堆中,没有堆栈指针,为此也就无法直接从处理器那边获得支持
     -- 堆的好处是有很大的灵活性。如Java编译器不需要知道从堆里需要分配多少存储区域,也不必知道存储的数据在堆里会存活多长时间。
* 静态存储区域与常量存储区域
     -- 静态存储区用来存放static类型的变量
     -- 常量存储区用来存放常量类型(final)类型的值,一般在只读存储器中
* 非RAM存储
     -- 如流对象,是要发送到另外一台机器上的
     -- 持久化的对象,存放在磁盘上
2、 java内存分配
     -- 基础数据类型直接在栈空间分配;
     -- 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收;
     -- 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量;
     -- 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完后从栈空间回收;
     -- 局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收;
     -- 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用


相关文档:

JAVA AWT 事件处理及内部类的实现


import java.awt.*;
import java.awt.event.*;
public class TestFrame {
 Frame fm = new Frame();
 public void init(){
  
  fm.setSize(300,300);
  Button btn = new Button("ok");
  
  fm.add(btn);
  btn.addActionListener(ne ......

Java数组的复制(对象数组)

先看看下面的代码,大家猜猜输出是什么
package com.captain.test;
public class ArrayTest {
public static void main(String[] args){
//新建一个对象(OneNum)数组(赋值为5、3、4)
OneNum[] ac = {new OneNum(5),new OneNum(3),new OneNum(4)};
//新建一个与ac同长度的对象(OneNum)数组
OneNum[] n ......

java动态调用类

package tf;
public class TestPack {
public static void main(String [] args)
{
try
{
IAnimal cAnimal = new bird();
cAnimal.shout();
IAnimal animal =(IAnimal)java.lang.Class ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号