java拾遗录 番外1
主题:core java——不得不说的内存
一、在Java中,主要有如下几种类型的内存空间:
1 栈内存(stack segment):每个线程私有的。
2 堆内存(heap segment):所有线程公用的。
3 方法区(Method Area):有点像以前常说的“进程代码段”,这里面存放了每个加载类的反射信息、 类函数的代码、编译时常量等信息。
4 原生方法栈(Native Method Stack):主要用于JNI中的原生代码。
其中主要的是两个:栈内存(Stack)和堆内存(Heap)。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
二、内存分配策略
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.
除此之外,还要注意以下几点:
1,基础数据类型直接在栈空间stack分配,方法的形参,直接在栈空间分配,当方法调用完成后从栈空间回收
2 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间heap分配对象的类变量。
3.方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后,从栈空间回收。
4.局部变量new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。
5 方法电泳时传入的基本数据类型(literal)参数,现在栈空间分配,在方法调用完成后从栈空间clear。
6.字符串常量在data segment区域分配,static在data segment区域分配,
7.This在堆空间分配
8.数组既在栈空间非配数组名称,又在堆空间分配数组实际的大小
部分内容来自网络
分享到:
相关推荐
NULL 博文链接:https://langyu.iteye.com/blog/1167581
Java知识拾遗:三大框架的技术起源 本篇文章主要讲述了Java开发中三大框架的技术起源,即Struts、Hibernate和Spring框架。这些框架是我们Java开发中的常用的框架,它们分别针对不同的应用场景给出最合适的解决方案...
java回顾、知识整理、拾遗、面试_java-review
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
11.java基础拾遗--匿名内部类语法详解.mp4
读书笔记:算法 并发 函数式编程 java语言拾遗 手写设计模式
09.java基础拾遗--类的加载和对象的构造过程.mp4
10.java基础拾遗--匿名内部类的应用--实现scala中的集合map方法.mp4
Java开发中的三大框架——Struts、Hibernate和Spring,都是为了解决传统Java Web应用程序中存在的一系列问题而诞生的。这些框架分别针对MVC模式的实现、数据持久化和依赖管理给出了高效且灵活的解决方案。 Struts...
Java开发中的三大框架,即Struts、Hibernate和Spring,各自解决了传统Java Web应用程序中的不同问题,提升了开发效率和代码质量。下面将详细讲解这三个框架的技术起源及其核心功能。 首先,Struts框架诞生于解决JSP...
Java语言拾遗 │ │ └─util 工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:https://github.com/GitJavaProgramming/springboot_mybatis 参考...
Java JDK(Java Development Kit)是Java编程语言的核心组件,包含Java运行环境、编译器、类库以及各种工具,是开发者进行Java程序开发的基础。Java JDK 6.0是Oracle公司发布的一个重要版本,提供了许多新的特性和...
17. 拾遗物品登记表.pdf
对于一些贵重物品,为了防止冒领现象的发生,除了核对身份信息外,可能还需失主提供额外的证明文件,如购买凭证等,以证明物品的归属权。对于那些无法直接确认失主身份的一般物品,可以通过发布公告的方式,让失主...
【图论拾遗(一)题解1】这篇文章主要探讨了如何解决图论中的特定问题,包括求解无向图中最远两点之间的距离以及寻找有向图中的最短路径。文章通过三个具体的POJ在线判题平台上的题目来阐述相关算法。 首先,POJ...
在本章拾遗中,我们将探讨C语言中的一些高级特性,包括结构体成员函数、C语言中的布尔类型、预编译指令与条件编译以及位运算与位段结构。这些内容是C语言深入学习的重要部分。 首先,让我们关注结构体成员函数。在...
在"day03 拾遗"中,特别提到了小数的取模运算。需要注意的是,Java中的小数取模与整数有所不同,可能会导致非预期的结果。例如,12.12%2.2的结果是1.1199,而8.8%2的结果是0。这是因为浮点数的取模运算并不总是精确...
### 有感于《路边拾遗》:摄影与心灵之旅 #### 一、摄影的意义与价值 《路边拾遗》是一本由两位非职业摄影师创作的摄影画册,书中不仅收录了他们拍摄的精美照片,更重要的是传达了作者对摄影艺术的理解与感悟。...