运行时数据区域
Java比起C++一个很大的进步就在于Java不用再手动控制指针的delete与free,统一交由JVM管理,但也正因为如此,一旦出现内存溢出异常,不了解JVM,那么排查问题将会变成一项艰难的工作。
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区。这些区域都有各自的用途,以及创建销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范 7》的规定(注意:我们完全可以从新的JDK1.9开始了解,但是先讲1.7是因为1.7到1.8是JDK的较大的变化,真正实现了永久代的取消.我们先通过了解JDK1.7,然后再看一下1.8在1.7的基础上改变了什么。有助于我们的理解),JVM所管理的内存会被分为以下几个运行时数据区域,如下图所示:
揭秘对象
我们都知道对象是类的一个实例,那么究竟该怎么理解呢?类被加载后存放在元空间(Metaspace),而实例一经创建却是在堆中分配空间,这两个空间又是通过什么来联系的?而对象又是如何被创建的,下面我们就来详细了解下.
语法糖
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。