- 浏览: 521863 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (114)
- C基础 (1)
- C指针 (0)
- C语言库函数相关 (1)
- Linux (2)
- Linux网络编程 (1)
- PostgreSQL (0)
- Redis (2)
- Java Web (2)
- JAVA基础 (35)
- Ubuntu (8)
- Android (2)
- MySQL (3)
- 日志 (1)
- 书虫 (1)
- 数据结构 (0)
- 算法 (0)
- 开发工具 (1)
- 转载 (13)
- 英语 (18)
- tomcat启动脚本分析 (3)
- Oracle基础 (4)
- tomcat源码分析 (3)
- tomcat (1)
- Java相关 (1)
- Oracle基本原理--Oracle体系结构 (0)
- Oracle基本原理--表 (0)
- Oracle基本原理--索引 (0)
- Oracle基本原理--事务 (0)
- Oracle开发--SQL (1)
- Oracle基本原理--PL/SQL (0)
- Oracle基本原理--常用函数 (0)
- Oralce管理--用户及权限管理 (0)
- Oracle管理--安装调试 (0)
- Oracle管理--备份恢复 (0)
- Oralce管理--数据迁移 (0)
- Oracle管理--闪回 (0)
- Oracle管理--故障处理 (0)
- Oracle优化原理--统计信息 (0)
- Oracle优化原理--执行计划 (0)
- Oracle优化原理--诊断工具 (0)
- Oracle优化原理--深入理解表 (0)
- Oracle优化原理--深入理解索引 (0)
- Oracle优化原理--表连接原理 (0)
- Java--OOP (0)
- Java--异常 (0)
- Java--泛型 (0)
- Java--集合 (0)
- Java--IO (0)
- Java--枚举类型 (0)
- Java--注释 (0)
- Java--多线程 (0)
- Java--XML (0)
- Java--JDBC (3)
- Servlet (0)
- JSP (0)
- JSTL (0)
- 设计模式 (0)
- DAO与MVC (0)
- Javascript (2)
- Ajax (0)
- JQuery (0)
- HTML/CSS (0)
- 前端相关 (1)
- HTTP (0)
- TCP/IP (0)
- GO基础 (0)
最新评论
-
jsonmong:
推荐一个开发平台,采用的是插件化的设计思想,效果很不错的。ht ...
构建Java Web开发环境 -
wxm198427:
首先表示辛苦了!我想问个问题:我的是windows 7 x64 ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
握着橄榄枝的人:
我之前按照你的update mysql.user set pa ...
Windows7下MySQL5.5.20免安装版的配置 -
confident_f:
安装了32的客户端后,用plsql导入导出表有问题,生成不了d ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
confident_f:
安装数据库的时候第9步卡住了 是怎么回事呢?
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
在Java中,程序员会在乎内存中的两种区域:对象的生存空间堆(heap)和方法调用及变量的生存空间栈(stack)。当Java虚拟机启动时,它会从底层的操作系统取得一块内存,以及你是否能够调整它都要看Java虚拟机与平台的版本而定。但通常你对这些事情无法加以控制。
所有的对象都存活于可垃圾回收的堆上,方法调用在栈中执行,局部变量存活于栈中。
当你调用一个方法时,该方法会放在调用栈的栈顶。实际上被堆上栈的是堆栈块,它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。栈顶上的方法是目前正在执行的方法。
局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)。如果局部变量时基本数据类型,变量放在栈上;如果局部变量是个引用变量,变量本身会放在栈上,该变量引用的对象会在堆上。
例如:
实例变量是被声明在类而不是方法里面。它们代表每个独立对象的“字段”(每个实例都能有不同的值)。实例变量存在于对象所属的堆空间上。如果实例变量是基本数据类型的,则Java会依据基本数据类型的大小为该实例变量留下空间(位于对象所属的堆空间上),例如int型需要32位;如果实例变量是引用类型时,Java会为该引用变量留下空间(位于对象所属的堆空间上),并且另外为该引用变量指向的对象再分配一块堆空间(前提是其中的对象已初始化),最终引用变量与其所引用的对象都是在堆上。
例如:
所有的对象都存活于可垃圾回收的堆上,方法调用在栈中执行,局部变量存活于栈中。
当你调用一个方法时,该方法会放在调用栈的栈顶。实际上被堆上栈的是堆栈块,它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。栈顶上的方法是目前正在执行的方法。
局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间(也就是方法调用至执行完毕为止)。如果局部变量时基本数据类型,变量放在栈上;如果局部变量是个引用变量,变量本身会放在栈上,该变量引用的对象会在堆上。
例如:
public class B(){} public class A{ public void a(){ int i = 1; b(); } public void b(){ B b = new B(); } }

实例变量是被声明在类而不是方法里面。它们代表每个独立对象的“字段”(每个实例都能有不同的值)。实例变量存在于对象所属的堆空间上。如果实例变量是基本数据类型的,则Java会依据基本数据类型的大小为该实例变量留下空间(位于对象所属的堆空间上),例如int型需要32位;如果实例变量是引用类型时,Java会为该引用变量留下空间(位于对象所属的堆空间上),并且另外为该引用变量指向的对象再分配一块堆空间(前提是其中的对象已初始化),最终引用变量与其所引用的对象都是在堆上。
例如:
public class B{ int i = 1; } public class A{ int a = 1; long l = 12456; B b = new B(); }

发表评论
-
foreach循环
2013-06-24 16:15 1496从JDK1.5开始,Java提供了一个更简单的循环:forea ... -
可变参数
2013-06-24 15:38 1225从JDK1.5开始,Java允许使用可变参数为方法指定数量不确 ... -
泛型(core java 笔记)
2013-06-18 16:18 20741.为什么引入泛型 package generic; ... -
两个程序的说明
2010-10-19 09:26 11661、程序1的结果是: clas ... -
构造器初始化
2010-10-18 14:42 1535可以用构造器来进行初始化。在运行时刻,可以调用方法或执行某些动 ... -
成员初始化
2010-10-18 07:55 1247Java尽力保证:所有变量在使用前都能得到恰当的初始化。 对 ... -
线程的死锁
2010-10-11 19:21 1524当两个线程相互等待对方释放同步监视器时就会发生死锁,Java虚 ... -
线程的同步
2010-10-11 19:00 1290一个经典的关于线程安全性的问题:银行取钱问题。 银行取钱的基 ... -
java网站收集
2010-10-10 18:13 1295JAVA开发者最常去的25个英文网站:http://www.i ... -
控制线程
2010-10-10 16:06 20271、线程睡眠:sleep 如果我们需要让当前正在执行的线程暂 ... -
线程的状态
2010-09-28 19:00 1078线程从创建到执行完毕的整个过程称为线程的生命周期,在整个生命周 ... -
Java中Thread类的start()和run()的区别
2010-09-27 15:33 41391、start()方法来启动线程,真正实现了多线程运行,这时无 ... -
Java中创建线程的两种方法
2010-09-26 10:18 5648在Java中创建线程有两种方法:继承Thread类和实现Run ... -
创建String对象过程的内存分配小结
2010-09-23 20:32 2796常量池(Constant Pool):指的是在编译期被确定,并 ... -
Java堆和栈的区别 经典总结(转载)
2010-09-18 16:48 1289栈与堆都是Java用来在Ram中存放数据的地方。 与C++不 ... -
Java初学者都必须理解的七大问题
2010-09-18 10:36 1133问题一:我声明了什么 ... -
关于计算java程序运行时间(转载)
2010-09-18 09:22 1136//第一种,伪代码 long startTime= ... -
for循环的优化
2010-09-17 20:29 2159在程序中经常用到for循环,当一些算法实时性要求非常高时,对f ... -
详细解析Java中抽象类和接口的区别(转载)
2010-09-17 10:16 1127在Java语言中,abstract class和inter ... -
集合类(四):Map集合
2010-09-16 20:26 21555、Map集合 Map集合为映射类型,映射与集和列表有明显的区 ...
相关推荐
- **大小与生存期确定**:栈中存储的数据大小和生命周期在编译时即可确定,缺乏灵活性。 - **数据可以共享**:栈中的数据(特别是基本类型)可以被多个变量引用,从而实现数据共享。 #### 2. 堆(Heap) 堆是Java...
堆和栈是计算机内存管理中的两个重要概念,它们在程序执行过程中起着至关重要的作用。在深入探讨这两个概念之前,我们需要明确一点:堆和栈在内存结构上有着本质的区别。 栈(Stack)是一种线性数据结构,其特点是...
Java 中堆与栈的区别 Java 中的堆和栈是两个不同的内存区域,分别用于存放不同类型的数据。堆是一个运行时数据区,类的对象从中分配空间,通过new、newarray、anewarray 和 multianewarray 等指令建立,垃圾回收器...
### C++中的静态存储区、栈与堆的区别 在C++编程语言中,根据变量的存储方式和生命周期,可以将内存区域大致分为四个部分:静态存储区、栈、堆以及未初始化的数据段(BSS)。其中,静态存储区、栈与堆是程序运行时...
在Java编程中,“堆”与“栈”的概念至关重要。它们是程序运行时内存管理的核心部分。本文将深入探讨Java中堆和栈的区别及其工作原理。 #### 二、Java内存区域划分 在Java中,内存主要划分为以下几部分: 1. **栈...
栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。...
但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的...
一旦在栈中分配了空间,其大小就不能改变,生存期也由编译器决定。 4. 数据共享:栈中的数据可以被多个变量共享,例如,当两个变量都初始化为3时,它们可能指向栈中同一个3的值,改变其中一个变量的值不会影响另一个...
栈中的数据大小和生存期在编译时就已经确定,所以对于需要快速存取和生命周期短暂的数据,栈是理想的选择。 堆内存则更为灵活,它用于存储那些在运行时动态分配大小的对象。通过new操作符创建的对象和数组都存储在...
2. 存储空间:栈的空间有限,通常为几MB;堆空间较大,取决于系统的实际内存。 3. 内存效率:栈内存分配和释放速度快,而堆内存操作相对较慢。 4. 管理方式:栈由系统自动管理,堆则需程序员自己管理,可能导致内存...
栈内存中的数据大小和生存期在编译时是确定的,这使得它非常适合存储基本类型(如`int`, `double`, `boolean`等)和对象的引用。但是,栈内存不允许动态分配内存,因此其灵活性较低。 堆内存则提供了动态内存分配的...
与栈相比,堆的最大优点在于能够动态分配内存,其大小和生存周期无需事先告知编译器,由Java的垃圾回收机制自动管理。这种灵活性使得堆成为复杂数据结构和大型对象的理想选择。然而,动态内存分配的代价是存取速度...
但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量和对象句柄。 栈中的数据共享 栈中的数据可以共享,这意味着,如果我们定义了多个相同的基本类型的变量,Java ...
栈中的数据生存空间一般在当前 scopes 内(即由 {…} 括起来的区域)。栈的优势是,存取速度比堆要快,仅次于直接位于 CPU 中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 堆(heap...
- 堆内存的生存期由程序员控制,可以跨函数边界使用。 - 不释放堆内存可能导致内存泄漏,影响程序性能甚至导致程序崩溃。 例子分析: - 在例一中,字符串常量"Hello World1"存放在静态存储区,不可修改。而数组a...
五、栈区与堆区的区别 栈区和堆区的区别在于,栈区中的内存是临时的,函数执行结束时自动释放,而堆区中的内存需要手动释放。例如,char* f1()函数返回的内存是临时的,函数执行结束时自动释放,而char* f2()函数...
5. **本地方法栈**:与Java方法栈类似,但主要用于支持Java虚拟机执行native方法。 针对Java内存和栈的分析,我们可以利用以下工具进行深入研究: - **JVisualVM**:这是JDK自带的一个强大的多合一性能分析工具,...
栈中的内存分配和释放是自动的,当变量的作用域结束时,Java会自动释放掉为该变量所分配的内存空间。栈的优点是存取速度快,缺点是存在栈中的数据大小和生存期必须是确定的,缺乏灵活性。 堆(Heap)是另一块内存...
当一个变量在栈中声明并赋值时,系统会为其分配固定大小的空间,并且生命周期是确定的——一旦变量的作用域结束,系统就会自动回收这部分内存。对于基本类型,例如int、float、boolean等,它们的值直接存储在栈中,...