一个对象可以同时被多个指针指向
一个指针可以指向不同的对象, 但是同一时刻只能指向1个
1. 指针是可以传递的
目录
一个对象可以同时被多个指针指向一个指针可以指向不同的对象, 但是同一时刻只能指向1个
从栈中传递到堆区
例如: 领养宠物成功后, 将宠物对象的指针传递到宠物数组中进行存储
随机生成怪物对象后, 将怪物对象的指针传递到怪物数组中进行存储
从栈中传递到另一个栈中
例如: 宠物杀死怪物成功后, 调用宠物的killOk方法, 并把怪物的指针传递
到killOk方法中, 这样可以在killOk方法中通过怪物的指针获取到被杀死的怪物对象中的信息
2. 禁止直接操作对象中的属性, 用成员方法封装操作对象属性的过程
对象中的属性被private封装了
所有操作都应该提供成员方法, 用指针去调用成员方法来操作
例如: 当宠物攻击或被攻击, 怪物攻击或被攻击, 都应该提供对应的成员方法进行调用
什么是内存垃圾:
什么是垃圾回收:GC(garbage collection)
手动gc,JDK提供了一个GC函数,调用这个函数,就完成对JVM虚拟机内存进行一次GC
System.gc()
自动GC,当JVM虚拟机启动后,后台会自动运行一个GC程序,负责内存的GC操作
这个后台的GC程序会定时做GC操作
JDK自带的jvisualvm,安装visual Gc插件:
同一个对象可以被多个指针同时指向
一个指针可以指向不同的对象,但是同一个时刻只能指向一个对象
测试当对象有指针指向的时候,对象不会被垃圾回收
测试当对象没有指针指向的时候,对象会被垃圾回收,会不会立即回收?不会
元空间(MetaSpace)就是方法区(Meta Area)
栈区(Stack Area)
堆区(Heap Area)
伊甸园区 Eden
生存在1区
生存者2区
老年区
很多对象都是朝生夕死的
小对象出生在伊甸园区,GC后,如果能存活下来会被转移到幸存者区,对象的年龄计数器会+1,当对象经历了15次回收后依然能够存活,会进入老年代
重对象/大对象一出生就在老年区
新生代是回收最频繁的区域
对象永远在堆区生成
Minor GC和Major GC/Full GC 的区别:
Full GC定义是相对明确的,就是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC;
正常情况下都做Major GC
Minor GC发生在新生代的GC
Major GC/Full GC发生在老年代的GC,通常Major GC发生的时候都伴随着Minor GC的发生
在JVM虚拟机执行GC的时候,所有的线程都会暂停运行,有一句叫做"stop the world!"