程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码。很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事。最近通过学习《深入理解java虚拟机-JVM高级特性与最佳实践》这本书,终于初步了解了一下java虚拟机的内存模型。本 ...
分类:
编程语言 时间:
2016-11-25 20:13:37
阅读次数:
369
ps:文中的图片都来自网络。部分图片来源1. 前言作为一种高级语言,比起c和c++来,很进步的一点就是垃圾回收机制。这省去来了我们很多的工作,不过,我们仍然需要了解垃圾回收,这对我们的成长很有帮助。2...
分类:
编程语言 时间:
2016-11-19 21:20:15
阅读次数:
186
1. 前言这是深入理解java虚拟机一书的笔记,来自第二章。因为这本书讲的比较深奥,这是第二次看,需要记录一下笔记。2. 运行时数据区域java虚拟机所管理的内存分为以下几个区域。ps:图片来自网络2...
分类:
编程语言 时间:
2016-11-18 00:27:37
阅读次数:
215
2016书单如下: 1、深入理解Java虚拟机:JVM高级特性与最佳实践—(已看,预计今年看三遍) 2、Oracle查询优化改写技巧与案例—(已看) 3、Effective Java—(已看) 4、Spring3.x企业应用开发实战 5、Spring技术内幕:深入解析Spring架构与设计原理—(这 ...
分类:
编程语言 时间:
2016-11-11 15:06:37
阅读次数:
179
JDK的bin目录下存在很多有效的命令行工具,它们就是jdk\lib\toos.jar类库的封装。 一、jps:虚拟机进程状况工具,查询出LVMID。 二、jstat:虚拟机统计信息监视工具, 三、jinfo:Java配置信息工具 实时地查看和调整虚拟机的各项参数。 四、jmap:Java内存映像工 ...
分类:
编程语言 时间:
2016-11-07 01:45:18
阅读次数:
156
一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配。对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分配在老年代中,分配的规则并不是百分之百固定的。细节取决于哪一种垃圾收集器组合,还有虚拟机中与内存相关 ...
分类:
编程语言 时间:
2016-11-04 02:10:47
阅读次数:
218
1、对象已死? a、引用计数算法:缺点是它很难解决对象之间的相互循环引用的问题,Java语言中没有选用它。 b、根搜索算法(GC Roots Tracing):通过一系列的名为“GC Roots”的对象作为起始点,开始向下搜索,走过的路径称为引用链,当一个对象没有任何引用链相连,表面此对象不可达。在 ...
分类:
编程语言 时间:
2016-11-03 02:36:31
阅读次数:
258
一、运行时数据区域 1、程序计数器是线程的私有空间,每个线程都有。针对线程执行的是Java代码还是Native代码有两种取值,Java代码时:虚拟机字节码指令的地址;Native代码时:计数值为Undefined。不可能出现OutOfMemeoryError情况。 2、Java虚拟机栈是线程的私有空 ...
分类:
编程语言 时间:
2016-11-02 01:18:22
阅读次数:
303
JVM内存区域 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题。为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识。JVM将内存主要划分为:方法区、虚拟机栈、本地方法栈、堆、程序计数器。JVM运行时数据区如下: 程序计数器 程序计数器是线程私有的区 ...
分类:
编程语言 时间:
2016-10-28 22:48:22
阅读次数:
272
参考 http://book.2cto.com/201306/25434.html HotSpot 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚 ...
分类:
编程语言 时间:
2016-10-24 17:42:18
阅读次数:
162