【面试V01】java内存分区、堆栈区别

2020-03-29  本文已影响0人  trayliu_小马过河

java内存分区

Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间,有的随着jvm进程的启动而存在,有的则是依赖用户线程的启动和结束而建立和销毁。

image

共享数据区:

JDK6中常量池在方法区 JDK7常量池在堆

image

Java堆主体分为

线程私有:


java中堆和栈的区别

每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。而堆是所有线程共享的一片公用内存区域。对象都在堆里创建,为了提升效率线程会从堆中弄一个缓存到自己的栈,如果多个线程使用该变量就可能引发问题,这时volatile 变量就可以发挥作用了,它要求线程从主存中读取变量的值。

stack:

每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。

heap:

所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。

上一篇 下一篇

猜你喜欢

热点阅读