JVM内存静态与动态分配
2015-12-14 14:10
232 查看
1 静态内存分配与回收
在Java中静态分配内存是指在Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。这些内存不会再程序执行时发生变化,直到程序运行结束才被回收。在Java的类和方法中的局部变量包括原生数据类型和对象的引用都是静态分配的。这些静态内存实际上是在栈上分配的。静态内存空间当代码运行结束后,对应的栈帧被撤销被回收。public void main(int arg) { String s="songxu"; Long long1=1l; long long2=2l; Object object=new Object(); int i=0; }
如上面这个main方法,i,long2,arg是原生数据类型,i会占用4个字节,long2 会占用8个字节,s,args,long1,object是引用类型,他们会占用4个字节空间,因此这个方法实际占用28个字节。而这些空间是编译的时候就确定的。
2 动态内存分配与回收
在Java中对象的内存空间是动态分配的,所谓的动态分配是在程序执行时才知道要分配的储存空间大小,而不是在编译时就确定的。前面的long1代表Long对象,只有JVM在解析Long类型时才知道这个类中有哪些信息,这些信息有哪些类型,然后再为这些信息分配相应的储存空间储存相应的值。相关文章推荐
- NSString的小结
- Redis的hash数据类型及其应用场景解析---购物车
- CCD摄像头视场角计算公式
- 安卓listview两个类型条目的复用,总是报数组越界Android listview ArrayIndexOutOfBoundsException问题
- 分布式TCP压力测试工具 tcpcopy
- 孔雀翎----《Programming C# 》中国版 文章4版
- Android drawable里面的图片存在,但是getIdentifier或者findViewByid找不到时处理步骤
- Java查询大文本
- stat函数详解——Linux
- mongodb 安装
- Android 获取SDCard上图片和视频的缩略图
- Amoeba-mysql读写分离实战
- 学习 java 编程语言两个月来的感受
- PHP警告错误处理办法
- android 长按和点击监听事件 谁先执行
- 宏定义中的#和##的宏展开问题
- XSS quiz 11~16解题方案
- java类加载器,收藏的几篇博文
- ubuntu服务器与本地文件传输
- 理解SVG坐标系统和变换: 建立新视窗