JAVA/C++ 堆栈详解

本文探讨了Java和C++在内存分配上的差异,重点在于堆栈的使用。在C++中,局部对象存储在栈上,生命周期随函数结束而销毁,堆内存需手动释放。而在Java中,所有对象都在堆上创建,不需要手动释放。文章警告不要返回超出栈顶对象的引用或指针,并总结了两者在返回对象引用上的不同。
摘要由CSDN通过智能技术生成

最近在读《Thinking in Java 》,在博客上分享下笔记。小白入门,欢迎批评指正!

1. Java与C++在内存分配上的异同

内存区域 共性 C++ Java
寄存器 位于处理器内部,最快的存储区,由编译器根据需求进行分配,无法直接控制,也不能在程序中感觉到寄存器存在的任何迹象。 C和C++允许向编译器建议寄存器的分配方式。
位于通用RAM中,由编译器自动分配释放,存放基本数据类型及对象引用等。创建程序时,系统知道存储在栈内的所有项的确切生命周期。 C++的局部对象也分配在栈中,函数结束后对象被自动销毁。 Java不允许创建局部对象,所以Java对象永远不可能存储于此
位于RAM区,供程序员分配的内存区域(new、malloc) C++中new、malloc创建的对象或分配的内存空间,使用完后必须手动释放delete、free,否则可能会出现内存泄漏 Java中new出来的对象或数组。由JVM垃圾回收器进行管理,使用后无需手动释放。
其他 静态区、文字常量区、程序代码区 方法区(也叫静态区),存放整个程序中唯一的元素,如class和static变量,能被所有线程共享。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值