加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

深入理解Java虚拟机

发布时间:2020-12-15 07:40:21 所属栏目:Java 来源:网络整理
导读:目录 第一部分:概述 1 走进Java ? ??1.1 概述 ? ??1.2 Java技术体系 第二部分:自动内存管理机制 2 Java内存区域与内存溢出异常 2.1 运行时数据区域 2.2 HotSpot虚拟机对象探秘 ? ? 1 走进Java 1.1 概述 ? Java优点:它摆脱了硬件平台的東缚,实现了“一次

目录

第一部分:概述

1 走进Java

? ??1.1 概述

? ??1.2 Java技术体系

第二部分:自动内存管理机制

2 Java内存区域与内存溢出异常

 2.1 运行时数据区域

 2.2 HotSpot虚拟机对象探秘

?

?

1 走进Java

1.1 概述

? Java优点:它摆脱了硬件平台的東缚,实现了“一次编写,到处运行”的理想;它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题;它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能;它有一套完善的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能等等。

1.2 Java技术体系

sun官方定义:

  1 Java程序设计语言

  2 各种硬件平台上的Java虚拟机

  3 Class文件格式

  4 Java API类库

  5 来自商业机构和开源社区的第三方Java类库

把Java程序设计语言、Java虚拟机、?Java?API类库这三部分统称为JDK(Java?Development?Kit),JDK是用于支持Java程序开发的最小环境。把?Java?API类库中的Java?SE?API子集和Java虚拟机这两部分统称为JRE(?Java?Runtime?Environment),JRE是支持Jav程序运行的标准环境。

?2 Java内存区域与内存溢出异常

?2.1 运行时数据区域

?

(1)程序计数器

?程序计数器(?Program?Counter?Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

特点:由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是?Native方法,这个计数器值则为空(?Undefined)。

异常:此内存区域是唯一一个在Java虚拟机规范中没有规定任何?Outofmemory?Error情况的区域

(2)Java虚拟机栈

虚拟机栈描述的Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈(?Stack?Frame)用存铺局部变量表、操作数、动态链、方法口等信息。每一个方法从调用直至执行完成的过程,就对应着一个核帧在虚拟机中入栈到出栈的过程

局部变量表存放了细期可知的各种基本数据类型、对象引用(?reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress(指向了一条字节码指令的地址)

特点:线程私有,生命周期与线程相同。

异常:StackOverflowError、OutOfMemoryError。

(3)本地方法栈

本地方法栈与虚拟机栈所发挥的作用类似,虚拟机栈为虚拟机执行Java方法(字节码)服务,本地方法栈为虚拟机使用到的Native方法服务。有的虚拟机(Sun HotSpot)将二者合二为一。

异常:StackOverflowError、OutOfMemoryError

(4)Java堆

Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”(?GarbageCollected?Heap)

异常:OutOfMemoryError

(5)方法区

?

?

?

?

?

?

?

?

?

?

?

?电风扇

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读