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后需要调整堆的大小)对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
未完待续......
JVM内存格局总结的更多相关文章
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- jvm系列(二):JVM内存结构
JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...
- jvm内存溢出分析
概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么? 当程序需要申请内存的时候,由于没有足够的内存,此时就会抛出OutOfMemoryError,这就是内存溢出 内存溢出和 ...
- jvm内存区域
概述 jvm内存分为几个区域: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 这些内存区域是在java进程中细分的,为java程序提供服务 不同的区域存储的内容不一样,生命周期 ...
- JVM内存管理&GC
一.JVM内存划分 |--------------------|-------------PC寄存器-------| |----方法区 ---------|--------------java 虚拟机 ...
- JVM内存模型、指令重排、内存屏障概念解析
在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...
- JVM内存管理------垃圾搜集器参数精解
本文是GC相关的最后一篇,这次LZ只是罗列一下hotspot JVM中垃圾搜集器相关的重点参数,以及各个参数的解释.废话不多说,这就开始. 垃圾搜集器文章传送门 JVM内存管理------JAVA语言 ...
- Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)
来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...
- 如何设置jvm内存
本文向大家简单介绍一下进行JVM内存设置几种方法,安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JR ...
随机推荐
- 移动端基于HTML模板和JSON数据的JavaScript交互
写本文之前,我正在做一个基于Tab页的订单中心: 每点击一个TAB标签,会请求对应状态的订单列表.之前的项目,我会在js里使用 + 连接符连接多个html内容: var html = ''; htm ...
- [Spring框架]Spring JDBCTmplate基础入门总结.
前言:前面有讲过 Spring IOC以及AOP的基本使用方法, 这里就再来讲下Spring JDBCTemplate的使用方法. 一, 概述这里先说一下Spring 整合的一些模板: 从上图中可以看 ...
- Ubuntu-安装-theano+caffe-超详细教程
一.说明 本文是继<Ubuntu-安装-cuda7.0-单显卡-超详细教程> 之后的续篇.theano和caffe是深度学习库,对运算能力需求很大,最好使用cuda进行加速.所以,请先阅读 ...
- jxl写入excel实现数据导出功能
@RequestMapping(params = "method=export", method = RequestMethod.GET) public void exportCo ...
- android studio 使用gradle 导出jar包,并打包assets目录
警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...
- Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)
XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...
- RAC碎碎念
1. 如何查看Oracle是否启动了RAC. SQL> show parameter cluster_database; NAME TYPE VALUE ------------------- ...
- 可变参数宏__VA_ARGS__
在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如:#define pr_debug(fmt,arg...) \printk(KERN_DEBUG fmt,##arg) 用可变参数宏(v ...
- C#中使用Oracle存储过程返回结果集
问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWN ...
- 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 ...