前些天看了篇文章:
[url]
http://www.ibm.com/developerworks/cn/java/j-perf08273/index.html[/url]
里面关于static的说法,我对起有了较深一步的研究
测试代码:
public class bigObject {
int a=9;
long b=12;
float c=12.3f;
int [] cc=new int [8111110];
}
//测试类
public class tests {
private static Object bigObject; //(1)
public static void main(String args[]) {
long startTime = System.currentTimeMillis();
long numObjects = 0;
// Object bigObject; //(2)
while (true) {
// bigObject = null; //(3)
bigObject = new bigObject ();
long endTime = System.currentTimeMillis();
++numObjects; // We print stats for every two seconds
System.out.println("Objects created = "+ numObjects );(4)
//我在这里加上(4)主要是想看看程序到底在溢出的时候其能建立几个对象
if (endTime - startTime >= 2000) {
System.out.println("Objects created per 2 seconds = "+ numObjects );
startTime = endTime;
numObjects = 0;
}
}
}
}
在做这个测试的时候,需要将自己的jvm内部的堆大小(要不然看到的效果不明显),在eclipse中将vm args 调整为-Xms12m -Xms12m
(注明:下面的所有测试都是在目前上面的1,2,3,4状态修改下测试)
现在测试:
运行tests
你会发现:
Objects created = 1
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
如果你将(2)处的注释去掉,运行结果如下:
Objects created = 1
Objects created = 2
Objects created = 3
Objects created = 4
Objects created = 5
Objects created = 6
。。。。
Objects created per 2 seconds = 95
。。。。。
一直运行下去
如果我们将(1)注释掉,将(2)注释去掉,我们会发现其运行结果
Objects created = 1
Objects created = 2
Objects created = 3
Objects created = 4
Objects created = 5
Objects created = 6
。。。。
Objects created per 2 seconds = 95
。。。。。
一直运行下去
发现和上面的是一样。
如果我们将(1)注释掉,将(2)、(3)注释去掉,我们会发现其运行结果也和上面一样
好了我做如下的总结:
静态变量: 先建立内存对象,再将引用指过去【所以如果引用不申明为null的话,其实就好比在第二次引用指过去的时候(bigObject = new bigObject ();),其已经在内存中有一个原来的引用对象,只是在这次对象建立之后,再将原来的引用改过来】但是如果内存空间只能够容忍一个对象怎么办?(垃圾回收机制不会去回收第一次建立的对象,因为其引用还存在的)那么就会出现java.lang.OutOfMemoryError: Java heap space,
但是如果将上例中的private static Object bigObject; 申明为 Object bigObject; 那样的话,在执行的过程中是先建立引用再指向对象,所以在上例中,将bigobject 设置为null或者不设置时没有影响的,因为原来的第一个引用已经自动的消失了【在执行bigObject = new bigObject ();的时候,先消去原来的引用(垃圾回收机制在知道当前内存不够的时候,自动的回去回收第一次建立的对象,因为其引用已经消失了),再建立对象,再将引用指向现在的对象】。
分享到:
相关推荐
这篇名为“让Struts 1焕发青春——小议对Struts的改造”的文章,可能探讨了如何通过一系列技术手段和策略来提升Struts 1框架的效能和安全性,使其能够更好地适应当前的开发需求。 首先,改造可能涉及到性能优化。...
小议企业网络交易的税收问题-小规模企业税收问题.docx
小议关于研究企业开发费用税务问题.doc
最后,培训后的跟踪评估不可忽视,通过反馈和考核来检验培训成果,不断优化培训方案。 在企业培训的过程中,还需要关注知识管理的问题。企业应当鼓励知识的分享和传承,避免因人才流失导致的知识断层。通过内部培训...
小议电视新闻的开拓与优化.doc
在C#编程中,条形码128是一种常见的数据编码标准,广泛应用于物流、仓储、零售等行业。本文将深入探讨C#实现128条形码打印的方法,并提供相关源代码供参考。...在实践中,根据具体需求进行调整和优化是非常重要的。
小议食品安全问题.doc
资本结构优化则是寻找一种平衡,使得企业在一定时期内能以最低的综合资本成本运作,同时最大化企业价值。这种最优状态被称为【最优资本结构】,它需要通过筹资和融资策略来实现。 【资本结构优化】的重要性在于其对...
【教育培训行业人力资源管理中的问题与对策】 在当前的教育培训行业中,人力资源管理扮演着至关重要的角色。随着行业内的竞争日益激烈,小型教育培训机构如雨后春笋般涌现,但同时也面临着诸多挑战。首先,人力资源...
《小议GPS-RTK技术在道路工程施工中的应用》这篇论文主要探讨了GPS-RTK技术在现代道路工程施工测量中的应用及其优势。GPS(全球定位系统)是一种利用卫星导航定位的系统,它能够实时提供三维坐标、速度和时间信息,...
小议关于农网升级改造工作动员会议.doc
与Java的自动垃圾回收不同,OC要求开发者手动管理内存,这在一定程度上增加了开发复杂度,但也促使开发者更加注重代码的优化,尤其是在资源受限的移动设备上,力求最小化CPU使用率和内存占用。 #### 二、基本原理...
小议我国的价格听证制度-论文.zip
**小议MVC模式开发** MVC(Model-View-Controller)模式是一种广泛应用于Web应用程序设计的架构模式,它的核心思想是将业务逻辑、数据处理和用户界面进行分离,以提高代码的可维护性和可扩展性。在本文中,我们将...
小议公司交易问题研究探析.doc
小议依法治税问题的系统思索.doc
小议贫困学生的助学贷款问题.docx