Java序列化,类加载器,堆和栈区别

本文深入讲解Java序列化机制,探讨其在网络传输中的作用,解析Java平台独立性的原理,包括中间码与JVM的角色,以及类加载器的工作机制。同时,对比了Java堆和栈的区别,阐述它们在内存管理中的角色。

1、什么是Java序列化

在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象以一连串的字节描述的过程解决在对对象流进行读写操作时所引发的问题

序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要时把流读取出来重新构造一个相同的对象。

如何实现序列化?

实现serializable接口

2、为什么说Java是平台独立性语言

保证Java具有平台独立性的机制为“中间码”和“JVM”。Java程序编译后不是生成能在硬件平台上可执行的代码,而是生成一个中间码,不同的硬件平台上安装有不同的JVM,由JVM负责把“中间码”翻译成硬件平台能执行的代码。

解释执行过程分3步:代码的装入、代码的校验和代码的执行。装入代码的工作由“类加载器”完成,被装入的代码由字节码校验器进行检查。

3、类加载器的实质:把类文件从硬盘读取到内存中。分为隐式加载和显式加载两种。隐式加载指程序使用new等方式创建对象时会隐式调用类的加载器将对应类加载到JVM中,显式加载指通过直接调用class.forName方法把所需类加载

类加载的主要步骤分为3步:

1)装载:根据查找路径找到对应class文件,然后导入

2)链接:检查(检查待加载的class文件的正确性)、准备(给类中的静态变量分配存储空间)和解析(将符号引用转换成直接引用)

3)初始化:对静态变量和静态代码块执行初始化工作。

引申:

一个Java程序运行从上到下的环境次序是:Java程序、JRE/JVM、操作系统、硬件。

4、JVM:是一个虚构出来的计算机,用来把Java编译生成的中间代码转换为机器可以识别的编码并运行。它有自己完善的硬件架构,例如处理器、堆栈、寄存器等,还具有相应的指令系统,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在JVM上运行的目标代码(即字节码),就可以在多种平台上顺利运行。

每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出,JVM实例通过调用类的main()方法启动一个程序。

5、Java堆和栈的区别

在Java中,堆和栈都是内存中存放数据的地方。

变量分为基本类型和引用类型,基本数据类型的变量和对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放,引用类型的变量,内存分配在堆上或常量池中,需要通过new方式创建。

栈内存管理通过压栈和弹栈操作完成,以栈帧为基本单位管理程序的调用关系;

堆内存用来存放运行时创建的对象,由于Java是基于堆栈的虚拟机,每个Java程序都运行在一个单独的JVM实例上,每一个实例都唯一对应一个堆,一个Java程序内的多个线程也就运行在同一个JVM实例上,因此线程间共享堆内存(需要数据同步)

相较于堆,栈的存取速度更快,但大小和生存期必须是确定的,而堆可以在运行时动态地分配内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值