zoukankan      html  css  js  c++  java
  • thinking in Java 笔记 一切皆是对象 (一)

    程序存储的位置

    1.寄存器

    最快的存储区,它在处理器内部,寄存器是按照需求分配,无法直接控制。

    2.堆栈

    位于通用RAM中,可以通过堆栈指针来进行操作,指针向下移动,则分配新的内存,指针向上移动,则释放内存。速度仅次于寄存器。创建程序时,java必须知道在堆栈内所有项的生命周期,以便确定堆栈指针的上下移动,该约束限制了程序的灵活性,因此虽然某些数据(特别是对象的引用)存储在堆栈中,但java对象并不会存储在这里面。

    注意:由于基本类型是特别小的、简单的变量,所以此类型变量不是用new来创建的,而是创建一个非引用的自动变量,该变量直接存储值,并置于堆栈中,所以更加高效。

    3.堆

    通用的内存池,也处于RAM中,可以存放所有的java对象。

    存放在堆中的好处是:编译器不需要知道存储的数据在堆中存活多长时间,因此灵活性很大。当用new创建一个对象时,会自动在堆中进行存储分配。

    4.常量存储

     常量值由于不会改变,因此可以直接放在程序内部。

    5.非RAM存储

     数据完全存活在程序之外,则它可以不受程序控制,程序没有运行时也可以存在。

    如流对象和持久化对象。流对象中,对象转化成字节流,通常被发送给另一台机器;持久化对象中,对象被存放在磁盘上,所以即使程序终止,它们仍可以保持自己的状态。

    内存溢出和内存泄漏

    内存溢出指程序在申请内存时,没有足够的内存空间供其使用,如申请了一个integer,但用它存储一个long才能存下的数,这就是内存溢出。

    内存泄漏指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏的危害可以忽略,但如果该问题一直堆加,则内存到最后总会被消耗完。

    详细解释:http://blog.csdn.net/buutterfly/article/details/6617375

    JAVA中用于高精度计算的类

    注意此时由于做运算需要以调用方法的方式来取代运算符方式,因此速度会变慢,是以牺牲速度来提高精度。

    BigInteger

    支持任意精度的整数

    BigDecimal

    支持任意精度的浮点数

    ---恢复内容结束---

  • 相关阅读:
    JSP error: Only a type can be imported
    关于JAVA插入Mysql数据库中文乱码问题解决方案
    MySQL SQL优化——分片搜索
    myeclipse 调试JSP页面
    jsp:usebean 常用注意事项
    spring XML格式
    VB 要求对象
    VB 对象变量或with块变量未设置
    Spring依赖注入
    Spring 读取XML配置文件的两种方式
  • 原文地址:https://www.cnblogs.com/grj0011/p/7279202.html
Copyright © 2011-2022 走看看