Java核心技术(一)——万物皆对象

本文深入探讨Java中对象的存储位置,包括寄存器、堆栈、堆、常量存储及非RAM存储等,详细解析了String类型在常量池和堆中的存储方式,以及垃圾回收机制如何避免内存泄露。

JAVA编程思想

第二章 一切都是对象

java中创建的对象存储到了什么地方
  • 寄存器:这是最快的存储区
  • 堆栈:位于通用RAM中
  • 堆:一种通用内存池,用于存放所有Java对象
  • 常量存储:直接放在程序代码内部
  • 非RAM存储:数据存储活在程序之外,不受任何程序控制。流对象:对象转化成字节流,发送给另一台机器;持久化对象,对象放在磁盘上。
java中的堆、栈、常量池

栈、堆都是java在RAM中用来存放数据的地方,是由java自动管理的。

  • 栈:存取速度比堆要快,仅次于CPU中的寄存器,栈内存中的数据是可以共享的;缺点是栈中的数据大小和生存期是确定的,缺乏灵活性
    举例:int a=3;
    首先在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,如果没有,就开辟一个存放3这个字面值的地址,然后将a指向3的地址;如果有,则不用开辟3字面值的地址,直接指向地址。
  • 堆:所有用new xxx()创建的对象都在堆中存储,垃圾回收机制会动态的回收不再使用的数据;缺点是动态分配内存,存储速度慢。
  • 常量池:用来存放字符串常量和基本常量。
    • 关于String str="abc"的内部工作:
      1. 首先定义一个String类型的str变量存放在栈中
      2. 然后在常量池中查找是否存在内容为“abc”的对象
      3. 如果不存在,则在常量池中创建内容为“abc"的对象,并将str引用这个对象
      4. 如果存在,则str直接引用这个对象
    • 关于String str=new String(“abc”);的内部工作
      1. 首先定义一个String类型的str变量存放在栈中

      2. 然后在堆(不是常量池)中创建一个指定的对象,并让str指向这个对象

      3. 在常量池中查找是否存在内容为"abc"的字符串对象

      4. 如果不存在,则在常量池中创建内容为"abc"的字符串对象,指向常量池中的对象

      5. 如果存在,则让new出来的字符串对象与常量池中的对象联系起来,指向常量池中的对象

        对于字符串:对象的引用变量都是存储在栈中,如果在编译器创建好的话(直接用双引号定义的),就放在常量池中;如果是运行期(new)出来的话,就放在堆中。常量中的字符串对象永远自由一份,而堆中的字符串对象有多份
        以上,就很好的解释了一个面试题:String s = new String(“abc”);产生几个对象?答:一个或两个,如果常量池中原来没有”abc”,就是两个。

高精度数字

java中数字精度丢失的原因:

计算机进行的是二进制运算,我们输入的十进制会在计算机中转化成二进制,进行运算后再转化成十进制输出。然而double和float在进行二进制转化的时候,有些数字不能够完全转化,只能够无限的接近原本的值

所以java提供了两个高精度计算的类:BigInteger和BigDecimal。能够计算任意精度、任意大小的数。

java中的垃圾回收机制

java中有一个垃圾回收器,用来监视new创建的所有对象,并辨别那些不再被使用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用,这样就消除了”内存泄露“。

static关键字

当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。所以,即是从未创建过某个类的任何对象或方法,也可以用static访问static域。

引用static变量有两种方法:一种是实例化一个对象,通过对象类调用;另一种是直接通过类名.方法/属性进行调用。

static字段对每个类来说只有一份存储空间,而非static字段则是对每个对象有一个存储空间。

【负荷预测】基于VMD-CNN-LSTM的负荷预测研究(Python代码实现)内容概要:本文介绍了基于变分模态分解(VMD)、卷积神经网络(CNN)和长短期记忆网络(LSTM)相结合的VMD-CNN-LSTM模型在负荷预测中的研究与应用,采用Python代码实现。该方法首先利用VMD对原始负荷数据进行分解,降低序列复杂性并提取不同频率的模态分量;随后通过CNN提取各模态的局部特征;最后由LSTM捕捉时间序列的长期依赖关系,实现高精度的负荷预测。该模型有效提升了预测精度,尤其适用于非平稳、非线性的电力负荷数据,具有较强的鲁棒性和泛化能力。; 适合人群:具备定Python编程基础和深度学习背景,从事电力系统、能源管理或时间序列预测相关研究的科研人员及工程技术人员,尤其适合研究生、高校教师及电力行业从业者。; 使用场景及目标:①应用于日前、日内及实时负荷预测场景,支持智慧电网调度与能源优化管理;②为研究复合型深度学习模型在非线性时间序列预测中的设计与实现提供参考;③可用于学术复现、课题研究或实际项目开发中提升预测性能。; 阅读建议:建议读者结合提供的Python代码,深入理解VMD信号分解机制、CNN特征提取原理及LSTM时序建模过程,通过实验调试参数(如VMD的分解层数K、惩罚因子α等)优化模型性能,并可进步拓展至风电、光伏等其他能源预测领域。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值