转至:http://blog.csdn.net/ithomer/article/details/6252552一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及如何优化GC的性能、与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理...
分类:
编程语言 时间:
2014-10-14 00:33:07
阅读次数:
444
内存模型 (memory model)内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节.不同平台间的处理器架构将直接影响内存模型的结构.在C或C++中, 可以利用不同操作平台下的内存模型来编写并发程序. 但是, ...
分类:
编程语言 时间:
2014-10-13 23:26:47
阅读次数:
292
不同的编译器根据不同的 64 位模型有所不同。比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 long 和指针是 64 位,int 保持 32 位不变。可以运行下代码得到结果。#include int main(){ ...
分类:
其他好文 时间:
2014-10-13 17:28:39
阅读次数:
1233
在继续了解Java内存模型之前,最好先理解Java对象的内存表示。在网上搜了下Java对象内存表示,说得都不够系统和到位。之前看了《Hotspot实战》一书,对JVM如何表示对象这块说得挺好,推荐一下。如果不理解JVM运行时的各种内存区域以及Java调用的过程,那么把Java内存模型理解到位。这个是一个比较大的主题,以后会陆续写一些JVM相关的。这里单把Java对象的内存拿出来聊聊,文中内容都基于...
分类:
编程语言 时间:
2014-10-10 17:01:34
阅读次数:
1965
Java的并发编程是依赖虚拟机内存模型的三个特性实现的:(1).原子性(Atomicity):原子性是指不可再分的最小操作指令,即单条机器指令,原子性操作任意时刻只能有一个线程,因此是线程安全的。Java内存模型中通过read、load、assign、use、store和write这6个操作保证变量...
分类:
编程语言 时间:
2014-10-09 16:31:07
阅读次数:
247
1. c++提供了太多的存储对象的方式: 堆 栈 全局数据区2. c++提供了太多的访问对象的方式: 变量指针 引用这样, 对于对象的操作就有9种不同的组合了, 所以c++显得比较复杂. 所以想灵活熟练的使用c++, 就得对上面所述的9中对象的操作了如指掌才可以.
分类:
编程语言 时间:
2014-10-02 17:13:33
阅读次数:
152
1)程序计数器:线程私有 当线程数量超过CPU数量时,线程之间根据时间片轮询抢夺CPU资源,对于单核CPU来说,每一个时刻,只能有一个线程在运行,而其他线程必须被切换出去。因此,每个线程都有一个独立的程序计数...
分类:
编程语言 时间:
2014-09-29 23:45:52
阅读次数:
481
目前无论是Lisp还是Javascript(C++就更不用说了),递归深度都远远低于可用内存大小,而且栈一旦分配就无法挪动(有指针似乎无解),这个问题的根源在于call指令会把下一指令的地址入栈。我经过几年的思考终于发现,可以把C++的内存模型完全放在堆上,也就是说进行call之前先new出调用函数所需要的空间,而把返回地址作为参数传递进去。这样就从根源上解决了此问题,那什么尾递归就是个渣,完全没...
分类:
其他好文 时间:
2014-09-29 13:14:50
阅读次数:
196
(原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多。一个开发Java的开发者,一旦了解了JVM内存模型就能够更加深入地了解该语言的语言特性,可能这个章节更多的是概念,...
分类:
编程语言 时间:
2014-09-27 20:04:40
阅读次数:
308
java内存分类:栈内存和堆内存 堆内存:方法区和堆内存,其中方法区是作为堆内存的一个逻辑区域,又称为非堆,目的是与java堆内存区分开来。方法区和堆内存是所有线程共享的的区域。 其中栈内存又分为:虚拟机栈,本地方法栈,程序计数器 虚拟机栈:描述java方法的内存模型,在执行java方法...
分类:
编程语言 时间:
2014-09-23 00:18:03
阅读次数:
289