世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 ——摘自周志明

java内存划分

java虚拟机运行时区域

程序计数器(线程私有)

作用是为了,线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,此区域是java虚拟机中唯一一个没有OOM的区域。

虚拟机栈

java方法调用,会进行压栈,调用完毕出栈。该区域有两种异常:StackOverFlowError和OutOfMemoryError

本地方法栈 虚拟栈相似,只不过为native方法服务。

java堆

1、该区域被所有线程所共享,是最大的一块内存区域
2、并不是所有对象都存储在堆上,有可能栈上分配、标量替换
3、堆可以细分为新生代(eden,from to 8:1:1默认)老年代;还可以划分线程私有TLAB(Thread Local Allocation Buffer),无论怎么划分,
其目的都是更好的回收内存,或更快的分配内存

方法区

1、线程共享
2、存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,别名非堆。

posted @ 2021-01-28 22:12  白杯与咖啡  阅读(75)  评论(0编辑  收藏  举报