栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

6月27日

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

6月27日

目录

1.什么是内存垃圾

2.什么是垃圾回收  GC(garbage collection)

JDK自带的jvisualvm工具,安装Visual GC插件

3.对象与指针的关系

4. 指针是可以传递的

5. 禁止直接操作对象中的属性, 用成员方法封装操作对象属性的过程

6.JVM运行时概况

7.方法区(Method Area--->JDK1.8后改名为元空间Meta Space)

栈区(Stack Area)

堆区(Heap Area)

8.JVM垃圾回收算法(GC)

Minor GC和Major GC/Full GC的区别

9.创建商品类Goods


1.什么是内存垃圾

内存中创建的对象,Java启动后不再使用后被称为内存垃圾:(方法区中的类信息,堆中的类对象),常量(常量池),对象(堆)。

2.什么是垃圾回收  GC(garbage collection)

创建对象时,需要在对应的内存区域分配内存空间,如果该区域不足,就触发该区域的gc.

System.gc()----手动回收垃圾jdk提供了一个gc函数,调用这个函数,就完成对JVM虚拟机内存进行一次GC

自动gc,当JVM虚拟机启动后,后台会自动运行一个gc程序,负责内存的gc操作

这个后台的gc程序定时做gc操作,或者当jvm内存不够的时候,会立刻触发gc

JDK自带的jvisualvm工具,安装Visual GC插件(查看内存)

3.对象与指针的关系

java指针被严格管理不能任意操作指针,只能通过指针访问对象,或者对指针之间赋值,这很好保证java对象不受意外破坏和保证了安全性,java称这种指针为引用,引用和指针本质上相同的。

同一个对象可以被多个指针同时指向

一个指针可以指向不同的对象,但是同一时刻只能指向同一个对象

测试当对象有指针指向的的时候,对象不会被垃圾回收器回收

当对象没有指针指向的时候,对象会被垃圾回收器回收(不是立即回收,在后台的gc程序定时做gc操作,或者当jvm内存不够)

4. 指针是可以传递的

从栈中传递到堆区

随机生成堆区的对象后, 将对象的指针传递到数组中进行存储

从栈中传递到另一个栈中

到killOk方法中, 这样可以在killOk方法中通过怪物的指针获取到被杀死的怪物对象中的信息 
 

5. 禁止直接操作对象中的属性, 用成员方法封装操作对象属性的过程

对象中的属性被private封装了
所有操作都应该提供成员方法, 用指针去调用成员方法来操作
例如: 当宠物攻击或被攻击, 怪物攻击或被攻击, 都应该提供对应的成员方法进行调用

6.JVM运行时概况

7.方法区(Method Area--->JDK1.8后改名为元空间Meta Space)

存储字节码文件

栈区(Stack Area)

不需要垃圾回收

栈区中的局部变量不能共享

堆区(Heap Area)

生存者1区

生产者2区

老年区

程序运行过程中很多的对象都是朝生夕死

小对象出生在伊甸园区,gc后,如果能存活下来就会被转移到幸存者区,对象的年龄计数器会+1

当对象经历了16次回收后依然能够存活,会进入老年代

重对象/大对象一出生就在老年代

8.JVM垃圾回收算法(GC)

Minor GC和Major GC/Full GC的区别

Minor GC发生在新生代的GC, 速度很快

Major GC/Full GC发生在老年代的GC,通常Major GC发生的时候都伴随着Minor GC的发生,速度比较慢

在JVM虚拟机执行GC的时候,所有的线程都会暂停运行,有一句叫做“stop the world!”

9.创建商品类Goods

属性  注意考虑商品属性的数据类型
商品名称 name
商品价格 price
商品描述 description
商品库存 stock
商品分类 category
商品状态 state

//商品名称 name
    private String name;
    //商品价格 price
    private Double prise;
    //商品描述 description
    private String description;
    // 商品库存 stock
    private  Character stock;
    //商品分类 category
    private String category;
    //商品状态 state
    private Boolean state;

成员方法 show
作用打印商品对象信息

public void show(){
        System.out.println("****欢迎光临****");
        System.out.println("**"+"商品名称"+this.name+"**");
        System.out.println("**"+"价格:"+this.prise+"**");
        System.out.println("**"+"商品描述"+this.description+"**");
        System.out.println("**"+"商品库存"+this.stock+"**");
        System.out.println("**"+"商品分类"+this.category+"**");
        System.out.println("**"+"商品状态"+this.state+"**");
    }

构造方法

    public Goods(String name, Double prise, String description, Character stock, String category, Boolean state) {
        this.name = name;
        this.prise = prise;
        this.description = description;
        this.stock = stock;
        this.category = category;
        this.state = state;
    }

setter/getter方法

public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrise() {
        return prise;
    }

    public void setPrise(Double prise) {
        this.prise = prise;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Character getStock() {
        return stock;
    }

    public void setStock(Character stock) {
        this.stock = stock;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Boolean getState() {
        return state;
    }

    public void setState(Boolean state) {
        this.state = state;
    }

创建测试类Demo
静态变量声明商品数组, 初始长度为10
静态变量控制台输入

    static Goods[] goodsArr = new Goods[10];
    static Scanner sc = new Scanner(System.in);

添加商品方法1 - addGoods1()

使用构造方法初始化商品对象数据 (注意: 数组长度不够了要提示去扩容)

控制台接受用户输入商品信息
使用全参构造方法构造商品对象
商品对象存入商品数组中

添加商品方法 2 - addGoods2() 使用设值器set方法初始化商品对象数据 注意: 数组长度不够了要提示去扩容
控制台接受用户输入商品信息
使用无参构造方法构造商品对象
使用商品对象的设值器set方法存入商品数据到商品对象中
商品对象存入商品数组中        

遍历商品方法 - display()   注意: 遇到数组中null的元素要判断, 防止出空指针异常
遍历商品数组, 取出每个商品对象, 调用对象的show()方法打印商品信息

商品数组扩容方法

main方法
使用do.while循环打印菜单
1. 添加商品1
 2. 添加商品2
3. 查看商品
4. 商品数组扩容
5. 退出

接受用户输入的菜单编号
使用switch.case 判断用户选择的菜单, 调用对应的方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号