zoukankan      html  css  js  c++  java
  • JVM内存格局总结

    最近一次面试,面试官让我讲讲JVM的内存这一块的理解。我回答的不满意,今天做一个总结。

    做一个产品,最终要做到高并发、高可靠。归根结底,是对CPU、内存等资源受限所作出的解决方案。就内存而言,我们写的代码:如new一个对象,都要在内存中来运行,如果内存中没有足够的空间,不能创建新的对象,那么程序就无法运行。所以,在调试程序的过程中我们可以经常看到OutOfMemory之类的错误。在Java中我们知道有垃圾回收机制GC来解决内存泄露的问题,那么它是如何解决的呢?了解这部分知识,我想:1.内存是如何划分的?2.内存是如何管理的?3.GC是如何工作的?(其源码?)4.针对内存问题,技术的发展是怎么一步步的解决这些问题的?(当然有软件、硬件发展两个方面)。

    一,先解决内存是如何来划分的?

      在PC中,内存用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换数据。我们常用的软件是安装在计算机的硬盘上的,当执行该软件的时候,才把它调用内存来运行。硬盘用于保存:需要永久保存的、大量的数据。内存用于保存:临时的、少量的数据和程序。此刻,我用Office软件,用键盘向电脑敲入文字,文字先被存储在内存中,当选择保存的时候,内存中的数据才会写入磁盘中。

      内存用半导体存储单元制作而成。包括RAM随机存储器、ROM只读存储器、CACHE高速缓存。其中,ROM由于其永久保存、只读不写的个性,我们在ROM中存放计算机的基本程序和数据,如计算机的BIOS选项中的部分。ROM中的部分不受电脑断电的影响,但是RAM中的东西,则会随着电源关闭而数据丢失,我们常购买的内存条就是RAM集成块集中在一起的一小块电路板,RAM中的数据可以读也可以写。缓存这个东西Cache,我们经常听到的名词,比如一级缓存、二级缓存、三级缓存等。缓存是一个位于CPU和内存之间的,一个读写速度比内存更快的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。

      地址空间,是对物理存储器编码的范围。即是对每一个物理存储单元(一个字节)分配一个号码,通常叫做编址。分配一个号码给一个存储单元的目的是为了找到它,完成数据的读写,这就是所谓的“寻址”。所以地址空间就是寻址空间。我们常说的,我的电脑是内存4G的,就是地址空间是4G,寻址空间是4G,也就是,为每一个字节分配一个号码,总共有4*1024*1024*1024字节。因为KB的含义就是k*Byte.

      知道了上面这些,那么我们接下来要研究的其实就是RAM这一部分了。我们把这一部分知识也常常叫做Java内存的组成。

     

    java内存分为:堆Heap和非堆Non-Heap区。java虚拟机具有一个堆,堆是运行时数据区域,所有实例和数组的内存均从此处分配。堆是Java虚拟机启动时创建的。在java堆之外的内存称为non-heap memory。JVM主要管理堆和非堆两种类型的内存。堆是留给开发人员使用的。非堆是JVM留给自己使用的,所以方法区、JVM内部处理或者内部优化所需要的内存(JIT编译后的代码缓存)、每个类的结构(运行时常数池、字段、方法数据)以及方法和构造方法的代码都在非堆内存中。

    堆,(java代码中所有的new操作),JVM对堆的初始分配的内存由-Xms指定,默认是物理内存的1/64.JVM给堆最大分配的内存由-Xmx指定,默认是物理内存的1/4.当默认堆内存小于40%的时候,JVM就会增大堆直到-Xmx的最大限制。空余堆内存大于70%时,JVM会减少直到-Xms的最小限制。(有时候,服务器设置-Xms和-Xmx大小相等,目的是避免每次GC后需要调整堆的大小)对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

    未完待续......

  • 相关阅读:
    UVA
    UVA
    模板——扩展欧几里得算法(求ax+by=gcd的解)
    UVA
    模板——2.2 素数筛选和合数分解
    模板——素数筛选
    Educational Codeforces Round 46 (Rated for Div. 2)
    Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses
    Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence
    Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count
  • 原文地址:https://www.cnblogs.com/RunForLove/p/4224971.html
Copyright © 2011-2022 走看看