A. java内存溢出主要有哪些类型
主要有三种类型
第一种OutOfMemoryError: PermGen space
发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与Permanent Generation space有关。解决这类问题有以下两种办法:
1. 增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行:
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"
如果是windows服务器还可以在系统环境变量中设置。感觉用tomcat发布sprint+struts+hibernate架构的程序时很容易发生这种内存溢出错误。使用上述方法,我成功解决了部署ssh项目的tomcat服务器经常宕机的问题。
2. 清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。
第二种OutOfMemoryError: Java heap space
发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关。解决这类问题有两种思路:
1. 检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。
我以前写一个使用K-Means文本聚类算法对几万条文本记录(每条记录的特征向量大约10来个)进行文本聚类时,由于程序细节上有问题,就导致了Java heap space的内存溢出问题,后来通过修改程序得到了解决。
2. 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m
第三种OutOfMemoryError:unable to create new native thread
这种错误在Java线程个数很多的情况下容易发生
B. java中_类可以用来建立多行文本区
javax.swing
类 JTextArea
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.text.JTextComponent
javax.swing.JTextArea
所有已实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable
public class JTextArea
extends JTextComponent
JTextArea 是一个显示纯文本的多行区域。它作为一个轻量级组件,提供与 java.awt.TextArea 类的源兼容性,理应如此。有关使用所有文本组件的信息和示例,请参阅 The Java Tutorial 中 Using Text Components 一节。
此组件具有 java.awt.TextArea 类中没有的功能。有关其他功能,请参考超类。还有 JTextPane 和 JEditorPane 也是具有更多功能的多行文本类。
java.awt.TextArea 在内部处理滚动。JTextArea 的不同之处在于,它不管理滚动,但实现了 swing Scrollable 接口。这允许把它放置在 JScrollPane 的内部(如果需要滚动行为),或者直接使用(如果不需要滚动)。
java.awt.TextArea 具有换行能力。这由水平滚动策略来控制。由于滚动不是由 JTextArea 直接完成的,因此必须通过另一种方式来提供向后兼容性。JTextArea 具有用于换行的绑定 (bound) 属性,该属性控制其是否换行。在默认情况下,换行属性设置为 false(不换行)。
java.awt.TextArea 具有两个属性 rows 和 columns,这两个属性用来确定首选大小。JTextArea 用这些属性来指示 viewport 的首选大小,此 viewport 被放置到 JScrollPane 中以匹配由 java.awt.TextArea 提供的功能。JTextArea 具有显示所有文本所需的首选大小,以便在 JScrollPane 内部正常工作。如果 rows 或 columns 的值等于 0,则沿该轴的首选大小将用于沿相同轴上 viewport 的首选大小。
可以通过添加一个 TextEvent 的 TextListener 来对 java.awt.TextArea 的更改进行监视。在基于 JTextComponent 的组件中,更改通过 DocumentEvent 从模型传播到 DocumentListeners。DocumentEvent 给出了更改的位置和更改种类(如果需要)。代码片段如下所示:
DocumentListener myListener = ??;
JTextArea myArea = ??;
myArea.getDocument().addDocumentListener(myListener);
C. DBSCAN算法的Java实现
DBSCAN是一种基于密度的聚类算法 它的基本原理就是给定两个参数 ξ和minp 其中 ξ可以理解为半径 算法将在这个半径内查找样本 minp是一个以ξ为半径查找到的样本个数n的限制条件 只要n>=minp 查找到的样本点就是核心样本点 算法的具体描述见参考文件 下边是这个算法的java实现
首先定义一个Point类 代表样本点
<! [endif] >
package sunzhenxing;
public class Point {
private int x;
private int y;
private boolean isKey;
private boolean isClassed;
public boolean isKey() {
return isKey;
}
public void setKey(boolean isKey) {
this isKey = isKey;
this isClassed=true;
}
public boolean isClassed() {
return isClassed;
}
public void setClassed(boolean isClassed) {
this isClassed = isClassed;
}
public int getX() {
return x;
}
public void setX(int x) {
this x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this y = y;
}
public Point(){
x= ;
y= ;
}
public Point(int x int y){
this x=x;
this y=y;
}
public Point(String str){
String[] p=str split( );
this x=Integer parseInt(p[ ]);
this y=Integer parseInt(p[ ]);
}
public String print(){
return < +this x+ +this y+ > ;
}
}
然后定义一个工具类 为算法的实现服务
package sunzhenxing;
import java io BufferedReader;
import java io FileReader;
import java io IOException;
import java util *;
public class Utility {
/**
* 测试两个点之间的距离
* @param p 点
* @param q 点
* @return 返回两个点之间的距离
*/
public static double getDistance(Point p Point q){
int dx=p getX() q getX();
int dy=p getY() q getY();
double distance=Math sqrt(dx*dx+dy*dy);
return distance;
}
/**
* 检查给定点是不是核心点
* @param lst 存放点的链表
* @param p 待测试的点
* @param e e半径
* @param minp 密度阈值
* @return 暂时存放访问过的点
*/
public static List<Point> isKeyPoint(List<Point> lst Point p int e int minp){
int count= ;
List<Point> tmpLst=new ArrayList<Point>();
for(Iterator<Point> it=erator();it hasNext();){
Point q=it next();
if(getDistance(p q)<=e){
++count;
if(!ntains(q)){
tmpLst add(q);
}
}
}
if(count>=minp){
p setKey(true);
return tmpLst;
}
return null;
}
public static void setListClassed(List<Point> lst){
for(Iterator<Point> it=erator();it hasNext();){
Point p=it next();
if(!p isClassed()){
p setClassed(true);
}
}
}
/**
* 如果b中含有a中包含的元素 则把两个集合合并
* @param a
* @param b
* @return a
*/
public static boolean mergeList(List<Point> a List<Point> b){
boolean merge=false;
for(int index= ;index<b size();++index){
if(ntains(b get(index))){
merge=true;
break;
}
}
if(merge){
for(int index= ;index<b size();++index){
if(!ntains(b get(index))){
a add(b get(index));
}
}
}
return merge;
}
/**
* 返回文本中的点集合
* @return 返回文本中点的集合
* @throws IOException
*/
public static List<Point> getPointsList() throws IOException{
List<Point> lst=new ArrayList<Point>();
String txtPath= src\\sunzhenxing\points txt ;
BufferedReader br=new BufferedReader(new FileReader(txtPath));
String str= ;
while((str=br readLine())!=null && str!= ){
lst add(new Point(str));
}
br close();
return lst;
}
}
最后在主程序中实现算法 如下所示
package sunzhenxing;
import java io *;
import java util *;
public class Dbscan {
private static List<Point> pointsList=new ArrayList<Point>();//存储所有点的集合
private static List<List<Point>> resultList=new ArrayList<List<Point>>();//存储DBSCAN算法返回的结果集
private static int e= ;//e半径
private static int minp= ;//密度阈值
/**
* 提取文本中的的所有点并存储在pointsList中
* @throws IOException
*/
private static void display(){
int index= ;
for(Iterator<List<Point>> it=erator();it hasNext();){
List<Point> lst=it next();
if(lst isEmpty()){
continue;
}
System out println( 第 +index+ 个聚类 );
for(Iterator<Point> it =erator();it hasNext();){
Point p=it next();
System out println(p print());
}
index++;
}
}
//找出所有可以直达的聚类
private static void applyDbscan(){
try {
pointsList=Utility getPointsList();
for(Iterator<Point> it=erator();it hasNext();){
Point p=it next();
if(!p isClassed()){
List<Point> tmpLst=new ArrayList<Point>();
if((tmpLst=Utility isKeyPoint(pointsList p e minp)) != null){
//为所有聚类完毕的点做标示
Utility setListClassed(tmpLst);
resultList add(tmpLst);
}
}
}
} catch (IOException e) {
// TODO Auto generated catch block
e printStackTrace();
}
}
//对所有可以直达的聚类进行合并 即找出间接可达的点并进行合并
private static List<List<Point>> getResult(){
applyDbscan();//找到所有直达的聚类
int length=resultList size();
for(int i= ;i<length;++i){
for(int j=i+ ;j<length;++j){
if(rgeList(resultList get(i) resultList get(j))){
resultList get(j) clear();
}
}
}
return resultList;
}
/**
* 程序主函数
* @param args
*/
public static void main(String[] args) {
getResult();
display();
//System out println(Utility getDistance(new Point( ) new Point( )));
}
}
下边是一个小测试 即使用src\\sunzhenxing\points txt文件的内容进行测试 points txt的文件内容是
最后算法的结果是
第 个聚类
< >
< >
< >
< >
< >
< >
< >
< >
< >
< >
< >
第 个聚类
< >
< >
< >
< >
< >
< >
< >
lishixin/Article/program/Java/hx/201311/26957
D. 有谁能介绍一下Fudannlp
FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。本工具包及其包含数据集使用LGPL3.0许可证。开发语言为Java。主要功能有:1. 文本分类 新闻聚类;2. 中文分词 词性标注 实体名识别 关键词抽取 依存句法分析 时间短语识别;3. 结构化学习 在线学习 层次分类 聚类 精确推理。希望能帮到你,谢谢!
E. java中的文本分析
BufferedReader br = new BufferedReader(new FileReader(要找的文件路径));
StringBuffer sb = br.readLine();
Pattern pattern = pattern.compile("(//d{3})(//d{3})(//d{1})(//d{10})");
Matcher m = pattern.matcher(sb);
while(m.find()) {
System.out.println(m.group());
}
可能不是您要的解决方法。不过大多数查找数据都是这个思路。
F. k-means聚类算法的java代码实现文本聚类
K-MEANS算法:
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
具体如下:
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n], 分别与c[0]…c[n-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]=/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。
算法实现起来应该很容易,就不帮你编写代码了。
G. 利用CURE算法进行文本聚类的java实现代码
为什么不用kmeans呢。
by 矩网智慧
H. java对lucene查询结果进行聚类~~
hadoop 你自己写聚类的算法
I. java 读文本文件的常用类和方法有哪些
File类是直接继承Object类的。Object类的方法我就不不写了:
字段摘要
static String pathSeparator
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar
与系统有关的路径分隔符。
static String separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar
与系统有关的默认名称分隔符。
构造方法摘要
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
方法摘要
boolean canExecute()
测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件。
int compareTo(File pathname)
按字母顺序比较两个抽象路径名。
boolean createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
static File createTempFile(String prefix, String suffix)
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static File createTempFile(String prefix, String suffix, File directory)
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean delete()
删除此抽象路径名表示的文件或目录。
void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean equals(Object obj)
测试此抽象路径名与给定对象是否相等。
boolean exists()
测试此抽象路径名表示的文件或目录是否存在。
File getAbsoluteFile()
返回此抽象路径名的绝对路径名形式。
String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile()
返回此抽象路径名的规范形式。
String getCanonicalPath()
返回此抽象路径名的规范路径名字符串。
long getFreeSpace()
返回此抽象路径名指定的分区中未分配的字节数。
String getName()
返回由此抽象路径名表示的文件或目录的名称。
String getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
File getParentFile()
返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
String getPath()
将此抽象路径名转换为一个路径名字符串。
long getTotalSpace()
返回此抽象路径名指定的分区大小。
long getUsableSpace()
返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
int hashCode()
计算此抽象路径名的哈希码。
boolean isAbsolute()
测试此抽象路径名是否为绝对路径名。
boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。
boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。
long lastModified()
返回此抽象路径名表示的文件最后一次被修改的时间。
long length()
返回由此抽象路径名表示的文件的长度。
String[] list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots()
列出可用的文件系统根。
boolean mkdir()
创建此抽象路径名指定的目录。
boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
boolean renameTo(File dest)
重新命名此抽象路径名表示的文件。
boolean setExecutable(boolean executable)
设置此抽象路径名所有者执行权限的一个便捷方法。
boolean setExecutable(boolean executable, boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的执行权限。
boolean setLastModified(long time)
设置此抽象路径名指定的文件或目录的最后一次修改时间。
boolean setReadable(boolean readable)
设置此抽象路径名所有者读权限的一个便捷方法。
boolean setReadable(boolean readable, boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的读权限。
boolean setReadOnly()
标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
boolean setWritable(boolean writable)
设置此抽象路径名所有者写权限的一个便捷方法。
boolean setWritable(boolean writable, boolean ownerOnly)
设置此抽象路径名的所有者或所有用户的写权限。
String toString()
返回此抽象路径名的路径名字符串。
URI toURI()
构造一个表示此抽象路径名的 file: URI。
URL toURL()
已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。
J. java outofmemory
java outofmemory是什么,让我们一起了解一下?
out of memory(内存溢出)是一个程序员常见的错误类型,通常是开启应用程序过多所导致。一般是由于电脑内存不足,配置过低,电脑开启的应用程序过多,导致内存不足或者游戏客户端的问题。
Java中OutOfMemoryError(内存溢出)出现的情况和解决办法是什么?
第一种OutOfMemoryError: PermGenspace。
发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与PermanentGeneration space有关。解决这类问题有以下两种办法:
1、增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行:
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m" 。
如果是windows服务器还可以在系统环境变量中设置。感觉用tomcat发布sprint+struts+hibernate架构的程序时很容易发生这种内存溢出错误。
2、清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。这种方法是网上部分人推荐的,我没试过,但感觉减少不了太大的空间,最靠谱的还是第一种方法。
第二种OutOfMemoryError: Java heap space 。
发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heapspace有关。解决这类问题有两种思路:
1、检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。
写一个使用K-Means文本聚类算法对几万条文本记录(每条记录的特征向量大约10来个)进行文本聚类时,由于程序细节上有问题,就导致了Javaheap space的内存溢出问题,后来通过修改程序得到了解决。
2、增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m-Xmx1024m。
实战操作,本机内存溢出代码如下: package DirectMemory; import sun.misc.Unsafe; import java.lang.reflect.Field; /** * VM Args: -Xmx20M -XX:MaxDirectMemorySize=10M * DirectByteBuffer分配内存也会抛出内存溢出异常,但它抛出异常时没有真正向系统申请分配内存,而是通过计算得知内存 * 无法分配,于是手动抛出异常。有点类似操作系统的银行家算法(避免死锁) */ public class DirectMemoryOOM { private static final int _1MB = 1024*1024; public static void main(String[] args) throws IllegalAccessException { Field unsafeField = Unsafe.class.getDeclaredFields()[0]; //获取类中第一个变量 unsafeField.setAccessible(true); //设置是否可反射访问private变量 Unsafe unsafe = (Unsafe) unsafeField.get(null); //获取静态对象 while (true){ unsafe.allocateMemory(_1MB); //申请分配内存 } } }