- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java存储,JVM虚拟机
Java程序设计
2013 春季
彭启民
iscasj@
Java的存储
寄存器:最快
堆栈:对象引用
堆:存所有JAVA对象
静态存储:存放程序运行时一直存在的数据
常量存储:存于程序代码内部
非RAM存储
Java虚拟机(JVM)的堆中储存着正在运行的
应用程序所建立的所有对象,这些对象通
过new、newarray、anewarray和
multianewarray等指令建立,但是它们不需
要程序代码来显式地释放。
一般来说,堆的是由垃圾回收来负责的,尽管
JVM规范并不要求特殊的垃圾回收技术,甚至根
本就不需要垃圾回收,但是由于内存的有限性,
JVM在实现的时候都有一个由垃圾回收所管理的
堆。
垃圾回收是一种动态存储管理技术,它自动地释
放不再被程序引用的对象,按照特定的垃圾收集
算法来实现资源自动回收的功能。
永远不要考虑对象清理
垃圾回收器
作用域清晰
清理
对象可能不被垃圾回收
垃圾回收并不等于“析构”
垃圾回收只与内存有关
垃圾回收器
System.gc():用于强制进行终结动作
回收空间
使堆中的对象紧凑排列
常见工作方式
引用计数
停止-复制
标记-清扫
垃圾收集的目的是清除不再使用的对象。
gc通过确定对象是否被活动对象引用来确
定是否收集该对象。
gc即垃圾收集机制是指jvm用于释放那些不
再使用的对象所占用的内存。
java语言并不要求jvm有gc,也没有规定gc
如何工作。不过常用的jvm 都有gc,而且大
多数gc都使用类似的算法管理内存和执行
收集操作。
垃圾收集的一个潜在的缺点是它的开销影
响程序性能。
Java虚拟机必须追踪运行程序中有用的对象,
而且最终释放没用的对象。这一个过程需要花
费处理器的时间。
垃圾收集算法的不完备性,早先采用的某些垃
圾收集算法就不能保证100%收集到所有的废
弃内存。
命令行参数透视垃圾收集器的运行
使用System.gc()可以不管JVM使用的是哪一种
垃圾回收的算法,都可以请求Java的垃圾回收
。
在命令行中有一个参数-verbosegc可以查看
Java使用的堆内存的情况:
java -verbosegc classfile
例子:
class TestGC
{
public static void main(String[] args)
{
new TestGC();
System.gc();
System.runFinalization();
}
}
java -verbosegc TestGC 后结果为:
[Full GC 168K-97K(1984K),0.0253873 secs]
168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容
量,说明有168K-97K=71K的对象容量被回收
括号内的数据1984K为堆内存的总容量
收集所需要的时间是0.0253873秒。
finalize方法透视垃圾收集器的运行
在JVM垃圾收集器收集一个对象之前,一般要求程序
调用适当的方法释放资源,但在没有明确释放资源的
情况下,Java提供了缺省机制来终止化该对象心释放
资源,这个方法就是finalize ()。它的原型为:
protected void finalize() throws Throwable
在finalize()方法返回之后,对象消失,垃圾收集开始执
行。原型中的throws Throwable表示它可以抛出任何类
型的异常。
按创建对象相反的顺序释放。
子类的finalize()方法须首先调用基类的finalize()方法!
Jav
文档评论(0)