JVM的内存管理

发表于:2010-12-10 10:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:青竹少年(cnblogs)    来源:51Testing软件测试网采编

#
java
#
JAVA
#
Java
#
jvm
#
JVM

  最近在看Java优化这方面的书,那必然会涉及到内存管理,我想和大家共同提高,于是写出来,如果有问题,希望能提出来,共同进步嘛!呵呵,不说这些了,好,现在开始你的知识之旅吧!

  在做Java开发的时候常用的JVM内存管理有两种,一种是堆内存,一种是栈内存。堆内存主要用来存储程序在运行时创建或实例化的对象与变量,例如:我们通过new MyClass()创建的类MyClass的对象。而栈内存则是用来存储程序代码中声明为静态(或非静态)的方法。下面我给大家举个例子:

 1publicclassTest{
2    staticVector list=newVector();
3    staticvoidmakeThings(){
4          Object object=newObject();
5          list.add(object);
6      }
7     publicstaticvoidmain(){
8            makeThings();
9      }
10}

  就拿上面的例子来说,放在栈内存中的有:main,makeThings,放在堆内存中有:Test,list,object。

  JVM中对象的生命周期大致可以分为7个阶段:创建阶段、应用阶段、不可视阶段、不可到达阶段、可收集阶段、终结阶段与释放阶段。

  1.创建阶段:

  (1)为对象分配存储空间。

  (2)开始构造对象。

  (3)递归调用其超类的构造方法。

  (4)进行对象实力初始化与变量初始化。

  (5)执行构造方法体。

  还有就是你在创建对象的时候需要注意的地方:

  (1)避免在循环体中创建对象,即使该对象占用内存空间不大。

  (2)尽量及时使对象符合垃圾回收标准。

  (3)不要采用过深的继承层次。

  (4)访问本地变量优于访问类中的变量。

  2.应用阶段:

  在应用阶段涉及到4个引用:

  (1)强引用:是指JVM内存管理器从根引用集合出发遍寻堆中所有到达对象的路径。

  (2)软引用:是具有较强的引用功能,只有当内存不够的时候,才回收这类内存,因此内存足够的时候,不会被回收。

  (3)弱引用:弱引用与软引用对象的最大不同在于:GC在进行回收时,需要通过算法检查是否回收软引用对象,而对于弱引用来说,GC总是进行回收。

  (4)虚引用:主要用于辅助finalize函数的使用。虚引用主要适用于以某种比Java终结机制更灵活的方式调度pre-mortem清除操作。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号