• 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;
    }

    内存分析图:

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

  • 相关阅读:
    latch与DFF
    数字逻辑综合DC脚本示例及解释
    当DiscuzNT遇上了Loadrunner(下)
    [C#学习]在多线程中如何调用Winform
    并发性测试工具
    当DiscuzNT遇上了Loadrunner(上)
    大型网站(高访问、海量数据)技术架构
    Load Runner下载
    Invoke 和 BeginInvoke 的真正涵义
    当DiscuzNT遇上了Loadrunner(中)
  • 原文地址:https://www.cnblogs.com/lanmao123/p/10489711.html
Copyright © 2020-2023  润新知