解决Java内存泄露问题方案

内存泄漏的慨念

  1.c/c++是程序员自己治理内存,Java内存是由GC自动回收的。

  我虽然不是很熟悉C++,不过这个应该没有犯常识性错误吧。

  2.什么是内存泄露?

  内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩溃。

  在C/C++中分配了内存不释放的情况就是内存泄露。

  3.Java存在内存泄露

  我们必须先承认这个,才可以接着讨论。虽然Java存在内存泄露,但是基本上不用很关心它,非凡是那些对代码本身就不讲究的就更不要去关心这个了。

  Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。

  4.Java中参数都是传值的。

  对于基本类型,大家基本上没有异议,但是对于引用类型我们也不能有异议。

  Java是如何管理内存

对Java进行初始化应避免的问题

为了说明这个问题先给大家出个问题吧:

  请看代码:
[code]
  view plaincopy to clipboardprint?

  public abstract class A {

  public A() {

  initMethod();

  }

  public abstract void initMethod();

  }

  public abstract class A {

  public A() {

  initMethod();

  }

  public abstract void initMethod();

  }

  view plaincopy to clipboardprint?

  public class B extends A {

  static String staticStr = "static1";

  private String testStr = "Test1";

  /*

  * (non-Javadoc)

  *

  * @see A#initMethod()

  */

  public void initMethod() {

如何改善系统对JVM的使用方式

应用程序服务器是一个 Java 进程,它需要 Java 虚拟机(JVM)才能运行以及支持它所运行的 Java 应用程序。在配置应用程序服务器的过程中,可以对设置进行微调以改善系统对 JVM 的使用方式。

  关于本任务

  JVM 为基于 Java 的应用程序提供了运行时执行环境。WebSphere Application Server 是 JVM 运行时环境与基于 Java 的服务器运行时的组合。它可以在不同 JVM 提供程序提供的 JVM 上运行。要确定正在运行 Application Server 的 JVM 的提供程序,请从 WebSphere Application Server 的app_server_root/java/bin 目录中发出 java -fullversion 命令。您也可以检查其中一个服务器的 SystemOut.log。当应用程序服务器启动时,Websphere Application Server 会将关于 JVM 的信息(包括 JVM 提供程序信息)写入此日志文件。

  从调整 JVM 的观点看,有两种主要的 JVM 类型:

  IBM JVM

  基于 Sun HotSpot 的 JVM,其中包括 Solaris 上的 Sun HotSpot JVM 以及 HP 的 JVM for HP-UX

获取内部类静态成员的方法

最近需要些一个可配置的索引构建程序,需要在运行时调用Lucene包的如下类及其成员:

  引用

  Nested Class Summary

  static class Field.Index

  Specifies whether and how a field should be indexed.

  static class Field.Store

  Specifies whether and how a field should be stored.

  static class Field.TermVector

  Specifies whether and how a field should have term vectors.

  lucene api中称之为Nested Class,意为嵌套类,而嵌套类内部的File.Index的成员又是静态成员。

  引用
[code]
  Field Summary

  static Field.Index ANALYZED

  Index the tokens produced by running the field's value through an Analyzer.

微软与Eclipse成伙伴推进Azure开发

外媒消息,Eclipse欧洲峰会于本周在德国的路德维希堡举行了。微软在此宣布了一系列项目计划。其中一项是协助帮助Eclipse的开发人员开发基于Windows 7 和Windows Server 2008 R2的新功能。另一项是可以让Java和PHP的开发者在Eclipse的开发环境下,开发适用于微软Azure云平台的应用程序。对于Silverlight暨微软的富媒体应用的支持也在这些计划项目之列。

在对Windows 7 和Windows Server的支持方面,微软已经联合了Tasktop技术公司,该公司掌握着Mylyn技术。2010年上半年,该公司将发布基于EPL协议发布Eclipse扩展包。作为该公司太阳神计划的一部分,将提供专为Windows 7任务栏元素扩展而设计的SWT工具箱。

  Soyatec科技公司帮助微软开发针对Silverlight的Eclipse工具。这样Eclipse程序员就可以在熟悉的环境下为Azure开发Web应用程序了,仅仅需要安装一些专为Windows Azure设计的开源插件。目前还只有一个技术社区预览版(CTP),不过估计年底1.0版将会推出;并且已经开始为Java程序员开发一款免费的Windows Azure SDK了。

SAF将消失于Java 7

Sun已经决定在Java 7中放弃JSR 296:Swing Application Framework(SAF)。规范的领导者Alexander Potochkin在其博客中写到: 在多次讨论后,大家并没有就Swing Application Framework API达成共识,我们觉得还需要进一步设计才行。 我们已经将SAF API提交至JDK 7 M5了,进度就在那摆着呢,时间太紧了,所以我们得把SAF从JDK 7的里程碑版中移除。

如何启动Java应用的Shell脚本

对于Java应用程序(非web应用),在部署后,常常需要一个启动脚本来加载一些第三方的jar包,并启动应用。

对于java应用程序,作者一般喜欢将程序的目录结构写成如下的方式:

myapp 


|----lib 


|----bin 


|----packages 

一些配置文件和属性文件

一个startup.sh、或bat启动脚本

其中,packages是程序的根包。其中有子包和class文件等。

在包中,有一个Main.calss的类,这个作为程序的入口。

下面给出一个最一般的写法:

[code]
startup.sh #!/bin/sh programdir="."

num=$#

temp=$CLASSPATH

#setting libs path

libs=../lib/*

append(){

temp=$temp":"$1

}

for file in $libs; do

append $file

done

export CLASSPATH=$temp:.:../:$programdir

最新消息

Google正在进行名为Noop的语言项目,针对JVM。这将是一个看起来很像Java的、运行在JVM上的语言,而目标则是在语言起步的时候就建立起依赖注入(dependency injection)以及可测试性,而无须像其他语言一样依靠第三方库。官网上称Noop的意图在于鼓励良好的编码习惯。

依赖注入之外,Noop关注可测试性、不变性、可阅读性、属性(properties)以及强类型。Noop还注重可执行的、更新及时的文档。Noop官方网站是这么叙述的:“依赖注入改变了我们编写软件的方法。”

Jave入门必读:表单数据存储处理方法

摘 要

本文以Oracle数据库为例,介绍了在采用JSP技术开发WEB应用时一种简便通用的表单数据存储处理方法,以减轻开发工作量,同时提供了主要的程序代码。

引言

J2EE(Java 2 Enterprise Edition)技术已广泛应用在Web应用开发中,其中的JavaBean、Servlet技术为开发者提供了更为清晰的开发环境,使用JSP技术表现页面,使用Servlet技术完成大量的业务处理,使用Bean来存储数据及一些业务处理。在WEB应用中,业务数据存储到数据库中的处理工作经常很繁重,其中一种主要的形式就是表单数据存储到数据库,整个应用处理过程牵涉到大量的这种数据存储操作,对每个表单都要单独编写相应的数据存储程序,花费了开发人员大量的时间和精力。采用什么方法来减轻表单数据存储的开发工作量是值得研究的问题。

两种常见的表单数据存储处理方法

1、对每一表单都编写相应的程序代码

在JSP页面或JavaBean或Servlet中,使用request. getparameter()函数逐一提取表单提交的数据,或编写相应的JavaBean,使用setProperty方法将数据自动取到JavaBean中,然后生成SQL语句(insert,update,delete),最后执行executeupdate()函数完成数据表存储。

公告栏文字滚动效果代码

首先要掌握一个概念:一个字符串在计算机屏幕中所占的像素,比方说取一个JLabel里面的Text所占的宽和高,方法如下: (主要用到FontMetrics类)

  import java.awt.FontMetrics;

  import javax.swing.JLabel;

  JLabel label = new JLabel("test Label ");

  FontMetrics metrics = label.getFontMetrics(label.getFont());

  int textH = metrics.getHeight();   //字符串的高,只和字体有关

  int textW = metrics.stringWidth(label.getText());   //字符串的宽

  通常情况下,一个空格占3个像素。

  具体代码如下:
[code]
  Test.java

  import java.awt.BorderLayout;

  import java.awt.Color;

  import java.awt.Dimension;

  import java.awt.FontMetrics;

同步内容