精华内容
下载资源
问答
  • JVM:图文详解Java虚拟机的内存结构

    万次阅读 多人点赞 2019-09-29 07:33:11
    本文将全面讲解Java虚拟机的内存模型 & 分区,希望你们会喜欢

    前言

    • 了解Java中的对象、变量等存放的内存区域十分重要
    • 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢

    在接下来的日子,我会推出一系列讲解JVM的文章,具体如下;感兴趣可持续关注 Carson_Ho的CSDN博客哦

    示意图


    目录

    示意图


    1. 内存模型 & 分区

    • Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区
    • 在运行时数据区里,会根据用途进行划分:
      1. Java虚拟机栈(栈区)
      2. 本地方法栈
      3. Java堆(堆区)
      4. 方法区
      5. 程序计数器

    示意图

    • 下面,我将详细介绍每个内存模型分区

    2. Java堆

    • 示意图
      示意图

    • 简介

    示意图

    关于垃圾回收的讲解会在接下来推出的文章里讲解


    3. Java虚拟机栈

    • 示意图
      示意图

    • 简介

    示意图


    4. 本地方法栈

    • 示意图

    示意图

    • 简介
      十分类似Java虚拟机栈,与Java虚拟机区别在于:服务对象,即
      Java虚拟机栈为执行 Java 方法服务;本地方法栈为执行 Native方法服务

    5. 方法区

    • 示意图
      示意图

    • 简介

    示意图


    • 其内部包含一个运行时常量池,具体介绍如下:

    示意图


    6. 程序计数器

    • 示意图

    示意图

    • 简介

    示意图


    7. 额外知识:直接内存

    • 定义:NIO类(JDK1.4引入)中基于通道和缓冲区的I/O方式 通过使用Native函数库 直接分配 的堆外内存
    • 特点:不受堆大小限制

    不属于虚拟机运行时数据区的一部分 & 不在堆中分配

    • 应用场景:适用于频繁调用的场景

    通过一个 存储在Java堆中的DirectByteBuffer对象 作为这块内存的引用 进行操作,从而避免在 Java 堆和 Native堆之间来回复制数据,提高使用性能

    • 抛出的异常:OutOfMemoryError,即与其他内存区域的总和 大于 物理内存限制

    8. 总结

    • 本文全面讲解JVM中的内存模型 & 分区,总结如下

    示意图

    • 在接下来的日子,我会推出一系列讲解JVM的文章,具体如下;感兴趣的同学可以继续关注本人运营CSDN博客哦:https://blog.csdn.net/carson_ho

    示意图


    请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

    展开全文
  • 设置Win7虚拟机的内存

    千次阅读 2017-09-29 15:02:43
    2. 操作过程  设置Win7虚拟机的内存是在Win7系统内部进行的,所以说我们要进入Win7虚拟机内部进行相应的操作,如下所示,在桌面上鼠标右键点击【计算机】,在出现的下拉列表框中选择【属性】  在【属性】面板中...

    1. 操作环境

    VMware

    • VMware® Workstation 14 Pro

    Windows

    • Win7旗舰版

    2. 操作过程

      设置Win7虚拟机的内存是在Win7系统内部进行的,所以说我们要进入Win7虚拟机内部进行相应的操作,如下所示,在桌面上鼠标右键点击【计算机】,在出现的下拉列表框中选择【属性】

    这里写图片描述

      在【属性】面板中,点击【高级系统设置】

    这里写图片描述

      在【系统属性】面板中,点击【高级】面板中的【设置】按钮

    这里写图片描述

      在【性能选项】面板中点击【高级】面板中的【更改】按钮

    这里写图片描述

      在【虚拟内存】面板中取消勾选“自动管理所有驱动器的分页大小”,选中C盘,点击“自定义大小”单选框,在这里我们可以设置自己的初始值以及最大值,如下图所示,当填写完成后,点击【设置】按钮即可设置成功

    这里写图片描述

      我们也可以以此类推的设置其余各盘的虚拟内存占用量,当全部设置好之后,点击【确定】按钮进行相应的保存操作。

    这里写图片描述

      当所有的都设置好并保存后,系统会提示我们是否重启计算机以使配置生效,此时我们点击【确定】就可以了。

    这里写图片描述

    展开全文
  • 通过前面两篇博客的铺垫:java虚拟机JVM–java虚拟机的结构, java虚拟机JVM–java虚拟机垃圾的回收机制详解, 本篇将从JVM的内存如何分配的以及内存是如何回收的 角度来介绍java虚拟机的内存管理,来回答这一个遗留下...

    前言

    在上一篇博客中,还遗留了一个问题:JVM的内存如何分配最高效?换一种说法就是:JVM的内存是如何的分配以及回收的?通过前面两篇博客的铺垫:java虚拟机JVM–java虚拟机的结构, java虚拟机JVM–java虚拟机垃圾的回收机制详解, 本篇将从JVM的内存如何分配的以及内存是如何回收的 角度来介绍java虚拟机的内存管理,来回答这一个遗留下的的问题。

    再贴一下JVM内存结构图:

    在这里插入图片描述

    学java时应该看过这么一句话:new 出来的对象都是在堆中的。事实上, 堆内存是JVM中最大的一块内存, 而GC也是针对堆内存进行回收,所以下面我们将进入堆内存, 去看看堆内存的结构。

    内存的分配及回收–堆中的新生代和老年代

    java堆被分为两部分, 一部分被称为新生代, 一部分称为老年代, 他们的比例通常为 1:2:

    在这里插入图片描述

    新生代

    新对象被创建后一般来说都是进入新生代。新生代的特点是每次垃圾回收都需要回收大量的对象。JAVA中的对象大多数都是朝生夕死,所以很多对象创建后很快就没用了,需要被回收,所以在新生代中使用了前一篇博客介绍到的 复制算法, 因为这样是最高效的,所以我们把新生代又划分为了三个区域,一个Eden区, 两个Survivor区,比例为 8:1:1,这种比例提升了复制算法的内存使用效率:

    在这里插入图片描述

    每次对象会存在于Eden区和一个Survivor区, 当内存不够时,触发GC,然后把依然存活的对象复制到另一个空白的Survivor区, 然后直接清空其余新生代内存,然后如此循环。总有一个Survivor区是空白的。每进行一次GC,存活对象的年龄+1, 默认情况下,对象年龄达到15时,就会移动到老年代中。

    老年代

    老年代的特点是每次回收都只回收少量对象。当对象的年龄达到15就会存放到老年代,还有一种情况就是对象需要分配较大空间是,也会直接存放到老年代,从上面的图也可看出, 老年代的空间是要比新生代大的。老年代空间大的原因在于, 老年代的对象都是生命周期比较长的, 会被引用的时间比较久,如果GC太频繁,会严重影响效率,因为每次被回收的对象总是很少的, 确需要把整个老年代扫一次, 所以给老年代分配更多空间,减少GC回收的频次,有利于提升效率。这就是为什么新生代和老年代的比例为 1:2.

    针对老年代的特点,采用的垃圾回收算法是标记整理算法, 就是将标记不回收的对象移动到一端,然后清除边界以外的内存。

    老年代的GC触发,一般都伴随着新生代的GC,因为新生代触发一次GC,就可能有对象年龄大于15而移动到老年代, 导致老年代内存满了。

    永久代

    在上图中的方法区, 还画了一个永久代。我们都知道方法区中(即永久代)存放类及方法的信息、静态常量等(在JDK1.7以前,不包括1.7)。但是类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。所以从JDK 1.7开始, 存在于永久代的常量池移动到了 堆区中,从JDK1.8开始,就没有永久代了, 永久代被元空间的概念所替代。

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过参数来指定元空间的大小。

    到此,我们最开始的疑问:JVM的内存是如何的分配以及回收的? 就讲完了~

    喜欢的朋友,麻烦点个赞吧~

    展开全文
  • Dalvik虚拟机的内存管理

    千次阅读 2013-07-21 15:39:10
    Dalvik虚拟机的内存分为三种类型: Java Object Heap, Bitmap Memory, Native Heap. 下面,就这三种类型进行详细讲解:    一. Java Object Heap:  Java Object Heap是用来分配Java对象的,代码中new出来的Java...

        Dalvik虚拟机的内存分为三种类型: Java Object Heap,    Bitmap Memory,   Native Heap.    下面,就这三种类型进行详细讲解:

          

        一.    Java Object Heap:

         Java Object Heap是用来分配Java对象的,代码中new出来的Java对象都在Java Object Heap中。 Java Object Heap最小值和最大值默认是2M和16M, 不过不同的手机可能设置不同的值。  在SDK中的ActivityManager, 使用getMemoryClass来获取本机的最大值。

        Java Object Heap的最大值也就是我们平时所说的Android应用程序进程能够使用的最大内存。这里必须要注意的是,Android应用程序进程能够使用的最大内存指的是能够用来分配Java Object的堆


       二.    Bitmap Memory:

         BitmapMemory 也称为External Memroy ,是用来处理图像的。 在Android3.1之前,BitmapMemory是在Native Heap中进行分配, 但是这部分内存同样计入到了Java ObjectHeap中 。在3.1之后的版本中, BitmapMemory直接在Java Object Heap中进行分配,可以接收GC管理了。

      

         .    Native Heap:

           在Android Native Code中使用malloc分配出来的内存,就是Native Heap.   这部分内存不受Java Object Heap限制,可以自由使用,但是会受到系统限制。


            在Android3.1以及更高的版本中,我们可以在AndroidManifest.xml的application标签中增加一个值等于“true”的android:largeHeap属性来通知Dalvik虚拟机应用程序需要使用较大的Java Object Heap。事实上,在内存受限的手机上,即使我们将一个应用程序的android:largeHeap属性设置为“true”,也是不能增加它可用的Java Object Heap的大小的,而即便是可以通过这个属性来增大Java Object Heap的大小,一般情况也不应该使用该属性。


         注: 参考文章 http://blog.csdn.net/luoshengyang/article/details/8852432

    展开全文
  • JVM中的堆啊、栈啊、方法区什么的,是Java虚拟机的内存结构,Java程序启动后,会初始化这些内存的数据。 内存结构就是上图中内存空间这些东西,而Java内存模型,完全是另外的一个东西。 Java中的内存分配: Java...
  • 深入理解java虚拟机的内存模型以及垃圾回收机制(面试必会)(不只讲概念,解析执行过程)(明天接着写,先睡了) java虚拟机调优以后再讲 还没开始写,就已经感觉要把问题用文字讲清楚,要花费大功夫,当面讲都得1...
  • 第一步,关闭虚拟机,例如solr-cluster-sever就是笔者本人的一台虚拟机。 第二步,点击下图中的编辑虚拟机设置对所选择... 第三步,按照下图所示的步骤调节内存。 这样,就能在VMware中更改虚拟机的内存大小。 ...
  • 安装操作系统时候出错所以移除了几次,移除虚拟机时,没有彻底清楚虚拟内存,现在在装虚拟机内存不足怎么办
  • 虚拟机的内存扩展

    2019-07-03 15:07:07
    $ sudo gparted 修改
  • JVM系列--Hotspot虚拟机的内存布局

    万次阅读 多人点赞 2018-07-20 18:57:22
    关于java内存区域部分的堆,栈,方法区三个...java虚拟机的基本架构就是采用栈来进行设计的。当一个程序需要运行的时候,由于要预先内存空间和运行的生命周期,所以需要进行指针的变动,来进行内存大小的分配。是...
  • 其中方法区和堆是java虚拟机共享的内存区域,虚拟机栈,本地方法栈,程序计数器是线程私有的。 程序计数器(Program Counter Register) 当前线程执行字节码的行号指示器。通过改变这个指示器的值来选取下一条需要...
  • VMware中如何更改虚拟机的内存大小?

    千次阅读 2019-04-16 14:48:53
    有时候启动虚拟机,再启动idea,之后电脑根本卡的动不了,那么如何修改虚拟机占用的内存呢? 1.关闭虚拟机 2.编辑虚拟机 3.调节内存 原文地址
  • 不明白的可以另外一篇博文:JDK,JRE,JVM区别与联系一、java内存组成介绍:堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。...
  •  -------Java虚拟机的内存管理 有这样一种说法:“C++认为内存管理太重要了,于是让程序猿们亲自管理,JAVA也认为内存管理很重要,于是不让程序员管理”。这句话反映出了Java和C++在内存管理实践方面有很大的区别-...
  • VMWear 6设置已有虚拟机的内存

    千次阅读 2008-02-14 15:13:00
    VMWear 6设置已有虚拟机的内存 在VMWear中安装一个系统后可能会发现,这台虚拟机的内存不能更改,一个简单的办法可以解决这个问题。进入虚拟机目录下(不是VMWear的安装目录),用文本编辑器打开后缀名为vmx的文件...
  • java虚拟机的内存区域划分

    千次阅读 多人点赞 2012-07-23 13:28:18
    java虚拟机在执行java程序的过程中会把它所管理的内存划分成很多个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而...
  • Java虚拟机的内存分配

    千次阅读 2011-09-05 15:35:58
    一块较小的内存,它的作用可以看作是当前线程锁执行的字节码的行号指示器。任一时刻一个处理器只会执行一条线程中的指令,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器。 2.Jav
  • java 虚拟机的内存限制

    千次阅读 2011-09-19 10:05:10
    有些用户反映在Linux系统中运行Java应用,内存只能使用到2GB,在Java虚拟机中如果把-Xmx参数设置到2GB左右(约1.5-1.8GB),java进程就根本启动不了。我们通常使用JVM都是32位(64位JVM会损失
  • 详细可以看开发者官网:https://developer.android.com/studio/intro/studio-config.html 简单直接修改方式: 修改: -Xmx3g -Xms3g
  • https://docs.vagrantup.com/v2/virtualbox/configuration.html 最下面 config.vm.provider "virtualbox" do |v| v.memory = 1024 v.cpus = 2 end 转载于:https://www.cnblogs.com/lxwphp/p/1...
  • java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干不同的数据区域。 运行时的内存区分为以下几部分:  1. 程序计数器区域  程序计数器是一块较小的内存空间,是为当前线程所执行的字节码的行号指示...
  • Grails1.1和Groovy1.6的Java虚拟机的内存设置和调整 作者:Frerk Meyer 2009.3.21 在这篇文章中,我希望回答下列问题:.
  • myeclipse 中修改虚拟机的内存

    千次阅读 2012-06-12 09:39:59
    window -preferences-对应web容器-配置jdk optional java vm argumengts 中 -Xmx1024M -Xms512M 或者  -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=32m -XX:MaxPermSize=128m -Xverify:none...
  • 如何更改Tomcat中java虚拟机的内存

    千次阅读 2009-12-21 14:46:00
    但是如果多个客户端一起像这里发送数据时,报StandardWrapperValve[xmlreceiver]: Servlet.service() for servlet xmlreceiver threw exception java.lang.OutOfMemoryError,这时需要扩大tomcatjava虚拟机内存,...
  • export JAVA_OPTS="-Xms1024m -Xmx2048m
  • Java虚拟机内存管理

    千次阅读 2017-09-19 08:45:21
    虚拟机的内存模型在jdk1.8之后有了一些变化,我们分开来看,请看下图: 由图我们可以看出,jdk每个版本都会有新生代和老年代,唯一不同的是小于1.8的版本为永久代,而大于等于1.8的版本去掉了永久代,转为元...
  • 虚拟机内存交换

    千次阅读 2019-11-05 23:18:12
    我对此感到疑惑,先开始一番猜测,莫非是主机的内存与虚拟机的内存之间的交换。这个问题可就大了。利用子机攻击母机的套路还是存在的,前几天刚刚看到一篇文章。这让我更加有了兴趣。我想了一下,这种东西应该有前辈...
  • 记一次Linux虚拟机分配内存不足处理方案 起因:公司服务器是windows,而我需要一个基于Linuxdev环境,于是用vmvare创建了一个centos7系统实例,里面安装mysql5.7作为dev环境数据库,安装在根目录,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,679
精华内容 25,871
关键字:

虚拟机的内存