常见Java面试题之解释内存中的栈、堆和静态区用法
栈(stack)、堆(heap)和静态区(static area)的用法区别
* 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;
* 通过new关键字和构造器创建的对象放在堆空间;
* 程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。
* 栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
Eg: String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区。
补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
本题涉及java知识点分析
栈(stack)
* 栈是一个先入后出(FILO:First In Last Out)的有序列表。
* 栈(Stack)是限制线性表中元素的插入和删除只能在同一端进行的一种特殊线性表。
* 允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
* 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶
* 而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除
堆(heap)
堆(heap)实为二叉树的一种,分为最小堆和最大堆,具有以下性质:
* 任意节点小于/大于它的所有后裔,最小/大元在堆的根上。
* 堆总是一棵完全二叉树
* 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
静态区(static area)
* 方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
* 方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
* 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
希望能对大家有所帮助。
相关文章
- java基础面试题
- 2019年最新阿里Java工程师面试题
- java并发面试题
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
- Java实现 LeetCode 724 寻找数组的中心索引(暴力)
- Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)
- java实现第六届蓝桥杯九数组分数
- Java实现 蓝桥杯VIP 算法训练 薪水计算
- 结合 DateUtils DateFormatUtils 随手写的一个求周末、周一的JAVA时间处理类
- Java -- JDBC 学习--获取数据库链接
- [Spring Java] identify transactional business services boundaries
- Java面试题(1)
- 【Java面试题】正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
- 【Java面试题视频讲解】十六进制转十进制
- Java操作,springMVC上传的文件
- Java面试题 实现单例设计模式(懒汉、饿汉)
- Java面试题 Java中sleep和wait的区别?
- 常见Java面试题 BIO、NIO、AIO 有什么区别?
- 每天5道面试题(二)java基础
- JAVA常见面试题之Forward和Redirect的区别
- Java面试题技术类一
- Java_并发线程_CompletionService
- 华为的JAVA面试题及答案(部分)
- 经典Java面试100例,轻松搞定BAT——高频面试题(上)
- Java面试题整理(附参考答案)