Java内存机制

Java 内存机制

学习Java内存机制

基本类型 VS 引用类型

  1. 基本类型,它的值就是一个数字,一个字符或一个布尔值。java中有四类八种:
    四类:1,整型 2,浮点型 3,字符型4,逻辑型
    八种:byte,short,char,int,long,float,double,boolean
  2. 引用类型:是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。1

堆和栈 2

Java中的内存分为堆和栈。
栈:
1. 基本类型的变量和对象或者数组的引用变量会被存放在栈里,
2. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
3. 优势是存取速度快,存在栈中的数据可以共享
4. 缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

堆:
1. 堆内存用来存放由new创建的对象和数组。
2. 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
3. Java的堆是一个运行时数据区,堆是由垃圾回收来负责的
4. 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,
5. 缺点是,由于要在运行时动态分配内存,存取速度较慢。

因其各自的优势,栈被用来执行程序,堆被用来存放对象。
与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

总结

一张图总结下以上说的内容:
Java内存机制

应用

  1. C/C++的函数中返回一个数组(局部变量)的指针是会造成错误的,Java中为什么就能返回一个局部变量表示的数组呢? 代码注释中给了一种解释3,还有一种解释是该java程序是通过new来创建数组的,在C++中如果也通过new的方式来创建数组的话,也是可以返回数组指针的。4
private static int[] Create_Array(int len){
    // array放在堆中 在 java 里,由于是进行引用传递,他会在每一次对象赋值的时候进行引用计数,
    // 如果计数不为0,就不会回收局部变量,那么也就不会造成消失的问题 也就是当没有引用指向它的时候,
    // 垃圾收集器会在适当的时候 把他清除。以上就是JAVA运行机制中的一部分(垃圾收集)
    int[] array = new int[len];

    // 生成随机数
    for(int i = 0; i < len; i ++){
        array[i] = (int)(Math.random() * 100);
    }
    return array;
}
  1. 待续

  1. java中的引用类型和值类型的区别 https://juejin.im/post/59fd383a51882561a3264e4d
  2. Java内存机制,内存地址 http://www.cnblogs.com/IT-Monkey/p/3640596.html
  3. Java和C的区别:关于调用函数返回局部变量 https://bbs.youkuaiyun.com/topics/390901375
  4. 【C++基础之三】函数中局部变量的返回 https://blog.youkuaiyun.com/jackystudio/article/details/11523353
内容概要:本文详细介绍了在Linux环境下进行C++开发所需掌握的内容,以一个Web多人聊天项目为例,涵盖从开发环境搭建到项目部署的全过程。首先推荐了一个项目地址,该项目支持HTTP请求、Websocket、多房间和多人聊天、MySQL用户信息存储、Redis缓存、json序列化等功能,并建议扩展功能如基于Reactor模型构建HTTP/Websocket服务、仿写MySQL/Redis连接池等。接着介绍了开发环境,包括Ubuntu 20.04、MySQL 8.0、Redis 6.0、gcc/g++ 10.5.0等,并提供了详细的部署步骤,如安装boost库、编译聊天室服务、配置MySQL和Redis等。最后分析了项目架构,包括数据存储(MySQL存储用户信息,Redis存储房间消息和用户cookie)、消息格式(HTTP请求消息和Websocket交互消息)、HTTP/Websocket数据处理流程等。; 适合人群:有一定Linux基础,想深入了解C++开发及网络编程的开发者,尤其是有志于从事Web开发或服务器端开发的技术人员。; 使用场景及目标:①掌握Linux C++开发环境的搭建,包括工具链的安装与配置;②理解并实践HTTP、Websocket等网络协议的应用;③熟悉MySQL、Redis等数据库的使用;④学习如何处理HTTP请求、Websocket交互消息及数据存储;⑤能够独立完成类似Web聊天室的项目开发。; 其他说明:本文不仅提供了理论指导,还给出了具体的实践操作步骤,如编译过程中可能遇到的问题及解决方案。对于初学者来说,可以按照文中提供的链接和教程逐步学习,同时鼓励读者根据自身需求对项目进行扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值