Python知识分享网 - 专业的Python学习网站 学Python,上Python222
JVM手册 PDF 下载
发布于:2023-10-28 10:14:18
(假如点击没反应,多刷新两次就OK!)

JVM手册 PDF 下载  图1

 

 

 

资料内容:

 

 

本地方法栈(Native Method Stacks
本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别过是虚拟机栈为虚拟机执
Java方法(也就是字节码)
服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自
由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,
本地方法栈区域也会抛出StackOverflowErrorOutOfMemoryError异常。
么是Native Method?简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method
是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程
语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译去调用一个C的函数。
方法区(MethodArea
方法区也是一块被重点关注的区域,主要特点如下:
线程共享区域,因此这是线程安全的区域。
它用于存储已被虚拟机加载的类信息、常、静态变、即时编译编译后的代码等数据。当
方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是
Java堆区分开来。对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为永久代
Permanent Generation),本质上两者并等价,那么他们之间的区别到底是么?方法区是Java虚拟机规范中的定
义,是一种规范,而永久代是一种实现,一个是标准一个是实现。Java 8以后就没有永久代这个说法,元空间
取代永久代。
Java虚拟机规范对这个区域的限制非常宽松,除Java堆一样需要连续的内存和可以选择固定大小或者可扩展外,
还可以选择实现垃圾收集。相对而言,垃圾收集为在这个区域是比较少出现的,但并非数据进入方法区就如永
久代的名字一样永久存在。这个区域的内存回收目标主要是针对常池的回收和对类型的卸载,一般来说这
个区域的回收成绩比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是有必
要的。