java内存分配存储
2016-06-08 17:58
253 查看
转自
有6个地方可以作为存储机构:
1、寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器的内部。但是存储器的数量是极其有限的,所以寄存器根据编译器的需求来分配。不能人为的控制,也不能在程序中感觉到寄存器存在的任何迹象。
2、堆栈(stack):通常位于RAM(random access memory随即访问存储器 )中,但是通过它的“堆栈指针”可以在处理器那里获得直接支持。堆栈指针若是向下移动,则分配新的内存;若是向上移动,则是释放那些那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,JAVA编译器需要知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以某些JAVA程序存储在堆栈中——特别是java对象的引用,但是java的对象并不存在其中。
3、堆(heap):一种通用性的内存池(也存在RAM区),用于存放所有的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配空间有很大的灵活性。当你需要创建一个对象时,只需要用new写一行简单的代码,当执行这段代码时,将自动在堆里进行存储分配。当然,为这种灵活性必须付出相应的代价。用堆进行存储分配比用堆栈进行存储分配将要更多的时间。
4、静态存储(Static storage):这里的静态是指固定的位置(尽管也在RAM里)。静态存储里存放程序运行时一直存在的数据。可以使用static来标示一个对象的特定元素是静态的。但是,java对象本身是从来不会存储在静态的存储空间里。
5、常量存储(constant storage):常量值通常是直接存放在程序代码的内部,这样做是安全的,因为他们永远不会被改变。
6、非RAM存储(non RAM storage):如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
有6个地方可以作为存储机构:
1、寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器的内部。但是存储器的数量是极其有限的,所以寄存器根据编译器的需求来分配。不能人为的控制,也不能在程序中感觉到寄存器存在的任何迹象。
2、堆栈(stack):通常位于RAM(random access memory随即访问存储器 )中,但是通过它的“堆栈指针”可以在处理器那里获得直接支持。堆栈指针若是向下移动,则分配新的内存;若是向上移动,则是释放那些那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,JAVA编译器需要知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以某些JAVA程序存储在堆栈中——特别是java对象的引用,但是java的对象并不存在其中。
3、堆(heap):一种通用性的内存池(也存在RAM区),用于存放所有的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配空间有很大的灵活性。当你需要创建一个对象时,只需要用new写一行简单的代码,当执行这段代码时,将自动在堆里进行存储分配。当然,为这种灵活性必须付出相应的代价。用堆进行存储分配比用堆栈进行存储分配将要更多的时间。
4、静态存储(Static storage):这里的静态是指固定的位置(尽管也在RAM里)。静态存储里存放程序运行时一直存在的数据。可以使用static来标示一个对象的特定元素是静态的。但是,java对象本身是从来不会存储在静态的存储空间里。
5、常量存储(constant storage):常量值通常是直接存放在程序代码的内部,这样做是安全的,因为他们永远不会被改变。
6、非RAM存储(non RAM storage):如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
相关文章推荐
- Java递归目录结构
- RxJava初探
- hihocoder 1080更为复杂的买卖房屋姿势 java实现
- android studio项目如何导入到eclipse中
- 电商之梳理servlet知识---javaweb基础
- java根据图片url下载图片到本地
- springMVC 页面传入日期报错问题处理:org.springframework.validation.BindException: org.springframework.validation.
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- eclipse迁移到android studio
- Eclipse自定义注释
- Exception in thread "main" java.beans.IntrospectionException: Method not found: isWBLDINST
- 在JAVA中如何跳出当前的多重嵌套循环
- Java中出现No enclosing instance of type XXX is accessible问题
- @NotEmpty、@NotBlank、@NotNull
- spring中MessageSource的配置使用方法--ResourceBundleMessageSource
- java关键字Transient
- 在Eclipse中创建Maven多模块工程的例子
- java中short s1 = 1;s1 = s1 + 1;会出错而short s1+=1;能编译通过的原因
- 使用CXF和spring搭建webService服务
- SpringMVC框架中的过滤器设置