zoukankan      html  css  js  c++  java
  • java面向对象及内存分析

    写在前面:

      new关键字 在堆里面开辟一段内存空间

      Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。

    栈的特点如下:

      1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

      2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

      3. 栈属于线程私有,不能实现线程间的共享!

      4. 栈的存储特性是“先进后出,后进先出”

      5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

    堆的特点如下:

      1. 堆用于存储创建好的对象和数组(数组也是对象)

      2. JVM只有一个堆,被所有线程共享

      3. 堆是一个不连续的内存空间,分配灵活,速度慢!

    方法区(又叫静态区)特点如下:

      1. JVM只有一个方法区,被所有线程共享!

      2. 方法区实际也是堆,只是用于存储类、常量相关的信息!

    3. 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

    实例分析

    package renjinbao_orm;
    
    public class Student {
        // 属性
        int id;
        String sname;
        int age;
    
        Computer comp; // 计算机
    
        // 方法
        void study() {
            System.out.println("我在认真学习!!,使用电脑:" + comp.brand);
        }
    
        void play() {
            System.out.println("我在玩游戏!王者农药!");
        }
    
        // 构造方法。用于创建这个类的对象。无参的构造方法可以由系统自动创建。
        public Student() {
    
        }
    
        // 程序执行的入口,必须要有
        // javac-编译.class文件-> student.class java-jvm执行->Student
        public static void main(String[] args) {
            Student stu = new Student(); // 创建对象
            stu.id = 1001;
            stu.sname = "高达";
            stu.age = 18;
            
            Computer c1 = new Computer();
            c1.brand = "联想";
            
            stu.comp = c1;
            
            stu.play();
            stu.study();    
        }
    }
    class Computer{
        String brand;
    }

    内存分析图:

      栈里面存放局部变量和对象的引用变量。用完就丢的(方法也可以看做局部变量的一种)

  • 相关阅读:
    【西北师大-18软工】第三次作业成绩汇总
    【西北师大-18软工】第一次作业成绩汇总
    2017面向对象程序设计(Java)总结
    面向对象分析与设计中类的设计
    2017面向对象程序设计(Java)第十四周学习总结
    2017面向对象程序设计(Java)第十周学习总结
    2017面向对象程序设计(Java)第九周学习总结
    关于在eclipse中使用LocalDate类的问题
    JAVA程序导入eclipse的简易教程
    2017面向对象程序设计(Java)学习总结
  • 原文地址:https://www.cnblogs.com/lanmao123/p/10489711.html
Copyright © 2011-2022 走看看