- 大家想必也知道Java中的JDK、JRE是用来配置环境,利于开发的。
- JDK最早源于OpenJDK(开源、开放原始码的版本)可以说是JDK的原始人。
堆区的内存
- 堆区也称堆空间,堆中是用于存储对象,通过"new"、内存块等
- 堆溢出(内存溢出):指的是在创建对象执行时出现的泄露的内存积累的太多(受不了了),物理内存(一定的固定内存如:磁盘)不足,导致程序运行时要创建的对象是空的,没有给他赋值(对象中放东西)无处安放(不知道放哪里,没有明确的目标),通过不断的new新的对象(开辟了新的空间),而导致的堆中内存溢出的错误!
属性类:
package cn.aiweiyi.qingjing;
/**
* @author 青衿
* @Date 2020/11/9 18:37
**/
public class Pag {
Long i1;
Long i2;
Long i3;
Long i4;
Long i5;
Long i6;
Long i7;
Long i8;
Long i9;
Long i10;
Long i11;
Long i12;
Long i13;
Long i14;
Long i15;
Long i16;
Long i17;
}
测试类:
package cn.aiweiyi.qingjing;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// write your code here
showPag();
}
static List<Pag> list = new ArrayList<Pag>();
public static void showPag() {
System.out.println("开始了开始了");
for (int i = 0; i < 1000000000; i++) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
Pag pag = new Pag();
list.add(pag);
pag = null;
}
System.out.println("结束了结束了");
}
}
Eclipse开发工具中的报错显示:
IDEA开发工具中的报错显示:
栈区的内存
- 栈区是用于存放函数的参数值、方法、局部变量等等
- 栈溢出(内存溢出):指的是创建方法执行时出现的泄露的内存积累的太多(受不了了),物理内存(一定的固定内存如:磁盘)不足,导致程序运行时要创建的变量无处安放(不知道放哪里,没有明确的目标),而导致的内存溢出的错误!
测试类:
package cn.aiweiyi.qingjing;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void show() {
Long i1;
Long i2;
Long i3;
Long i4;
Long i5;
Long i6;
Long i7;
Long i8;
Long i9;
Long i10;
Long i11;
Long i12;
Long i13;
Long i14;
Long i15;
Long i16;
Long i17;
show();
}
public static void main(String[] args) {
// write your code here
show();
}
}
调整方法区的内存
- 通俗的说就是,因为直接内存,JVM将会在IO操作上具有更高的性能,因为他直接作用于本地系统的IO操作,而非直接内存,也就是堆内存中的数据,如果要作IO操作,会先复制到直接内存,再利用本地IO处理。
总体的解决方案:
- 通过更改JVM内存参数:堆、栈、方法区大小
加上之后就可以解决了。希望大家能够减少避免JVM的错误!