小时候记得印象最喜欢的应该就是小智的卡比兽了。然而不管是金,银仍是其余版本中,卡比兽都好弱啊~~~不过,卡比兽的“内存”是真的大呢,好像永远都不会溢出
或者泄漏
呢,等等,这什么意思!!html
所谓的内存溢出,从字面上的意思即jvm
内存不够用了,目前没法存放建立的对象。java
jvm
参数xmx
设置的较小。public void 建立GC的方法(){ List list = new ArrayList<>(); while(true){ Person p1 = new Person(); # p1变量老是指向不一样的对象,应该会Gc p1.setAge("23"); list.add(p1); # 可是list原理是数组,又指向了建立的对象,致使没法GC } } 其实这也能算是一种内存泄漏了。 复制代码
OOM
了。xmx
和xms
。再也不会被使用的对象不能被回收,就是内存泄露。说的通俗点就是:该对象已经须要被GC了,却没有这么作。数组
看一段代码:bash
public class Simple { Object o1; public void method1(){ o1 = new Object(); //...其余代码 } 在Simple的实例没有被回收以前,object对象就不会被回收。缘由就是由于o1是实例变量 复制代码
public class Simple { Object o1; public void method1(){ o1 = new Object(); //...其余代码 o1 = null } 无论是采用引用计数,或者是GC Root判断是否应该GC,当o1 指向 null后,o1这个对象都会被GC 复制代码
public class Simple { public void method1(){ Object o1 = new Object(); //...其余代码 o1 = null } o1 的生命周期就只是这个方法了,因此o1这个对象将会被GC。 因此须要记住,设置实例变量时或者类变量 初始化时,想一下GC问题 复制代码
引用一段话:
OOM
,全称Out Of Memory
,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError
。
看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector
.
意思就是说,当JVM
由于没有足够的内存来为对象分配空间而且垃圾回收器也已经没有空间可回收时,就会抛出这个error
(注:非exception
,由于这个问题已经严重到不足以被应用处理)。服务器
内存溢出是必定会产生OOM
的。而内存泄漏到达必定程度会致使内存溢出,产生OOM
,如上述的list.add()
。 参考自:连接markdown
真羡慕卡比兽的肚子啊~~~jvm