JVM内存分配简介

面向对象进阶

JVM内存分配

1.xxx.java----xxx.class (编译器进行)

2.xxx.class----类加载器(三种)----在内存分配空间

3.JVM会将内存分为5块
① 栈:
  Java栈区域比较小,空间大约1M。

  特点:(存取数据)速度非常快,在栈里边执行的基本上都是快速的任务:基本数据类型和对象的引用。
② 堆:
  new出来的对象都存放在堆里边,堆里边的每一个对象都会产生一个唯一的地址。

内存地址会赋值给栈里边的引用。堆里边的对象需要垃圾回收机制才能销毁。

  要销毁一个对象:对象=null;

  程序员无法控制的,java堆比较占内存的地方。
③ 方法区:
  又称为静态区,被所以线程共享的区域。
 1. 类(class)
 2. 常量
 3. 成员方法
 4. 静态方法
 5. 静态变量
**常量池:
  主要存放开发过程中涉及到的自变量。
  String s = "123"; s存在栈中 123存在常量池中
④ PC寄存器: 
  主要用来保存JVM的指令以及地址

⑤ 本地方法栈: 
  主要用来保存native方法进入区域的地址

ψ 栈和堆的内容: 
  书架-----堆结构
  盒子-----栈 
栈: 
  栈是一端受限,一端运行操作的线性表。 
  先放的后取,后放的后取,对于栈来说,先进后出(LIFO)
  存储数据有两种结构:
  1. 顺序存储:
    首先要分配一个足够大的数组。控制这个结构,一端进行增删操作,一端不允许操作。

  在这个结构中,让操作的成为栈顶,不让操作的叫栈底
  2. 链式存储
    采用链式结构,控制了入栈和出栈的一个端口,控制一端不能操作
    优点:要多少申请多少,但是用完了一定要释放空间。
堆:
  其实就是经过排序的一种树形数据结构,堆的数据结构指的就是二叉树。

  堆可以看成是一棵树的数组结构 需要从书架上取出一本书,不需要将其它书都拿下来,直接取你想要的数。

原文地址:https://www.cnblogs.com/Gavin520/p/10482625.html

时间: 2024-08-28 02:54:24

JVM内存分配简介的相关文章

最简单例子图解JVM内存分配和回收

一.简介 JVM采用分代垃圾回收.在JVM的内存空间中把堆空间分为年老代和年轻代.将大量(据说是90%以上)创建了没多久就会消亡的对象存储在年轻代,而年老代中存放生命周期长久的实例对象.年轻代中又被分为Eden区(圣经中的伊甸园).和两个Survivor区.新的对象分配是首先放在Eden区,Survivor区作为Eden区和Old区的缓冲,在Survivor区的对象经历若干次收集仍然存活的,就会被转移到年老区. 简单讲,就是生命期短的对象放在一起,将少数生命期长的对象放在一起,分别采用不同的回收

Android性能调优篇之探索JVM内存分配

详细内容请查看我的简书地址:Android性能调优篇之探索JVM内存分配 或者我的个人博客地址:Android性能调优篇之探索JVM内存分配

JVM内存分配及String常用方法

一,JVM内存分配和常量池 ? 在介绍String类之前,先来简单分析一下在JVM中,对内存的使用是如何进行分配的.如下图所示(注意:在jdk1.8之后便没有方法区了): ? ? 如上JVM将内存分为多个不同的区域,这些区域都有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁. ? 区域名称的说明: 1.1,方法区: ? 属于数据共享内存区域,存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据. 1.2,虚拟机

深入理解JVM内存分配策略

理解JVM内存分配策略 三大原则+担保机制 JVM分配内存机制有三大原则和担保机制 具体如下所示: 优先分配到eden区 大对象,直接进入到老年代 长期存活的对象分配到老年代 空间分配担保 对象优先在Eden上分配 如何验证对象优先在Eden上分配呢,我们进行如下实验. 打印内存分配信息 首先代码如下所示: public class A { public static void main(String[] args) { byte[] b1 = new byte[4*1024*1024]; }

jvm内存模型,java类从编译到加载到执行的过程,jvm内存分配过程

一.jvm内存模型 JVM 内存模型主要分为堆.程序计数器.方法区.虚拟机栈和本地方法栈 1.堆 1.1.堆是 JVM 内存中最大的一块内存空间. 1.2.该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中. 1.3.堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivor 和 To Survivor 组成. 2.程序计数器(Program Counter Register) 程序计数器是一块很小的内存

JVM虚拟机-03、JVM内存分配机制与垃圾回收算法

JVM虚拟机-03.JVM内存分配机制与垃圾回收算法 1 JVM内存分配与回收 1.1 对象优先在Eden区分配 大多数情况下,对象在新生代中?Eden?区分配.当?Eden?区没有足够空间进行分配时,虚拟机将发起一次Minor?GC.我们来进行实际测试一下.在测试之前我们先来看看?Minor?GC和Full?GC?有什么不同呢? Minor?GC/Young?GC:指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快. Major?GC/Full?GC:一般会回收老年代,

jvm 内存分配 (转)

深入理解JVM-JVM内存模型 http://www.cnblogs.com/dingyingsi/p/3760447.html 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CP

JVM内存分配

内存分配:当JVM运行起来的时候就会给内存划分空间,那么这块空间称之为运行时数据区.(备注:当一个Java源程序编译成class字节码文件之后,字节码文件里存放的都是二进制的汇编命令,当程序运行的时候,JVM会将这个二进制的命令逐行解释,交给CPU去执行) 运行时数据区将划分为以下几块内容: 1)栈: 每一个线程运行起来的时候就会对应一个栈(线程栈),栈当中存放的数据是被当前线程所独有的.而栈当中存放的是栈帧,当线程调用一个方法的时候,就会形成一个栈帧,并将这个栈帧进行压栈操作,当方法执行完之后

JVM——内存分配与收回策略

JVM的自动内存管理要自动化地解决两个问题:对象分配内存以及回收分配给对象的内存.回收内存前几篇已经讲了,现在说内存分配.对象的内存分配一般分配在堆内存中,也可能经过JIT 编译后被拆散为标量类型间接地在栈上分配.对象主要分配在新生代的Eden 区上,如果启动了本地线程分配缓存,将按线程优先在TLAB (本地线程分配缓存)上分配.少数情况下也可能会直接分配在老年代中,分配的规则不是固定的,与使用哪一种垃圾收集器组合,还与虚拟机中内存相关参数设置有关.对象优先在Eden区分配多数情况下,对象在新生