原文地址http://www.cnblogs.com/xrq730/p/5260294.html 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Jav ...
分类:
编程语言 时间:
2017-03-25 22:38:28
阅读次数:
244
对象内存布局 在Hotspot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头,实例数据,对齐填充。 1.对象头 1.1 存储对象自身的运行时数据(mark word):哈希码,gc分代年龄。 1.2 Class指针:通过该指针确定该对象是哪个类的实例。 在64位系统中,class指针占4B ...
分类:
其他好文 时间:
2017-03-16 20:27:23
阅读次数:
185
概述 一个对象本身的内在结构需要一种描述方式,这个描述信息是以字节码的方法存储在方法区中的。Class本身就是一个对象,都以KB为单位,如果new Integer()为了表示一个数据就占用KB级别的内存就有点不值了,下面讲解JVM是如何做的。为了表示对象的属性、方法等信息,不得不需要结构描述。Hot ...
分类:
其他好文 时间:
2017-03-02 17:23:08
阅读次数:
253
在本系列教材的上一篇(003 Java字符串)中,对Java语言中String类的一些基本情况和整体架构进行了讲解和分析,相信大家已经很好地掌握了。本篇教程主要是补充一些String类的重要特性,帮助大家避免掉使用String过程中的一些陷阱。 首先,补充一个在JDK中使用非常频繁的概念:不可变类。 ...
分类:
编程语言 时间:
2017-02-25 14:52:00
阅读次数:
241
本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解。 结论: 1、通常的类型强转是告诉编译器必须按照指定结构的内存布局来解析对应内存,如上例中“child2* pc21=(child2*)&c1; ”,编译器会把c1对应的内存来当做Deri ...
分类:
编程语言 时间:
2017-02-12 20:57:19
阅读次数:
203
一个由进程内存布局异常引起的问题 前段时间业务反映某类服务器上更新了 bash 之后,ssh 连上去偶发登陆失败,客户端吐出错误信息如下所示:图 - 0 该版本 bash 为部门这边所定制,但实现上并没有改动原有逻辑,只是加入了些监控功能,那么这些错误从哪里来呢? 是 bash 的锅吗 从上面的错误 ...
分类:
系统相关 时间:
2017-02-08 14:42:33
阅读次数:
228
进程的内存布局在结构上是有规律的,具体来说对于 linux 系统上的进程,其内存空间一般可以粗略地分为以下几大段【1】,从高内存到低内存排列: 1、内核态内存空间,其大小一般比较固定(可以编译时调整),但 32 位系统和 64 位系统的值不一样。 2、用户态的堆栈,大小不固定,可以用 ulimit ...
分类:
系统相关 时间:
2017-02-08 13:03:25
阅读次数:
225
1.无继承的普通类: 在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。 定义一个A的变量,然后看其内存布局: 最开始的 4个字节就 ...
分类:
编程语言 时间:
2017-01-17 08:02:54
阅读次数:
253
在上一篇博文里,我们已经看到Linux如何有效地利用80x86的分段和分页硬件单元把逻辑地址转换为线性地址,在由线性地址转换到物理地址。那么我们的应用程序如何使用这些逻辑地址,整个内存的地址布局又是怎样的?打一个比方,内存就像一座城市,而居住在这个城市里的市民就像是各个进程,一个市民吃喝拉撒睡,当然 ...
分类:
系统相关 时间:
2017-01-16 10:52:25
阅读次数:
248
目录 堆溢出点 伪造空闲堆块 释放时重写指向伪造堆块的指针 如何利用 参考资料 堆溢出点 图1 堆溢出点 在edit函数中,没有对输入的长度和原来的长度做判断。 伪造空闲堆块 正常的堆块布局 图2 正常堆块布局 溢出后内存布局 图3 溢出后堆块布局 释放时重写指向伪造堆块的指针 这样就使得strin ...
分类:
系统相关 时间:
2017-01-08 12:34:25
阅读次数:
1553