深入理解java虚拟机——java内存区域与内存溢出异常

     2022-03-21     523

关键词:

Java虚拟机全称:java virtual machine;是Java开发语言中,用来运行Java字节码文件的平台;通俗的讲,就是一个程序。它提供对Java字节码的解释及运行,从而使Java语言能独立于各个系统平台。

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间。Java虚拟机所管理的内存包括以下几个运行时数据区域:
1)程序计数器: 可以看作是当前线程所之行的字节码的行号指示器。字节码解释器就是通过改变计数器的值来选取下一条需要执行的字节码指令。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此每个线程都需要一个独立的程序计数器。
2)Java虚拟栈:与程序计数器一样,也是线程私有的。生命周期和线程相同。
3)本地方法栈:为虚拟机使用到的Native方法服务。
4)Java堆:Java堆十倍所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域用于存放对象实例。Java堆是垃圾收集器管理的主要区域。
5)方法区:同样也是所有线程共享的区域,用于存储已被虚拟机加载的数据。
6)运行时常量池:是方法区的一部分。用于存放编译期生成的各种字面量和符号引用。
7)直接内存:

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,则必须先执行相应的类加载过程。(p45)
 











深入理解java虚拟机一java运行时内存区域与class文件

一 JAVA运行时内存区域JVM在加载class文件时,会将class文件定义的数据结构转为运行时内存中的数据,那么jvm是如何安排运行时的内存区域呢?jvm将运行时内存划分为以下几个部分:堆:所有线程共享方法区:类信息、静态变... 查看详情

深入理解java虚拟机读书笔记1--java内存区域

  Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的... 查看详情

深入理解java虚拟机

java内存区域Java虚拟机执行java程序时会将管理的内存划分为若干个区域:   1. 程序计数器    程序计数器是一个”线程私有“的内存区域,用于获取下一条需要执行的字节码指令,如分支、循环、跳转等。  2.Ja... 查看详情

深入java虚拟机:java内存区域与内存溢出

 原文出处: 兰亭风雨内存区域Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈... 查看详情

java虚拟机java内存区域与内存溢出异常

  本文参考自《深入理解Java虚拟机》一书。主要总结一下java虚拟机内存的各个区域,以及这些区域的作用、服务对象以及其中可能产生的问题。1.运行时数据区域  java虚拟机在执行java程序的过程中会把它说管理的内存划分... 查看详情

深入理解java虚拟机-常用vm参数分析

Java虚拟机深入理解系列全部文章更新中...深入理解Java虚拟机-Java内存区域透彻分析深入理解Java虚拟机-常用vm参数分析深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别JVM内存分配文盲深入理解Java虚拟机-如何利用JDK自带... 查看详情

《深入理解java虚拟机》--内存

  JVM对于操作系统来说是一种应用程序,JVM要运行的时候,操作系统会创建对应的进程而且分配一定大小的内存。 一、内存结构  当虚拟机得到系统分配的内存后,它在其内存空间中就是老大,管理对象内存的分配以及... 查看详情

深入理解java虚拟机:jvm内存管理与垃圾收集理论(代码片段)

文章目录阅读的疑问???第二部分自动内存管理第2章Java内存区域与内存溢出异常1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区6.直接内存(我理解就是堆外内存吧)HotSpot虚拟机对象探秘1.对象的创... 查看详情

深入理解java虚拟机读书笔记——java内存区域与内存溢出异常(代码片段)

学习参考资料:周志明老师的著作《深入理解Java虚拟机(第3版)》1.运行时数据区域根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会分为以下几个运行时数据区域,如下图所示。其中每个线程有... 查看详情

深入理解java虚拟机--初探

1.走近Java     这一章主要介绍了Java的发展历史,JVM种类,最后的编译OpenJDK.我编译的OpenJDK10.2.Java内存区域与内存溢出异常  2.1JVM中几个数据区      方法区,虚拟机栈,本地方法栈,堆,程序计数器.  2.2.1 程序计数器      是... 查看详情

深入理解java虚拟机--初探

1.走近Java     这一章主要介绍了Java的发展历史,JVM种类,最后的编译OpenJDK.我编译的OpenJDK10.2.Java内存区域与内存溢出异常  2.1JVM中几个数据区      方法区,虚拟机栈,本地方法栈,堆,程序计数器.  2.2.1 程序计数器      是... 查看详情

深入理解java虚拟机垃圾回收机制

本文内容来源于《深入理解Java虚拟机》一书,非常推荐大家去看一下这本书。本系列其他文章:【深入理解Java虚拟机】Java内存区域模型、对象创建过程、常见OOM1、垃圾回收要解决的问题垃圾收集(GarbageCollection,GC),要设计... 查看详情

java虚拟机深入研究——java内存区域

 JAVA虚拟机深入研究(一)——关于Java的一些历史 JAVA虚拟机深入研究(二)——JVM虚拟机发展以及一些Java的新东西 JAVA虚拟机深入研究(三)——Java内存区域 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的... 查看详情

深入理解java虚拟机走进java

1.JDK:java程序设计语言、java虚拟机、javaAPI二、自动内存管理机制-----------------------------------------------------  1.运行时数据区域:    (1)java虚拟机在执行java程序的过程中会把所管理的内存划分为若干个不同的数据区域。这些... 查看详情

深入理解java虚拟机第二部分.内存自动管理机制.3.垃圾收集器与内存分配策略

1、学习目的当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。Java内存运行时区域的各个部分,其中程序计数器、虚... 查看详情

深入理解jvm虚拟机:java运行时数据区域

概述JVM是Java语言的精髓所在,因为它Java语言实现了跨平台运行,以及自动内存管理机制等,本文将从概念上介绍JVM内存的各个区域,说明个区域的作用。JVM运行时数据区模型Java虚拟机在执行Java程序的过程中会把它所管理的内... 查看详情

书籍摘要-深入理解java虚拟机

java内存区域和内存溢出异常划分内存: java虚拟机在执行java程序时将内存划分为5个部分。线程私有的有成员计数器、虚拟机栈、本地方法栈,线程共享的有方法区、堆。 程序计数器储存字节码行号,此区域未规定任何内存溢... 查看详情

深入理解java虚拟机读书笔记三

深入理解Java虚拟机第三章内存管理读书笔记垃圾回收需要解决的三个问题是:哪些内存需要回收何时回收如何回收哪些内存需要回收对于Java内存运行时区域,程序计数器\虚拟机栈\本地方法栈三个部分是线程私有的,随线程而生,随... 查看详情