垃圾回收的前提是判断对象是否存活,对象不再存活时将会被回收,下面是2种判断的方法。 引用计数法: 主流的Java虚拟机并没有使用引用计数法来管理内存,重要的原因就是循环引用的问题难以解决。 可达性分析法: 这个算法的基本思路是:通过一系列称为“GCRoots”的对象作为起始点,向下搜...
分类:
编程语言 时间:
2015-03-30 01:20:35
阅读次数:
275
深入理解Java虚拟机/classloader,类的加载机制;new过程;父亲委托机制;内存区域:堆栈方法区、程序计数器线程、常量池、运行时常量池、new string、内存溢出Java编程思想/2015.03.26_不确定对象的个数,如何存储多个对象;arraylist的add、size、get方...
分类:
其他好文 时间:
2015-03-28 01:08:11
阅读次数:
187
这几天从图书馆借了《深入理解Java虚拟机》,看到内存区域这一章,总结了一下。Java虚拟机所管理的内存区域如下图所示:其中各区域具体的作用如下1、程序计数器字节码解释器通过改变程序计数器的值来选取下一条要执行的字节码指令(分支、循环线程恢复等基础功能都需要依赖这个计数器);每个线程都有一个独立的程...
分类:
其他好文 时间:
2015-03-27 23:50:24
阅读次数:
288
首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单、易用、关键是傻瓜式的内存管理技术。GC技术起源于1960年诞生于MIT的Lisp语言,由此可见越聪明的人越懒惰。 最近有一种想法:程序开发,程序设计从本质上...
分类:
编程语言 时间:
2015-03-20 18:37:26
阅读次数:
168
http://blog.csdn.net/ccit0519/article/details/11241403深入理解Java内存模型(一)——基础并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机...
分类:
编程语言 时间:
2015-03-20 16:19:05
阅读次数:
226
在内存管理方面,Java相对于C和C++的区别在于Java具有内存动态分配以及垃圾收集技术,但平时我们很少去关注JVM的内存结构以及GC,在出现内存泄露或溢出方面的问题,排查工作将变得异常艰难。 1. 运行时数据区域 Java虚拟机在执行Java程序时会将其管理的内存按照用于划分为...
分类:
编程语言 时间:
2015-03-19 17:58:51
阅读次数:
231
使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把《深入理解Java虚拟机》这本书读了一下,也算解答了自己很多的疑惑。 JAVA不仅仅是一门语言,而是由一系列软件和规范形成的技术体系,我们...
分类:
编程语言 时间:
2015-03-18 15:34:31
阅读次数:
148
说明:本文的内容是看了《深入理解Java虚拟机:JVM高级特性与最佳实践》后为加印象和理解,便记录了重要的内容。 1 ?开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可是自己把代码运行起来,可是结...
分类:
编程语言 时间:
2015-03-17 18:23:55
阅读次数:
229
一、垃圾收集Java虚拟机的堆里存放着正在运行的java程序所创建的所有对象。当一个对象不再被程序引用时,它所使用的堆空间可以被回收,以便后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。在释放不再被引用的对象的过程中,垃圾收集器运行将要被释放的对象的终结方法(finalizer)。除了释放不再被引用的对象,垃圾收集器还要处理堆碎片。在一个虚拟内...
分类:
编程语言 时间:
2015-03-16 12:56:34
阅读次数:
168
学过其他编程语言的都应该会知道递归这个问题,递归函数是在一个函数通过名字调用自身的情况下后构成的。function fac(num){
if(num<=1){
return 1;
}else{
return num*fac(num-1);
}
}
这是一个比较经典的阶乘算法,这个写法就实现我们所说的递归。这个代码看起来是没有什么问题, 在c或者其他编程语言都有这样的...
分类:
编程语言 时间:
2015-03-15 15:22:51
阅读次数:
122