Java基础之--内存划分
来源:互联网 发布:人工智能技术 知乎 编辑:程序博客网 时间:2024/05/22 15:23
对于所有程序而言都有四块内存空间负责:
1、栈 (Stack)
2、堆(Heap)
3、段代码区(Data segment)
4、Code segment--->String pool(常量池) ?
代码的源程序存储到Code segment中,当运行JavaDoc的时候,就会马上去Code segment中找到这个代码段的main函数,
当找到main函数的时候,就会马上在栈里面为main函数分配空间,函数里面所有的变量都是在栈里面分配的。
例如:
package test;
/**
* Java面向对象内存模型
* @author Super
*/
public class MemoryModel {
public static void main(String[] args) {
int a = 10;
int b = 20;
Dog dog = new Dog();
dog.name="阿才";
dog.age=2;
dog.furColor="灰色";
dog.bark();
dog.bite();
}
}
class Dog {
/*
* 只要是属性,JVM都会为其赋值
* 对象类型全部赋值为null,int-->0,double-->0.0,char-->空格,boolean-->false
*/
public String name;
public String furColor;
public int age;
public void bite(){
age = 22;
System.out.println(age+":"+furColor+"正在吃");
}
public void bark(){
System.out.println("嘿嘿嘿!");
}
}
String内存划分
package test;
/**
* String内存分配
* @author Super
*/
public class TestString {
public static void main(String[] args) {
String str1 = new String("123");
String str2 = new String("123");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
String str3 = "123";
String str4 = "123";
System.out.println(str3==str4);
System.out.println(str3.equals(str4));
str3 = "234";
}
}
StringBuffer和StringBuilder
StringBuffer是线程安全的,效率相对低。
StringBuilder是非线程安全的,效率相对高。
对于字符串一般不会涉及到线程问题,所以在JDK1.5之后通常使用StringBuilder。
package test;
/**
* StringBuilder内存分配
* @author Super
*/
public class TestString {
public static void main(String[] args) {
StringBuilder sb = newStringBuilder();
//StringBuilder支持链式结构
sb.append("1").append("2").append("3");
System.out.println(sb.toString());
}
}
父类引用指向子类对象。
package polymorphic;
/**
* 多态
* @author Super
*/
public class Polymorphic {
public static voidmain(String[] args) {
//父类引用指向子类对象。
Person p = newStudent();
p.name = "石小渣";
p.show();
//由于P这个对象实际指向的是Student的,所以此处可以使用强制类型转换将其转化为Student。
Student s = (Student)p;
s.number = "123";
s.show();
}
}
classPerson {
publicStringname;
public void show() {
System.out.println("Persion:" +name);
}
}
classStudentextends Person {
public String number;
public void show() {
System.out.println("Student:" +name +",number:" +number);
}
}
阅读全文
2 0
- Java基础之--内存划分
- Java虚拟机之Java内存区域划分
- java的内存划分
- Java 内存划分
- jAVA内存区域划分
- Java的内存划分
- Java内存区域划分
- Java 内存主要划分
- java内存划分
- Java 内存的划分
- Java 内存划分
- Java把内存划分
- Java内存区域划分
- 【Java】内存区域划分
- Java内存区域划分
- Java 内存区域划分
- java内存区域划分
- Java内存分配划分
- Glide的使用,加载图片只要一句话
- mybatis日期查询
- SGI特殊空间配置器std::alloc
- Android 系统默认参数的修改
- [Codeforces]Hamburgers
- Java基础之--内存划分
- kubernetes free data blocks which is less than minimum required
- Linux学习笔记
- 【Jquery学习】第五部分
- Html去掉隐藏字符解决办法
- Log4j 根据日期生成日志目录
- 高版本sql server数据库复制到低版本sql server数据库
- Node.js Buffer
- Unity3d获取物体的所有子物体对象(child)