JVM常见问题
在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么,请大家尝试着回答一下以下问题: 1、JVM管理的内存结构是怎样的? 2、不同的虚拟机在实现运行时内存的时候有什么区别? 3、运行时数据区中哪些区域是线程共享的?哪些是独享的? 4、除了JVM运行时内存以外,还有什么区域可以用吗? 5、堆和栈的区别是什么? 6、Java中的数组是存储在堆上还是栈上的? 7、Java中的对象创建有多少种方式? 8、Java中对象创建的过程是怎么样的? 9、Java中的对象一定在堆上分配内存吗? 10、如何获取堆和栈的dump文件?以上10道题,如果您可以全部准确无误的回答的话,那说明你真的很了解JVM的内存结构以及内存分配相关的知识了,如果有哪些知识点是不了解的,那么本文正好可以帮你答疑解惑。 Q1:JVM管理的内存结构是怎样的? Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。《Java虚拟机规范》中规定了JVM所管理的内存需要包括一下几个运行时区域: Java虚拟机运行时数据区域主要包含了PC寄存器(程序计数器)、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 各个区域有各自不同的作用,关于各个区域的作用就不在本文中相信介绍了。 但是,需要注意的是,上面的区域划分只是逻辑区域