这写都是想到哪写到哪,权当本身的一个草稿纸了java
JAVA的内存分为堆,栈,代码区,数据区算法
堆,存放的东西比较大,不连续的,须要优专门的回收机制来收回,在C++申请须要new,回收须要delete,在java中有GC机制回收;socket
栈:先进先出,后进后出,相对于函数来讲,局部变量这些都是存放在栈中的,函数执行完成后,自动回收了,容量较小,。函数
堆管理起来很麻烦,频繁地new/remove会形成大量的内存碎片,这样就会慢慢致使效率低下,大数据
咱们说到的内存泄漏,GC回收,是说的堆内存,由于栈内存在函数结束的时候就被释放了;对象
内存泄漏:当一个对象本应该被回收,而没有被回收(可能因为被引用了啊)内存
有一些以下场景:资源
1,资源对象未关闭,socket通道未关闭,占用内存资源;rem
2,类的静态变量维持到大数据量对象引用,阻碍了GC(garbage collection);io
3,例如listener函数未关闭(注册对象未反注册)等等
GC机制通常有两个:
1,发现无用的信息对象;
2,回收无对象占用的内存空间;
搜索算法有多种,例如从根搜索算法,从一个节点开始GC,OOT开始,寻找对应的引用节点,找到这个节点之后,继续寻找这个节点的引用节点,当全部的引用节点寻找完毕以后,剩余的节点则被认为是没有被引用到的节点,即无用的节点