关于Java虚拟机二三事(一)---Java技术体系及JVM内存结构

2024-08-23 01:58

本文主要是介绍关于Java虚拟机二三事(一)---Java技术体系及JVM内存结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

作为一个爱好Java的程序猿,自然少不了对JVM的学习和研究,《深入理解Java虚拟机》一书,大概从头到尾完整地看了四五遍,有些地方感觉讲的粒度比较粗,但只是少数,总体而言,这本书讲解的非常棒,不少东西都是看了第二次,甚至第三次之后才有了进一步的理解。

走进Java-Java技术体系

从广义上讲,Clojure、JRuby、Groovy等运行于Java虚拟机上的语言及其相关程序都属于Java技术体系中的一员。但是,如果仅从传统意义上看,Sun官方所定义的Java 技术体系包括以下几个组成部分。

  • Java程序设计语言
  • 各种硬件平台上的Java虚拟机
  • Java API类库
  • Class文件格式
  • 来自商业机构及开源社区的第三方Java类库

    这里,还可以进一步细分,
    Java体系

      其中,JVM(Java Virtual Machine,Java虚拟机)可以说是支撑整个Java技术体系运行的关键所在。下图是Java虚拟机的整体结构,主要描述的是从编写好的Java代码(.java文件),经过编译器编译形成字节码文件(.class文件),字节码文件通过类加载器加载到运行时数据区中,并由执行引擎按照代码执行顺序逐步执行。

    Java虚拟机

      不同于C/C++,Java程序员将内存控制的权力交给了Java虚拟机,因此,为了能够更好的了解虚拟机对内存的使用,以及对内存泄漏和溢出等方面问题的定位,有必要深入理解Java虚拟机的内存管理机制。

      而Java虚拟机最主要的内存区域,便是运行时数据区,也就是下图中红色箭头所指的区域(Runtime Data Areas)。

运行时数据区

  这部分区域,便是Java程序在运行时,所有涉及的变量、方法、对象存储的地方。我们可以通过下图更进一步了解运行时数据区的内部结构划分。
  
运行时数据区结构

从上图可知,运行时数据区总共分为5部分:方法区、虚拟机栈、本地方法栈、堆、程序计数器。下面将简单介绍一下各部分在运行时数据区中的主要作用。后续将做进一步的详细介绍。
  1.程序计数器:
  程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器,如果了解计算机处理器内部结构的同学,其实可以很容易理解,处理器中会有32个32位的寄存器,寄存器是用来进行各类计算的基本单元,而程序计数器本质便是一个32位的寄存器,它存放的是当前字节码执行的行号,同时利用程序计数器,也能够定位到下一句即将执行的语句。
   又因为Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,因此在任何一个确定的时刻,一个处理器都只会执行一条线程。因此,为了线程切换后能够恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。
   2.Java虚拟机栈:
   与程序计数器一样,虚拟机栈也是线程私有的,虚拟机栈主要描述的是Java方法执行的内存模型,每个方法在执行的同时,会创建一个栈帧,每个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口信息等。而方法从调用到完成的阶段,就是入栈到出栈的过程。
   3.本地方法栈:
   本地方法栈与虚拟机栈的作用非常相似,他们之间区别不过是虚拟机栈为虚拟机执行Java方法提供服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
   4.Java堆:
   对于大多数应用来说,Java堆是Java虚拟机中所管理内存中最大的一块,因为Java堆中存放了所有的对象实例和数组。且Java堆被所有线程所共享,在虚拟机启动的时候会自动创建,这块区域也是垃圾回收时的重点区域。
   5.方法区:
   方法区与Java堆一样,被各个线程所共享内存,它用于存储虚拟机加载的类信息、常量、静态变量、即时编译器变异后的代码等数据。这里需要额外提及的是运行时常量池,它是方法区的一部分,Class文件中除了存放类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译阶段生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

          

这篇关于关于Java虚拟机二三事(一)---Java技术体系及JVM内存结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098033

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听