基本数据类型和引用数据类型的数据存储

来源:互联网 发布:linux报错ld返回1 编辑:程序博客网 时间:2024/05/22 15:40

1.功能划分数据区


2.cpu寄存器比内存堆存储数据的的速度更快(pc寄存器是JVM在添加一定的逻辑运算来了调用CPU寄存器,其存储速度不能和CPU本身进行比较)

3. 对象和常量都存储在常量池中(只要被调用的都会在常量池中存在)(常量池物理上存在于内存堆中)

4. 基本数据类型声明时只占用栈内存,引用数据类型声明时不光占用栈内存也占用堆内存。

5. int a; 中的int是指存储数据的最大存储范围。如果a=10 则其在系统中的存储类型会自动调节为byte型,以节省内存开销。

6.string a=”abc”; string b= “ab” +”c”时 string a==string b;这是因为编译器在读取数据时经过逻辑判断直接将“ab” +”c”合并为”abc”,所以此类运算不是在常量池中完成的而是编辑器自动合成的。


6. 变量的声明中是先有存储空间,然后将值存入其中。

7. 基本数据类型比较的是不同内存地址内的值。(系统自动比较其存储地址内的值)

8. Integer类型的数据会在内存堆中开辟一个内存地址,并将其在堆内存内的地址头当作栈内存的指针存入其中,其在进行数值比较时会调用两个方法分别进行拆箱(会调用Integer.intValue(传入的值);方法)和装箱(Integer.valuOf(传入值);方法并且在装箱时会进行一个判断)也就是说当新建数据时,数据的值没有缓存就会New一个新的Integer对象。


9.基本数据类型的比较只比较值,所以只进行拆箱取值而不进行重新的封装

10.Folat,Double 类型的的值在存储时直接装箱,其内不存在if{}else的判断。

11. New一个变量是指在内存堆中强制创建一个新的存储空间来存储常量池中数据的路径,而直接赋值string a = “abc”;则是在常量池中存储和找到abc的值,如果没有已经存在的引用路径时其会创建一个存储空间进行存储并将其的地址地址头放到a指向的栈内存空间,而此时如果string b = “abc”则系统会直接将已经存在的地址头存放到b指向的栈内存空间中。此时string  a ==string b;

12. 一个方法对应一个栈帧,每个方法中的逻辑都是相对独立的。每一个方法执行完成后会就会立刻被销毁并返回上一栈帧,当所有的程序执行完成后,JVM会自动回收所有内存,并自动退出将内存释放给系统(JVM会根据系统现有内存的百分比来申请内存)


1 0
原创粉丝点击