Java基础之--内存划分
2017-06-16 16:15
190 查看
对于所有程序而言都有四块内存空间负责:
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 {
publicString
name;
public void show() {
System.out.println("Persion:" +name);
}
}
classStudent
extends Person {
public String number;
public void show() {
System.out.println("Student:" +name +",number:"
+number);
}
}
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 {
publicString
name;
public void show() {
System.out.println("Persion:" +name);
}
}
classStudent
extends Person {
public String number;
public void show() {
System.out.println("Student:" +name +",number:"
+number);
}
}
相关文章推荐
- [java学习笔记]java语言基础概述之内存的划分&堆和栈
- Java基础(数组-内存空间的划分)
- java学习笔记]java语言基础概述之内存的划分&堆和栈
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
- java内存区域的划分
- (2011年java基础)java内存分析(1)----堆和栈
- (2011年java基础)java内存分析(2)----方法区和常量池
- JAVA基础--内存分析
- JAVA内存的一些总结(一) 内存的划分
- Java基础复习笔记 数组,内存形式,父子,内存控制01
- java基础 -- Java 类中各成分加载顺序 和 内存中的存放位置
- Java基础_内存分析
- 字节码防止内存错误及提高代码质量-Java基础-Java-编程开发
- java程序员菜鸟进阶(四)oracle基础详解(四)oracle开启和关闭服务程序――解决安装oracle占用大量内存
- Java基础_内存分析_分析代码
- java 基础程序-数据类型划分
- java基础之内存分配
- Java基础中环境变量的配置以及Java的内存资源调用分配机制
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
- java程序员菜鸟进阶(四)oracle基础详解(四)oracle开启和关闭服务程序——解决安装oracle占用大量内存