1、首先打开jvisualvm.exe,安装插件visualgc插件,重新打开jvisualvm.exe,Metaspace就是方法区old老年代eden新生代s0s1 survivor区2、为何这么设计?假设不做分区,那么所有的对象都在一个区中, 如果现在有些对象需要回收,那么如下图 橙色为回收对象,那么回收结束后,整个空间变得碎片化,这样就会导致有些大对象无法分配
Java内存分配浅析计算机存储结构java数据类型基本类型引用类型Java内存区域寄存器Register栈堆栈Stack堆Heap区别String类型存放静态域static storageb常量池constant pool非RAM存储堆栈溢出 Java内存分配浅析计算机存储结构先来简单了解下计算机的存储结构,计算机采用三级存储结构: - 高速缓冲存储器cache - 主存储器 - 辅存储器
1、方法区 (1)主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码(JIT)等数据 (2)有时候也称为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 (3)是各个线程共享的区域 (4)方法区里有一个运行时常
转载 2020-04-12 21:16:00
71阅读
2评论
发现网上有两个版本的JVM内存划分,一个是按照《深入理解JVM虚拟机》上的版本,包含程序计数器等,按照是否线程共享划分。另一个我觉得更好记一些,也更适合我自己,在这里记录一下。首先上思维导图:一个个来说道吧。堆内存 heap堆内存主要被划分为新生代和老年代(叫法不一,差不多的意思)。JVM默认Yong和Old分配比例为1:2,即新生代的内存大小为堆内存的1/3。(调整参数:–XX:NewRatio
前文已经了解了对象的创建过程,对象内存空间的回收,在多线程环境下共享变量的同步等虚拟机知识,接下来我们来看下在虚拟机中是如何进行内存管理的,也就是Java虚拟机运行时内存分区。运行时内存分区如上图所示,在Java虚拟机运行时按照内存是否私有可以将内存空间分为线程私有和线程共享两大块,其中 方法区 和 堆 为 线程共享 空间, 虚拟机栈 , 本地方法栈 , 程序计数器 为 线程私有 空间。方法区方法
方法区: 堆栈方法区的交互(配合)关系 堆和元空间都是内存共享的(在1.7之前甚至是直接在内存中是连续的) 【例子】方法区声明变量(放了很多类),引用变量在Java栈中(栈帧),new出来的实例对象在Java堆中。 一、方法区的理解(Non-Heap) Def:方法区是被线程共享的,存储的是类的结构,属性和方法的数据,包含了很多init方法 方法区可以选择独立存在(独立于堆存在的内存空间)或者不
JVM
转载 2021-06-25 10:10:55
875阅读
前言      本章讲解JVM的堆分代策略方法1.概念通过上一章的说明我们可以知道,几乎所有的Java对象实例都放在Java堆中。这也就意味着,堆中对象分配和回收将是JVM的处理重点!为了更好的处理这些对象,JVM便将Java堆分成几块区域。由于根据对象存活的周期不同,所以称之为新生代、老年代和永久代(JDK1.8起被移除)顾名思义,新生代存储的是年轻对象,老年代是稍
转载 2023-10-26 14:42:23
45阅读
本文主要介绍了JVM内存分区的基本情况,着重介绍了栈、堆、方法区的分区情况,并给出实际代码解释内存分配的过程。
原创 2023-07-17 09:07:16
82阅读
# Java代码查看JVM分区内存参数 ## 1. 概述 Java虚拟机(JVM)是Java程序的运行环境,它负责解释和执行Java字节码。JVM分为多个不同的内存区域,每个区域都有自己的功能和用途。了解这些内存区域对于Java程序性能调优和内存管理非常重要。本文将介绍如何使用Java代码查看JVM分区内存参数,并提供示例代码和流程图进行说明。 ## 2. JVM内存区域 JVM内存区
原创 2023-10-29 05:49:16
145阅读
Java 虚拟机 JVM内存分区及其用途
原创 2020-02-25 23:03:46
650阅读
前面我介绍了四种垃圾回收算法,以及它们的优势和特点。但是并没有一种算法能完全替代其他算法,这不时代在进步,技术也在进步,为了让系统的性能更优,出现了分代算法和分区算法。分代算法原理:根据回收对象的特性,把内存区域划分为几块,根据每块内存区间的特点,使用不同的垃圾回收算法,以提高垃圾回收效率。一般来说,Java虚拟机会将新建的对象都放入新生代的内存区域,新生代的特性是朝生夕灭,大约90%的对象会很快被回收,所以适用于复制算法。而老年代中的对象都是从很多次垃圾回收中存活下来的,生命力极强,如果用复制算法,
原创 2021-08-27 10:15:18
358阅读
使用Java的同学都知道,Java语言有两个特点:一次编译,到处运行;不需要手动释放内存。为什么能做到这一点呢?这一切都归功于Java的虚拟机JVM。接下来,我们就聊聊JVM。一、啥是JVMJVM,又称java虚拟机,其作用是充当操作系统的翻译官,能够将.class文件传递给操作系统运行,是JRE的组成部分。JVM的生命周期起始与main方法,这个方法必须是public,接受一个字符串数组参数,返
2.1 概述对Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个对象的new操作去写配对的delete/free 代码,不容易出现内存泄露和内存溢出的问题。不过,仍然需要Java虚拟机是如何使用内存的,方便我们定位内存泄露和内存溢出的问题:2.2 运行时数据区域Java虚拟机在执行Java程序时会把它所管理的内存划分为若干个部分,这些区域有各自的用途、创建和销毁时间,有的区域随着
转载 2023-08-12 14:59:26
50阅读
一、JVM是什么?JVMJava Virtual Machine,Java虚拟机),通过在实际的计算机上仿真模拟各种计算机功能来实现的虚拟计算机。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需编译生成在Java虚拟机上运行的目标代码即字节码,就可以在多种平台上不加修改地运行。JVM在执行字节码时
转载 2023-07-15 21:24:13
338阅读
一、JVM简介java语言是跨平台的,兼容各种操作系统。实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库;jdk=jre+开发工具)。1.1、JVM体系结构主要分为:类加载器(ClassLoader)子系统、运行时数据区和执行引擎。类加载器:在JVM启动时或者类在运行时将需要的class加载到JVM中执行引擎:负责执行cla
一、基本概念JVM 是可运行 Java 代码的虚拟机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。二、运行过程我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下: Java
转载 2023-09-01 10:37:21
60阅读
JVM启动流程1.java虚拟机启动的命令是通过java +xxx(类名,这个类中要有main方法)或者javaw启动的。2.执行命令后,系统第一步做的就是装载配置,会在当前路径中寻找jvm的config配置文件。3.找到jvm的config配置文件之后会去定位jvm.dll这个文件。这个文件就是java虚拟机的主要实现。4.当找到匹配当前版本的jvm.dll文件后,就会使用这个dll去初始化jv
上一期主要是对JVM调优以及工具的使用做了一个专栏的阶段总结,这里不再赘述,可以看个人主页的历史文章。这一期针对内存的溢出进行处理
原创 2022-04-22 10:32:46
44阅读
 JVM类加载器机制与类加载过程jvm虚拟机的种类:Hotspot(Oracle)(基本上都是在说这个) J9, JikesRVM(IBM) Zulu, Zing (Azul)Launcher是一直用于启动JVM进程的启动器,有两种:一种windows平台下运行时会保留在控制台 一种用于执行Java的GUI程序,不会显示任何程序的输出信息Launcher只是一个封装了虚拟机的执行外壳,
转载 2023-07-24 22:09:14
298阅读
JVM运行时数据区一、概述1、JVM 内存布局2、Java 线程二、PC 寄存器三、虚拟机栈1、概述2、栈帧2.1、栈帧内部结构3、局部变量表4、操作数栈5、代码追踪6、栈顶缓存技术7、动态链接与常量池8、方法调用:解析与分派9、方法返回地址 运行时数据区由 方法区、堆、程序计数器、本地方法栈和虚拟机栈几大部分构成。一、概述1、JVM 内存布局经典的 JVM 内存布局如下图:向上与类加载器子系统
转载 2023-11-24 10:35:30
60阅读
  • 1
  • 2
  • 3
  • 4
  • 5