深入理解jvm自动内存管理机制

lcmlyj lcmlyj     2023-01-28     678

关键词:

2.1 C、C++内存管理是由开发人员管理,而Java则交给了JVM进行自动管理

2.2 JVM运行时数据区:方法区、堆(运行时线程共享),虚拟机栈、本地方法栈、程序计数器(运行时线程隔离,私有)

  2.2.1 程序计数器(Program Counter Register):每一个线程都独有一个程序计数器,并且分配了一块线程私有的小块内存,程序运行时,这个计数器会记录字节码文件运行的行数,当线程切换时,则通过这个行数继续执行下面的操作

  2.2.2 虚拟机栈(Java Virtual Machine Stacks):

  (1)虚拟机栈是描述Java方法运行的内存模型(栈帧做着分配和调度的事情),一般描述的“栈”就是这个虚拟机栈,还指的是局部变量表,包括各种基本数据类型(boolear,byte,char,short,int,long,float,double),还有引用对象的地址;

  (2)StackOverFlowError和OutOfMemerryError都和虚拟机栈有关,前者是当线程请求的栈深度大于虚拟机所允许的深度时的异常,后者是动态扩展虚拟机栈深度之后还是超大了会出现的异常;

  2.2.3 本地方法栈(Native Method Stacks):和虚拟机栈高度相似,只不过虚拟机栈用于执行Java方法字节码分配的内存,而本地方法栈是用于本地方法,它和虚拟机栈会抛出同样的异常;关于本地方法:https://www.cnblogs.com/chen-jack/p/7904510.html

  2.2.4 堆(Java Heap):存放对象实例,线程共享,垃圾回收(新生代、老年代),内存分配可以通过-Xmx和-Xms来分配(既可扩展也可固定),超出分配的大小会出现OutOfMemeryError异常;

  2.2.5 方法区(Method Area):线程共享,存储(常量(final)、静态变量、虚拟机加载的类信息等),永久代(并不准确,只是用永久代去实现方法区,达到回收的效果,Java1.8之后没有永久代了);

  2.2.6 运行时常量池(Runtime Constant Pool)

    

 

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

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

深入理解java虚拟机—内存管理机制

前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的。先让我们来看张图有些文章中对线程隔离区还称之为线程独占区,其实是一个意思了。下面... 查看详情

jvm内存管理机制

...墙”,墙外面的人想进去,墙里面的人却想出来。——《深入理解Java虚拟机:JVM高级特性与最佳实践》         Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域... 查看详情

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

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

深入理解java虚拟机第二部分.内存自动管理机制.5.调优实战

高性能硬件上的程序部署策略在高性能硬件上部署程序,目前主要有两种方式:  通过64位JDK来使用大内存。    -- 缺点:GC停顿时间长  使用若干个32位虚拟机建立逻辑集群来利用硬件资源。  --思想:分治... 查看详情

《深入理解jvm——虚拟机类加载机制》

JVM深入理解JVM(5)——虚拟机类加载机制 PostedbyCrowonAugust21,2017在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟... 查看详情

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

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

jvm深入理解自动内存分配与垃圾回收

要想了解jvm自动内存分配,首先必须了解jvm的运行时数据区域,否则如何知道在哪里进行自动内存分配,如何进行内存分配,回收哪里的垃圾对象?jvm运行时数据区:程序计数器,虚拟机栈,本地方法栈,方法区,堆程序计数器... 查看详情

《深入理解jvm——虚拟机类加载机制》(代码片段)

JVM深入理解JVM(5)——虚拟机类加载机制 PostedbyCrowonAugust21,2017在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟... 查看详情

深入理解java虚拟机第二部分.内存自动管理机制.2.hotspot虚拟机对象探秘

2、HotSpot虚拟机对象探秘 对象的创建过程1、加载类虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果... 查看详情

深入理解_jvm内存管理典型配置举例09

以下配置主要针对分代垃圾回收算法而言:1、堆大小设置:   年轻代的设置很关键JVM中最大堆大小有三方面限制:   (1)相关操作系统的数据模型(32-bt还是64-bit)限制;   (2)系统的可用虚... 查看详情

jvm|第2部分:虚拟机执行子系统《深入理解java虚拟机》#yyds干货盘点#

...第2部分:虚拟机执行子系统)</font>前言参考资料:《深入理解Java虚拟机-JVM高级特性与最佳实践》第1部分主题为自动内存管理,以此延伸出Java内存区域与内存溢出、垃圾收集器与内存分配策略、参数配置与性能调优等相关... 查看详情

深入理解_jvm内存管理内存分配和回收策略06

解决两个问题:   1、对象分配内存;   2、回收分配给对象的内存。本节详细讲解分配的问题:名词解释:新生代GC(MinorGC):指发生在新生代的垃圾回收动作,非常频繁,回收速度很快。老生代GC(MajorGC/FullGC)... 查看详情

jvm自动内存管理机制——java内存区域

...区域概述  Java相比较于C/C++的一个特点就是,在虚拟机自动内存管理机制的帮助下,我们不需要为每一个操作都写像C/C++一样的delete/free代码,所以也不容易出现内存泄漏和内存溢出的问题。显然,这里的不容易只是相对而言... 查看详情

深入理解jvm_java代码的执行机制01

本章学习重点:1、Jvm:   如何将java代码编译为class文件。   如何装载class文件及如何执行class文件。   jvm如何进行内存分配和回收。   jvm多线程:线程资源同步机制和线程之间交互的... 查看详情

深入理解jvm--java内存区域

一. 运行时数据区域  Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.   Java虚拟机所管理的内存将会包括以下几个运行时数据区域:                &nb... 查看详情

深入理解jvm:类加载机制

概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行链接工作的语言不同,在Java语言里... 查看详情

java之自动内存管理机制

...垃圾收集器三、相关参考一、内存分配JVM体系结构在了解自动内存管理的内存分配之前,我们先看下JVM的体系结构。代码编译的结果是从本地机器码转变为字节码,经过类加载器加载到虚拟机后才能执行程序。JVM的体系结构主要... 查看详情