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
分享到:
相关推荐
5. **变量与常量**:变量是存储数据的容器,可以声明为特定的数据类型。常量则是不可更改的值,通常用关键字`final`声明。 6. **运算符**:Java支持算术运算符(+,-,*,/,%),关系运算符(==,!=,>,<,>=,)...
2. **与数据库集成**:Tomcat可以通过JDBC驱动连接各种关系型数据库(如MySQL、Oracle等),实现数据的持久化存储。 3. **与消息中间件集成**:如与ActiveMQ、RabbitMQ等消息队列服务集成,实现异步通信和消息传递。...
本文档“Java持久化数据结构详解.pdf”可能会深入探讨如何在Java中存储和检索数据,以便在应用程序重启或关闭后仍然能够访问。持久化不仅仅是将数据保存在磁盘上,还包括对数据的管理,例如数据库操作、序列化以及云...
Java_IO流详解 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
7. **集合框架**:Java2引入了丰富的集合框架,包括List、Set、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类,提供高效的数据存储和操作。 8. **输入/输出流**:Java的IO流系统支持对文件、...
"Java数据结构 详细讲解"这本书深入浅出地介绍了这个主题,它不仅提供了理论知识,还通过程序代码、实例以及学习工具来帮助读者更好地掌握这些概念。 首先,让我们探讨一下Java中的基本数据结构。数据结构是组织和...
此外,Java的集合框架,如ArrayList、HashMap等,为数据存储和操作提供了便利。 Java从C/C++发展而来,但它在内存管理和安全性上有显著改进。Java的垃圾回收机制自动管理内存,避免了内存泄漏,而它的类型检查和...
链表则通过节点间的引用关系进行数据存储,插入和删除快速但访问速度较慢。栈和队列是两种特殊的线性数据结构,栈遵循“后进先出”原则,而队列遵循“先进先出”原则。树和图数据结构在处理层次关系和网络问题时非常...
扫雷程序使用二维数组来存储扫雷程序的数据。数组的行和列的大小可以根据需要进行设置。 本篇文章详细讲解了Java扫雷程序的代码实现,包括扫雷程序的设计、组件、构造函数、事件处理、计时器、菜单栏、面板和数组等...
这些Java数据结构在实际编程中有着广泛的应用。例如: - 数组适用于存储固定大小且类型相同的元素集合,常用于基础计算和内存效率要求高的场景。 - 列表(如ArrayList和LinkedList)在需要动态调整大小和频繁增删...
《精通Hibernate:Java对象持久化详解》是一本深入解析Hibernate技术的专著,它主要针对Java开发者,旨在帮助他们理解和掌握Java对象持久化的精髓。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了...
### Java Web技术详解 #### 一、概述 Java Web技术是一种广泛应用于网站开发的重要技术栈,它涵盖了从前端页面设计到后端业务逻辑处理的全过程。随着互联网的飞速发展,Java Web技术也在不断地更新迭代,以适应...
**Java贪吃蛇游戏详解** 贪吃蛇游戏是一款经典的计算机游戏,它在各种平台上都有实现,包括Java。这个Java版本的贪吃蛇游戏由六个主要文件组成,它们协同工作,为玩家提供一个交互式的游戏体验。以下是每个文件的...
4. **集合框架**:Java2引入了强大的集合框架,包括ArrayList、LinkedList、HashMap等,它们为数据存储和操作提供了丰富的选择。书中会详细讲解这些集合类的使用方法及底层原理。 5. **输入/输出流**:Java的I/O流...
在Java应用程序中,可以通过Java Database Connectivity (JDBC) API来调用MySQL的存储过程。 首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro...
《Java.Web开发详解》是一本深入探讨Java在Web开发中的应用的专业书籍,其源代码提供了丰富的实例和练习,帮助读者更好地理解和实践所学知识。在本文中,我们将深入解析这些源代码,探讨其中的关键知识点,旨在提升...
Java 中的 IO 流详解 Java 中的 IO 流是指在 Java 语言中对输入输出操作的抽象,主要用于实现程序与外部设备和其他计算机之间的交流,尤其是对磁盘文件的操作。IO 流的概念是在 1984 年由 C 语言第一次引入的,后来...
它不关心用户界面的呈现方式,只关注数据的存储和管理。在MVC架构中,模型对象通常与数据库或其他数据源交互,获取和更新数据。当模型状态改变时,它会通知控制器,以便更新视图。 ### View(视图) 视图是用户看到...
### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...
本资料“Java集合详解代码.zip”涵盖了Java集合框架的主要组成部分,包括List、Set、Map以及Collections工具类,通过代码实现来帮助理解和掌握这些概念。 1. **List接口**:List是有序的集合,允许重复元素,支持...