计算机内存可以分为 4 个区,堆内存,栈内存,数据区,代码区。
堆内存: 存放的是对象,如new 出来的东西。
栈内存: 存放局部变量,
数据区: 存放的是静态变量,如String s = "abc",中"abc"其实是放在数据区里面的。
代码区: 存放代码
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
java程序主要通过JVM来实现,java的JVM内存可分为3个区:堆(heap)、栈(stack)和方法区(method)。
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到****作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放数据
1.每个线程包含一个栈区,栈中只保存原始类型数据和对象和对象引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、****作指令区(存放****作指令)。
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
如果我们开发过大型系统或则你写的程序太烂,就会碰到java.lang.OutOfMemoryError: Java heap space 这样的问题,你可以重新调整JVM的内存分配,也可以找出你系统的bug,看是哪个对象耗费了那么大的资源。