概述
运行时数据区域
程序计数器
Java虚拟机栈
本地方法栈
Java堆
方法区
运行时常量池
直接内存
hotspot虚拟机对象探秘
对象的创建
对象的内存布局
对象的访问定位概述
Java程序员不需要自己去手动释放内存,而C、C++程序员就需要自己去操作了,原因是Java虚拟机帮我们完成了这个动作,所以我们也要了解jvm的机制,这样出问题后才会知道它到底是什么情况。本章介绍JVM内存各个区...
分类:
编程语言 时间:
2015-07-14 17:59:21
阅读次数:
163
JVM管理的内存
程序计数器(PC):每条线程都有独立的PC
JVM栈(Java栈):描述的是Java方法执行的内存模型,每个方法被执行的时候会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,也是线程私有的。
本地方法栈:与Native方法相关
Java堆:线程共享的内存地址空间,用于存放对象实例,也是GC管理的主要区域。
直接内存:与Native堆相关
方法区:存储已被JVM加载...
分类:
编程语言 时间:
2015-06-01 14:49:10
阅读次数:
212
背景知识
在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。
显然...
分类:
其他好文 时间:
2015-05-27 15:55:07
阅读次数:
150
整个系统的性能取决于如何有效地管理动态内存。
一、页框管理
1、页描述符
2、非一致内存访问(NUMA)
3、内存区(Memory Zone)
ISA总心啊的直接内存存取(DMA)处理器有一个严格的限制:它们只能对RAM的前16MB寻址。在具有大容量RAM的现在32位计算机中,CPU不能直接访问所有的物理内存,因为线性地址空间太小。
Linux把内存节点的物理内存划分...
分类:
其他好文 时间:
2015-05-11 10:55:53
阅读次数:
238
最近开研究kafka,下面分享一下kafka的设计原理。kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并需要能够支撑较大的数据量,且具备良好的容错能力.
1、持久性
kafka使用文件存储消息,这就直接决定kafka在性能上严重依赖文件系统的本身特性.且无论任何OS下,对文件系统本身的优化几乎没有可能.文件缓存/直接内存映射等是常用的手段.因为k...
分类:
其他好文 时间:
2015-03-31 10:53:37
阅读次数:
133
什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA来完成,数据传送完再把信息反馈给CPU,这样能够减少CPU的资源占有率。DMA由硬件实现,从共用系....
分类:
其他好文 时间:
2015-02-07 15:43:45
阅读次数:
1416
https://technet.microsoft.com/zh-cn/library/hh831487.aspxWindows Server 2012 内置新增功能,称为 SMB 直通,用来支持使用具有远程直接内存存取 (RDMA) 功能的网络适配器。使用 RDMA 的网络适配器能够全速运行, 延...
分类:
其他好文 时间:
2015-02-03 17:04:51
阅读次数:
518
事故记录:
10点游戏开服,迅速冲破2300+单区同时在线
18点15分,运营反应玩家进不了,准备吃饭的人被抓回来排查故障
发现,由于直接内存被占满,一直在Full GC ,并且回收不掉,所以完全不处理玩家请求,通知运维重启服务器,临时解决。
2.考虑了下是不是把RPC连接数量改成了8条,超时改长了了导致,试着把数量减少,超时改成2个小时,发现直接内存随着时间推移还在增加。
...
分类:
Web程序 时间:
2014-12-31 20:15:31
阅读次数:
925
JVM内存分配概述Jvm 内存分为:堆、非堆及直接内存三大块。堆区分为年轻代和老年代,永生代属于非堆内存。对象优先在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代class、常量等信息jvm直接加载进持久代Java对象首先进入Eden区,如果对象没有在被引用,会进入存活区(S0-S1顺...
分类:
其他好文 时间:
2014-12-12 11:25:55
阅读次数:
408
Netty的“零拷贝”主要体现在如下三个方面:1) Netty的接收和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行Socket读写,JVM会将堆内存Buffer拷贝...
分类:
Web程序 时间:
2014-11-05 06:58:50
阅读次数:
239