Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
JVM手册 PDF 下载
匿名网友发布于:2024-03-17 16:16:12
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

JVM手册 PDF 下载 图1

 

 

资料内容:

 

本地方法栈(Native Method Stacks

本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行

Java方法(也就是字节码)

服务,而本地方法栈则是为虚拟机使用到的Native方法服务。

虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自

由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,

本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError异常。

什么是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堆一样不需要连续的内存和可以选择固定大小或者可扩展外,

还可以选择不实现垃圾收集。相对而言,垃圾收集行为在这个区域是比较少出现的,但并非数据进入了方法区就如永

久代的名字一样“永久”存在了。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载,一般来说这

个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是有必

要的。