面试积累(java的内存分析)
关于java中的内存分析:
1 首先,java中的内存总体分为了四个部分,分别为stack segment,heap segment,code segment,data segment。即 栈区,堆区,代码区,数据区。
我们程序中用关键字new出来的东西都是存放在heap segment;
程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理);
程序中的方法,是内存中的code segment中的,而且是多个对象 共享一个代码空间区域;
static静态变量,需要放在内存中的data segment中;
2 这里介绍一下String的一些理解,String创建对象有两种方式:
分别为String s1=new String("java")和String s2="java";
前一种方式创建对象时会先在堆中创建一个java的,再让引用变量s1指向堆中的那个java,然后还要判断字符串常量池中是否存在java,如果存在就不会再在字符串常量池中创建了,如果不存在就会再在字符串常量池中创建一个java的对象;
后一种方式是先判断字符串常量池中是否存在java,如果存在的话就会直接让引用变量s2指向字符串常量池中已经创建好的那个java,如果不存在就会再在字符串常量池中创建一个
java,然后再让s2指向创建好的这个java。