`

java数据存储方式详解

    博客分类:
  • java
 
阅读更多

 

1.每个java虚拟机实例(进程)运行一个java程序(线程).程序结束,虚拟机退出.

2.java虚拟机通过调用调用这样的一个方法来启动java程序:public static void main(String [] arg){};

3.java虚拟机实例的内部有两种线程:守护线程,非守护线程.守护线通常是虚拟机实例自己使用的,比如执行垃圾收集的线程.但是java程序也可以把自己创建的线程标记为守护线程.但是java中的初始线程(开始于main()的那个线程)是属于非守护线程.当程序中的所有非守护线程结束了,则虚拟机退出.

4.java虚拟机实例包括:类装载器子系统,运行时数据区(方法区,堆,栈,程序计数器,本地方法栈),执行引擎.

A:类装载子系统:装载类,提取类的相关信息,将其数据放到运行时数据区的相应部位.其过程包括:装载:查找并装载类的二进制数据----连接:验证(确保导入的类型是正确的).准备(属性分配内存,并初始化为默认值).解析(把类型中的符号应用转化为直接引用.)-----初始化:把类属性初始化为正确的初始值.

B:方法区:虚拟机实例中所有的线程共享.存储类解析后的一切信息.

细化为:

a:常量池:虚拟机实例为每个类型创建一个常量池.存放直接常量("sd",3,3.45,'a'),用final修饰的

b:静态存储区:存储static修饰的

c:一般属性信息:名称 类型 修饰符

d:方法信息:名称 返回类型 参数数量和类型 修饰符,如果不是抽象方法还有保存:方法的字节码,操作数栈,栈帧中局部变量的大小,异常表.

C:堆:虚拟机实例中所有的线程共享.存储java程序中的所有对象(new出来的)

D:栈:每个线程都要自己的栈.每个线程被创建时分配自己的栈,其中存储方法的参数 局部变量,运算的中间结果,返回值.java的栈是由很多的栈帧组成的,每个帧都保存着一个方法的调用状态.

E:程序计数器:每个线程都要自己的程序计数器.每个线程被创建是分配一个程序计数器,总是指向下一条要执行的指令.

F:本地方法栈:每个线程中都要自己的本地方法栈.

 

代码实例:

 

 

class BirthDate {  
    private int day;  
    private int month;  
    private int year;      
    public BirthDate(int d, int m, int y) {  
        day = d;   
        month = m;   
        year = y;  
    }  
    省略get,set方法………  
}  
  
public class Test{  
    public static void main(String args[]){  
int date = 9;  
        Test test = new Test();        
           test.change(date);   
        BirthDate d1= new BirthDate(7,7,1970);         
    }    
  
    public void change1(int i){  
        i = 1234;  
    }  

 

 对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

1. main方法开始执行:int date = 9;
date局部变量,基础类型,引用和值都存在栈中。
2. Test test = new Test();
test为对象引用,存在栈中,对象(new Test())存在堆中。
3. test.change(date);
i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。
4. BirthDate d1= new BirthDate(7,7,1970);  
d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。
5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(),new BirthDate()将等待垃圾回收

  • 大小: 12 KB
分享到:
评论

相关推荐

    Java数据库技术详解PPT

    在使用Java进行开发时,往往需要使用数据库来存储数据......

    Java数据库技术详解 DOC简版

    第一篇 数据库基础篇 第1章 Java和数据库 1.1 Java概述 1.2 Java的开发和运行环境 1.3 数据库概述 1.4 数据持久层 ...6.2 CallableStatement...第18章 XML存储数据 第六篇 项目实战篇 第19章 学籍管理系统

    详解Java中的char型数据

    char型是存储字符的数据类型,它在机器中占16位,范围为0-65535。Java中的char型与C/C++中的char型不同。在C /C++中,char型采用的是ASCII字符集,宽度为8位,范围为0-255,而Java中char型采用的是Unicode字符集,...

    java堆栈的区别 -- 详解

    其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)...

    Java多线程编程详解

    Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 ...

    java中HashMap详解

    HashMap是Java中非常常用的一种数据结构,它实现了Map接口,用于存储键值对。HashMap内部使用哈希表来实现,通过将键映射到哈希表中的一个位置来快速查找和插入元素。 HashMap的主要特点是: 非线程安全:如果多个...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.6 通过Hibernate调用存储过程  9.7 小结  9.8 思考题 第10章 映射组成关系  10.1 建立精粒度对象模型  10.2 建立粗粒度关系数据模型  10.3 映射组成关系  10.3.1 区分值(Value)类型和实体(Entity)类型...

    Android开发之数据的存储方式详解

    在Android中,数据的存储分为两种方式: 1、直接以文件的形式存储在目录中 2、以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1、生成.txt文件 2、生成xml文件 那么今天就来详细的说一下以文件的形式...

    《Java和Android开发实战详解》第18章 Google地图与定位服务代码-by 南邮-陈杨

    第16章讲解了存储数据、文件和SQLite数据库;第17章讲解内容提供者、广播接收器与信息提醒的系统服务;第18章讲解了GPS定位服务与Google地图开发的知识。  《Java和Android开发实战详解》适合Android开发入门者、...

    阿里云对象存储服务详解

    第一部分:阿里云OSS云存储简介 什么是阿里云存储服务 OSS与自建存储对比的优势 应用场景 计量计费 第二部分:OSS云存储基本概念 ...java访问OSS SpringBoot 访问OSS 数据处理(图片 音视频 IMM) CDN加速

    seaweed 文件存储系统详解

    对公布式文件存储系统seaweedfs的使用详细说明,以及一些架构说明,可以用于存储图片, 视频,文档等内容

    java虚拟机详解.docx

    而每个线程创建的时候,都会拥有自己的程序计数器和 Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈...

    Java加密技术详解(参考文档)

    本文详细介绍了Java中的加密技术,包括对称加密、非对称加密和哈希算法等,并通过实例演示了如何在实际项目中应用这些加密技术。...通过本文的学习,读者可以掌握Java中的加密技术,确保数据的安全传输和存储。

    MySQL操作之JSON数据类型操作详解

    上一篇文章我们介绍了mysql数据存储过程参数实例详解,今天我们看看MySQL操作之JSON数据类型的相关内容。 概述 mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-037-Java基本语法-数据存储.avi 北京动力节点-Java编程零基础教程-038-Java基本语法-十进制到二进制转换.avi 北京动力节点-Java编程零基础教程-039-Java基本语法-二进制到十进制...

    Java NIO Buffer过程详解

    主要介绍了Java NIO Buffer过程详解,缓冲区在java nio中负责数据的存储。缓冲区就是数组。用于存储不同数据类型的数据。,需要的朋友可以参考下

    实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。下面通过本文给大家介绍Android文件存储数据方式。 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在...

    java操作mongoDB查询的实例详解

    旨在为WEB应用提供可扩展的高性能数据存储解决方案。  MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式...

    Java基础知识点总结.docx

    集合框架:★★★★★,用于存储数据的容器。 76 < java.util > Collection接口 77 < java.util >Iterator接口 78 < java.util >List接口 78 < java.util >Set接口 80 < java.util >Map接口 81 把map集合转成set的...

Global site tag (gtag.js) - Google Analytics