java内存解析
来源:互联网 发布:网贷大数据查询系统 编辑:程序博客网 时间:2024/06/06 01:49
Java内存解析
形参和局部变量在栈中分配内存空间 ,运行完自动释放,堆中的内存程序员释放,分析内存解析时,要从main()开始一步一步分析。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
静态变量(static)存放在数据区
new创造对象,会直接执行构造函数,
首先我们先来讲解一下内存中的各个区域。
stack(栈):存放基本类型的数据和对象的引用,即存放变量。
如果存放的事基本类型的数据(非静态变量),则直接将变量名和值存入stack中的内存中;
如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。
heap(堆):存放new产生的数据。
data segment:分为静态域和常量域。
静态域:
存放在对象中用static定义的静态成员(即静态变量,同理,如果该静态变量是基本类型则将变量名和值存入静态域,如果是引用类型则指向new出的对象)。
常量池:
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型 (如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:类和接口的全限定名;字段的名称和描述符;方法和名称和描述符。
注:大家要注意String类型不是基本数据类型,所以它可以创建对象,并且它的值是放在常量池中的。
- JAVA内存溢出解析
- JAVA内存溢出解析
- JAVA内存溢出解析
- java内存泄露解析
- JAVA内存溢出解析
- java中内存解析
- JAVA内存溢出解析
- 解析java内存分配
- Java内存解析
- java内存溢出解析
- JAVA内存溢出解析
- Java 内存解析
- JAVA内存溢出解析
- java内存泄露解析
- Java内存解析
- java中内存解析
- java虚拟机内存解析
- java内存解析
- 行为树-学习笔记(5)-AI寻找玩家目标并攻击的实现
- iOS7新JavaScriptCore框架入门介绍
- Spring配置JNDI及通过JNDI获取DataSource
- ubuntu14.04下通过.frm, .MYD,.MYI文件恢复建立mysql数据库
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
- java内存解析
- 关于angularjs中的时间控件datepicker
- 3D模型读取库:Assimp
- 数字图像处理13--梯度倒数加权平滑法
- VR和AR核心技术分别是什么?两者有什么不同?
- php storm漂亮主题设置
- request.getscheme()的使用方法!
- 常用 git 命令使用说明(-help)汇总
- 拼接内容,生成xml