JVM内存布局

     JVM中将内存分为若干部分:堆、方法区、虚拟机栈、本地方法栈、程序计数器
         
         程序计数器:该区域是内存中较小的一块区域---是当前线程在执行的字节码的行号指示器。程序计数器是线程私有的,每个线程都有一个程序计数器,线程之间的程序计数器相互独立,互不干扰。是java虚拟机规范中唯一一个没有规定任何OutOfMemoryError情况的区域
         
         虚拟机栈:是线程私有的,其生命周期与线程是相同的。虚拟机栈描述的是java方法执行的内存模型,每个方法在执行的时都会创建一个栈帧用于存储局部变量表,操作数栈、动态链接、方法出口等信息。每个方法从调用到结束就会有栈帧在虚拟机栈中入栈和出栈。一个方法的调用链可能会很长,于是当调用一个方法时,可能会有很多的方法都处于执行状态,但是对于执行引擎来讲,至于位于虚拟机栈栈顶的栈帧才是有效的,这个栈帧被称为当前栈,这个栈帧所关联的方法被称为当前方法,执行引擎的所有指令都是针对当前栈帧进行操作的。Stackoverflowerror异常(当线程申请的栈空间大于虚拟机所允许的深度时);outfmemoryError:当虚拟机栈无法申请到足够内存时。局部变量表是一组变量值的存储空间,局部变量表的存储单位是slot。若为实例方法,则第0个slot是存储的指向所有实例对象的引用,在方法中可以通过this来访问到这个隐含的参数;往下是参数,再往下是方法内的局部变量。对于操作数栈,在方法刚开始执行时操作数栈为空,执行过程中会有各种字节码指令写入或者谈出。比如算法运算或者调用其他方法时的参数等。动态链接:类似于与静态链接即解析时符号引用转化为直接引用,动态链接是指在运行时转化为直接引用。
         
         本地方法栈: 功能与虚拟机栈相同,只不过本地方法栈是为native方法服务
         
         堆:java堆是被线程共享的一块区域。Java堆是用来存放实例对象以及数组对象。由于现在有了逃逸分析技术,也可以将对象分配在栈上。同时java堆也是垃圾回收的主要区域,垃圾回收主要采用分代回收,有年轻代,老年代。Java堆可以是物理上不连续的区域,只要逻辑上连续即可。在堆中为对象分配内存的分配方法有:碰撞指针(前提绝对规整,注意多线程同步问题,采用CAS原理加失败重试实现或者本地线程分配缓冲)和空闲列表(不是规整的内存)方法,选择哪一种分配方法取决于是否规整,是否规整取决于采用的垃圾回收算法是否压缩。对象的访问一般有两种方式:句柄和直接访问。堆空间不足时抛出outOfMemoryError。
         
         方法区:与堆一样,是线程共享的的区域。用于存储已经被虚拟机加载的类的类信息、常量、静态变量、编译后的代码,运行时常量池(存储编译器生成的各种字面量与符号引用)等。方法区中有一个运行时常量池,class文件中的常量池在类被加载后就被放入运行时常量池。运行时常量池相对于class文件中的常量池,具有动态性。可以在运行期间通过intern将常量放入池中,方法区空间不足时抛出outOfMemoryError。
         
         在java虚拟机的规范之外还存在一个堆外内存,即直接内存。堆外内存能减少IO时的内存复制,实现零拷贝,不需要堆内存Buffer拷贝一份到直接内存,然后才写入Socket中;而且也没GC。
         
         优点:1、减少了垃圾回收的工作,因为垃圾回收会暂停其他的工作(可能使用多线程或者时间片的方式,根本感觉不到)
              2、加快了复制的速度。因为堆内在flush到远程时,会先复制到直接内存(非堆内存),然后在发送,而堆外内存相当于省略掉了这个工作。
                
         缺点:1、堆外内存难以控制,如果内存泄漏,那么很难排查
              2、堆外内存相对来说,不适合存储很复杂的对象。一般简单的对象或者扁平化的比较适合。

Image placeholder
最闲的码农
未设置
  62人点赞

没有讨论,发表一下自己的看法吧

推荐文章
深入理解JVM - 内存溢出实战

Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,当对象数量到达最大堆的容量限制后就会产生内存溢出异常。最常见的内存溢出就是存在大的容器,而没法回收,比如:Map,List等。出现下面信息

JVM是怎么和操作系统交互的?

来源:阿里巴巴中间件肉眼看计算机是由CPU、内存、显示器这些硬件设备组成,但大部分人从事的是软件开发工作。计算机底层原理就是连通硬件和软件的桥梁,理解计算机底层原理才能在程序设计这条路上越走越快,越走

记一次JVM FullGC引发严重线上事故的定位、分析、解决过程!

这篇文章给大家聊一次线上生产系统事故的解决经历,其背后代表的是线上生产系统的JVMFullGC可能引发的严重故障。一、业务场景介绍先简单说说线上生产系统的一个背景,因为仅仅是文章作为案例来讲,所以弱化

记一次隐藏很深的 JVM 线上惨案的分析、排查、解决!

1、本文背景本文会给大家讲解一个比较特殊的JVM优化案例,这个优化案例本身是因为新手工程师对JVM优化可能了解了一个半吊子,然后不知道从哪里找来了一个非常特殊的JVM参数错误的设置了一下,就导致线上系

JVM CPU Profiler技术原理及源码深度解析

本文介绍了JVM平台上CPUProfiler的实现原理,希望能帮助读者在使用类似工具的同时也能清楚其内部的技术实现。引言研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈。

前端不得不了解的 Flex 布局

背景 又双叒叕被老大拉来顶替前端小姐姐撸代码,接触到了Flex布局,以前只听过没用过,碰巧这次要揭露她的面纱,就记录一下。接触前端的同学都应该知道网页布局是CSS的一个重点,布局的传统方案都是基于盒

前端不得不了解的 Flex 布局

背景 又双叒叕被老大拉来顶替前端小姐姐撸代码,接触到了Flex布局,以前只听过没用过,碰巧这次要揭露她的面纱,就记录一下。接触前端的同学都应该知道网页布局是CSS的一个重点,布局的传统方案都是基于盒

10亿美元!苹果收购Intel大部分芯片业务,晚半步布局5G芯片能赶上华为高通么?

大数据文摘出品作者:易琬玉、曹培信2200名英特尔员工,17000项无线技术专利,伴随着苹果在今天凌晨官宣收购英特尔大部分5G基带业务,都将逐渐流向苹果。这也意味着,继高通、华为、三星、联发科、紫光展

鲲鹏人才培养计划发布 看华为云的鲲鹏生态布局

近日,以“智能化:为经济赋能,为生活添彩”为主题的2019中国国际智能产业博览会在重庆举行。本届智博会不仅汇聚了来自全球智能技术领域的大咖,也吸引了众多国内外知名企业。华为在智博会期间举办了【重庆·选

软件定义IT基础架构,如何看待深信服的产品战略布局?

在很多人的潜意识里,深信服是一家令人尊敬的企业,技术支撑能力强,产品种类多,功能全面,后劲足,是少数能和华为、新华三同台竞技的企业之一。但有时候,深信服也会被这些优势所累,比如经常会被问道:你们和华为

深度盘点丨华为云数据库布局及研发路线图

“华为是个可怕的对手,一旦下定决心做某件事,鲜有做不成的。”这句在圈内少有达成共识的话,也正在一步一步得到应验。很多人或许以为,华为的优势并非软件而是硬件,但其实在数据库软件领域,华为也玩得风生水起华

css3布局方式有几种

css3布局方式有几种css3常用的布局有多栏布局、多列布局、弹性布局、流式布局、瀑布流布局和响应式布局。下面我们来看看各种布局的效果吧。一、多栏布局——栅格系统栅格系统就是利用浮动实现的多栏布局,在

css栅格布局图文详解

圣杯布局圣杯布局是一种三列布局,两边定宽,中间自适应:css:*{ box-sizing:border-box; } html,body{ width:100%; height:100%; margi

CSS常见布局问题

1、多元素水平居中实现一下效果:平常人看见题目,最初感觉实现图片中的效果不难,设置小黑框的宽高边距,字体水平垂直居中即可。其实,题目应该实际上是考察多元素水平居中,即无论元素(小黑框)基数为多少,它们

为什么使用div css布局?

提起DIV+CSS组合,还要从XHTML说起。XHTML是一种在HTML(标准通用标记语言的子集)基础上优化和改进的新语言,目的是基于XML应用与强大的数据转换能力,适应未来网络应用更多的需求。为什么

分享一个可视化开发vue框架下的各类ui的web在线表单设计布局器

新手发帖,第一次不小心刷新了一下就没了本人刚入门vue,偶然间发现这款布局器挺好的,可视化开发element所以分享给大家网站地址:http://lowcode.magicalcoder.c...嵌入

css flex布局的优缺点是什么?

Flexbox布局(FlexibleBox)模块旨在提供一个更加有效的方式制定、调整和分布一个容器里的项目布局(基于一维),即使他们的大小是未知或者是动态的。(这里我们称为Flex)。Flex布局主要

css grid布局的优缺点是什么?

Grid(网格)布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格;能够将网页分成具有简单属性的行和列来完成我们需要的网格布局。grid布局的优点:1:固定和灵活的轨道尺寸2:可以使用行号,

前端-响应式布局

1.使用vw,vh,rem@functionvw($px){ @return($px/1920)*100vw; } @functionvh($px){ @return($px/1075)*100vh

选择器和介绍CSS布局笔记

css选择器: 1.元素选择器,例如:p{}; 2.类选择器,例如:.box{}; 3.ID选择器,例如:#box{};

VMware斥资27亿美元完成对Pivotal的收购

昨日,VMware公司正式宣布,已经完成对Pivotal公司的收购,这笔交易斥资27亿美元。收购完成后,Pivotal的股权结构将从纽约证券交易所退市,以VMware全资子公司的形式运营。其实,VMw

react是mvvm框架吗?

react是mvvm框架吗?不是。React可以作为MVVM中第二个V,也就是View,但是并不是MVVM框架。MVVM一个最显著的特征:双向绑定。React没有这个,它是单向数据绑定的。React是