java存储方式的学习

Bruce Eckel在《ThinKing in Java》中提到:  java的存储可以分为六块。

第一:寄存器位于处理器内部。但是程序员不能控制其内存分配,是由编译器根据需求来决定是否存储在寄存器中。
第二:RAM,具体又分为三种:
a:堆栈
存储java编译器能够确定大小以及生命周期的数据,比如对象引用以及基本类型变量。它主要是通过“堆栈指针”
来实现的,“堆栈指针”下移,则分配内存,“堆栈指针”上移,则释放内存。
b:堆
存储对象。
c:静态存储
来存储static关键字修饰的某个对象的特定元素。java对象是不可能存放在静态存储空间里的。
第三:常量存储
常量值通常直接存储在程序代码内部。但在嵌入式中可以存储在ROM中。
第四:非RAM存储
完全存活于程序外部的,比如流对象和持久化对象。

 


 

java虚拟机加载class文件时,分配存储空间的顺序:

首先会调用static成员和static块,仅初始化一次;然后是基本数据成员,然后是构造函数。(先父类,后子类)

代码示例:

/**
 *
 */
package com.tjb.foundation.test;

/**
 * @author tjbworkshop
 *
 */
class LoadSequenceA{
 static int testIntA = 5;
 static{
  System.out.println(testIntA);
  System.out.println("1");
 }
 public LoadSequenceA(){
  System.out.println("a");
 }
}
class LoadSequenceB extends LoadSequenceA{
 int testIntB = 6;
 static{
  System.out.println("2");
 }
 public LoadSequenceB(){
  System.out.println(testIntB);
  System.out.println("b");
 }
}
public class LoadSequence {

 /**
  *
  */
 public LoadSequence() {
  super();
  // TODO Auto-generated constructor stub
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  LoadSequenceA a = new LoadSequenceB();
  System.out.println("************");
  a = new LoadSequenceB();
 }

}

结果:

5
1
2
a
6
b
************
a
6
b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值