最近在和同事朋友聊天的时候,发现一个很让人思考的问题,很多人总觉得JVM将java和操作系统隔离开来,导致很多人不用熟悉操作系统,甚至不用了解JVM本身即可完全掌握Java这一门技术,其实个人的观点是,Java由于有了JVM才使这门语言简单上手,同时也正是因为Java有了JVM才使的Java这门技术很难深入了解。
在C/C++中我们可以很方便的new内存,delete内存,在内存的使用中我们拥有至高的权利,而Java则不行,JVM这一扇大门死死的堵住了内存的操作细节,你无法直接操作内存,所以你能做的就是百分之百的信任JVM给你带来的各种便利都是非常科学和合理的,但是有时候事实并非如此,JVM也不能百分之百的根据你的程序去猜想你所需要的内存资源更谈不上分布情况了,那么JVM能做的就是以他自认为比较合理的方式去为申请,划分内存。
举个最简单的例子,你了解OutOfMemoryError么?笼统来说它就是内存不足引起的,可是他到底是那一块内存溢出所导致的呢?我们只有掌握和了解了JVM的内存划分,才能真的掌握关于内存出现问题的诊断,甚至可以很方便的调优,起到事半功倍的效果,当然也就会让你不再抱怨JVM。
在本文中,我们将重点介绍如下内容:
- Java的内存划分
- 各个内存的详解
- 创建一个对象后的内存分布情况。
第一、Java内存划分
JVM在运行java程序的时候会把内存划分为如下的几部分,如下图所示: