首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >堆过载JVM

堆过载JVM
EN

Stack Overflow用户
提问于 2015-04-16 04:35:29
回答 1查看 445关注 0票数 0

编辑*:就目前而言,我有一个程序以某种方式陷入了无限循环,但我不确定是什么导致了它。我的程序从文本文件中读取数据,本质上是“锯断”每一行的第一部分数据,直到第一个出现',‘字符,然后读取每个后续字符串(在一般情况下以’‘结尾),直到下一个',’(特殊情况,表示后面的数据也是垃圾数据)。从那里,它跳到下一行并重复。几周前,我的程序还运行得很好,但我对它进行了修补,现在它正式崩溃了。下面的编辑是我遇到的一些其他错误(我可能仍然需要解决),但目前,我正在被这个循环杀死。诚然,我很擅长使用嵌套的for循环,使用时髦的迭代器和更新,但这一点我就是不能破解。以下是代码,并有一些解释。这个完整的代码片段被抛到某个任意类的构造函数中,它接受一个字符串"synsets“,并且在我的main中创建了一个实例。剩下的我已经评论得尽可能好了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    In in = new In(synsets); // Custom input stream class, courtesy 
    // of Princeton U
    Out fout = new Out("log.txt"); // ostream analogue

    int linecount=0; // Marker used to keep track of line # in input file
    int nouncount=0; // Marker for keeping track of the number of 
    // "important" data items

    // Data comes in the format: 
    // "junk,important important important,junk
    // junk,important,junk
    // junk,important important,junk" etc.

    {
        int i=0;
        for ( String str=in.readLine();str!=null;str=in.readLine() )
        {
            i=0; // reset iterator for a new line
            for ( char next=str.charAt(i); next!=',';next=str.charAt(i) )
                i++; // This FOR loop cuts out the junk at the start of 
                     // a line
            i++; // increment to after first comma
            for ( char next=str.charAt(i);next!=',';next=str.charAt(i))
            {
                for (; next!=',' && next!=' ' ;next=str.charAt(i))
                {
                    i++;
                    fout.print(next);
                    // count the "nouns" (important data) on a line
                }
                nouncount++; 
                // count the last noun on line, and subsequently fall 
                // through loops to skip the rest of the junk at the 
                // current line
                fout.print('\n');
            }

        }
        fout.print(nouncount);
        in.close();

我的输出文件是好的,直到输入的第18行,在这一点上,它只是开始打印新的行字符(就像它被附加它们的循环所捕获,但不能进入下一个循环)。下面是有问题的输入行。它读取24K黄金很好,但由于某种原因无法写入pure_gold。有什么想法吗?谢谢大家!

“17,24克拉黄金pure_gold,100 %黄金

18, 24 /7,正常运行时间是一周7天,每天24小时“

编辑*:我正在编写一个程序,以便从文本文件中读取一些数据,并且得到一个新的(对我来说)错误消息,我已经用完了堆空间。我试着修补这个bug,但只成功地摆脱了错误消息。我正在读取的文本文件大约有90K行,但我的程序在第18行抛出了消息。我的修补工作确实揭示了一些事情,特别是,我的程序至少能够对整个文件进行一些处理,并且这个问题可能涉及到一些数据损坏。我推断这是因为我使用了一个数组索引"j“,它触发了一个IndexOutOfBoundsException。问题是,j在每次递增时仅按1缩放,并且不知何故,它超出了超过数组界限150,000的界限。因此,我假设"j“以某种方式被数据填充(可能是因为堆栈正在重写到堆中?)它与"j“或所讨论的数组无关。下面是我最初的帖子,尽管我承认我很累,所以它可能没有太大的意义。谢谢大家!:)

编辑**:我检查了nouncount,它是399850,所以我没有遇到数据损坏,正如我所怀疑的那样。我的一个循环就是无限地执行ad。我会试着找出是哪一个,如果我能纠正这个问题,我会发回来的。我至少会回来整理一下这篇文章,以供将来有需要的人参考。

我正在写一个读入文本文件的程序,它必须进行一些计数(文件中的数据以一种非常语法的方式进行划分),但是我的代码不能走得很远。虽然这个文件非常大(大约90K行),但我的代码在堆溢出之前只读完了17行。

在一些背景下," in“类只是一个专门的输入流,而真正杀死我的不是第一个FOR循环,它是我计算行数的地方(代码很好地执行这一部分,分别读取每一行,每一次)。相反,这是第二部分,但我不明白,因为我没有使用任何额外的堆空间(我想?)在那部分。我以前将这些块放在一起,逐行执行主要功能,但同样,程序会停在第17行。我尝试在Dr Java中分配高达1 GB的堆空间,但没有效果。在下半部分中有没有我可以留出额外堆空间的部分?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        In in = new In(synsets);

    StringBuilder nounData = new StringBuilder();
    int linecount=0;
    int nouncount=0;

    {
        String str;
        int i=0;
        char next='\0';
        for ( str=in.readLine();str!=null;str=in.readLine() )
        {
            linecount++;
        }
        in.close();

        in = new In(synsets);
        for ( str=in.readLine();str!=null;str=in.readLine() )
        {
            i=0;
// The first portion of each line is "trash" until the first comma
            for ( next=str.charAt(i) ; next!=',' ; next=str.charAt(++i) ){}
            i++;

// This actually reads/processes the data until the next comma, then
// jumps to the next line. "What" i need done is really secondary, I 
// just need to figure out what is eating so much space so I can 
// trim it
            for ( next=str.charAt(i);next!=',';next=str.charAt(i))
                for (;next!=','&&next!=' ';next=str.charAt(++i))
                nouncount++;
        }
    }

下面是更新后的代码,其中我尝试重新创建来自Java博士的Heap消息。虽然我不能这样做,但我得到了一个有趣的错误消息(当然是在第18行),关于数组越界。但是仍然被难住了,因为我看不出问题中的变量在命中时怎么会超过17。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In in = new In(synsets);

    StringBuilder nounData = new StringBuilder();
    int linecount=0;
    int nouncount=0;

    {
        int i=0;
        for ( String str=in.readLine();str!=null;str=in.readLine() )
        {
            i=0;
            for ( char next=str.charAt(i);next!=',';next=str.charAt(i))
                for (;next!=','&&next!=' ';next=str.charAt(++i))
                nouncount++;
        }
        in.close();
        in=new In(synsets);

        String[] nouns = new String[nouncount];
        int j=0;
        for ( String str=in.readLine();str!=null;str=in.readLine() )
        {
            linecount++;
            i=0;
            for ( char next=str.charAt(i) ; next!=',' ; next=str.charAt(++i) ){}
            i++;
            for ( char next=str.charAt(i);next!=',';next=str.charAt(i))
            {
                for (;next!=','&&next!=' ';next=str.charAt(++i))
                    nounData.append(next);
                nouns[j++]=nounData.toString();
                nounData.delete(0,nounData.capacity()-1);
            }
            System.out.println("Current line count is: " + linecount);
        }
    }
    in.close();
    System.out.println("line count = "+linecount);
    System.out.println("noun count = "+nouncount);
    String[] nouns = new String[nouncount];

下面是错误消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Current line count is: 1
Current line count is: 2
Current line count is: 3
Current line count is: 4
Current line count is: 5
Current line count is: 6
Current line count is: 7
Current line count is: 8
Current line count is: 9
Current line count is: 10
Current line count is: 11
Current line count is: 12
Current line count is: 13
Current line count is: 14
Current line count is: 15
Current line count is: 16
Current line count is: 17
java.lang.ArrayIndexOutOfBoundsException: 399850
    at WordNet.<init>(WordNet.java:39)
    at WordNet.main(WordNet.java:212)

根据记录,我的代码中的"39“行是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nouns[j++]=nounData.toString();

文件中的字符数一直到第18行是917,在第19行是966,所以我不认为我把该行放错地方了。

编辑:此外,我做了一个测试,文件中只有大约147K的“名词”,所以我猜测"j“不知何故被破坏了,因为它必须从0到147K之间的某个东西”跳“到399K+。不幸的是,我已经过了睡觉时间了,所以今晚我不能继续更新了,但请随意发布任何想法,明天早上我会通过电子邮件检查:)谢谢大家!

EN

回答 1

Stack Overflow用户

发布于 2015-04-16 04:47:52

更改所有for测试条件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
next!=','

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
next != ',' && i < str.length()

除了你的最后一个,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (;next!=','&&next!=' ';next=str.charAt(++i))

这应该是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (;next!=','&&next!=' '&&i+1<str.length();next=str.charAt(++i))

接下来,我将尝试使用String.split(String regex)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String[] words = str.split(",\\s+);

你可以用words.length来计算单词数。要获取行计数,请在调用readLine()时递增计数器,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
in = new In(synsets);
// for ( str=in.readLine();str!=null;str=in.readLine() )
while ((str = in.readLine()) != null) {
    linecount++;
    String[] words = str.split(",\\s+);
    nouncount += words.length;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29665401

复制
相关文章
NLTK之朴素贝叶斯分类器
本文介绍了NLTK中的朴素贝叶斯分类器,并说明了其在分词任务中的使用。首先,作者指出了使用朴素贝叶斯分类器进行分词任务中的问题,并给出了一个例子。最后,作者说明了如何使用词频来表示字典元素,并实验了不同的参数对结果的影响。
用户1148830
2018/01/03
6890
NLTK-007:分类文本(文档情感分类)
之前我们看了几个例子,那里文档已经按类别标记。使用这些语料库,我们可以建立分类器。自动给新文档添加适当的类别标签。 首先我们构造一个标记了相应类别的文档清单,对于这个例子,我选择了nltk中的电影评论语料库,将每个评论分为正面或者负面。
李玺
2021/11/22
4000
NLTK-007:分类文本(文档情感分类)
NLTK-005:分类和标注词汇
之前大家也肯定学过名字、动词、形容词、副词之间的差异,这些词类不是闲置的,而是对许多语言处理任务都有用的分类,正如我们将看到的,这些分类源于对文本中词的分布的简单的分析。
李玺
2021/11/22
6130
NLTK-005:分类和标注词汇
NLTK-006:分类文本(性别鉴定)
分类是为给定的输入选择正确的类标签的任务,在基本的分类任务中,每个输入被认为是与所有其它输入隔离的,并且标签集是预先定义的。下面是分类任务的一些例子:
李玺
2021/11/22
5620
NLTK-006:分类文本(性别鉴定)
NLTK-008:分类文本(有监督分类的更多例子)
句子分割可以看作是一个标点符号的分类任务:每当我们遇到一个可能会结束的句子的符号,我们必须决定他是否终止了当前句子。
李玺
2021/11/22
5650
解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.
应用朴素贝叶斯分类器时候,发现报错无法解析名称 NaiveBayes.fit 这是因为 你想用NaiveBayes。适用于MATLAB R2018b。 根据NaiveBayes的R2014b发布说明,fit被fitNaiveBayes取代: 同时根据R2018a发布说明fitNaiveBayes被fitcnb取代。 因此,使用fitcnb即可。 将NaiveBayes.fit 改为 fitcnb 就好啦!!! 参考链接: 链接: 点击这里.
全栈程序员站长
2022/11/15
5310
【NLP】Python NLTK获取文本语料和词汇资源
NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公开数据集、模型上提供了全面、易用的接口,涵盖了分词、词性标注(Part-Of-Speech tag, POS-tag)、命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。本文主要介绍NLTK(Natural language Toolkit)的几种语料库,以及内置模块下函数的基本操作,诸如双连词、停用词、词频统计、构造自己的语料库等等,这些都是非常实用的。
机器学习AI算法工程
2019/10/28
2.1K0
【NLP】Python NLTK获取文本语料和词汇资源
垃圾邮件检测.第1部分
作者 | Md Sohel Mahmood 编译 | VK 来源 | Towards Data Science
磐创AI
2021/11/10
1.1K0
C# 中的“智能枚举”:如何在枚举中增加行为
在这个示例中,我们定义了一个名为 Weekday 的枚举,其中包括每个星期的日子。然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。
郑子铭
2023/08/30
3190
C# 中的“智能枚举”:如何在枚举中增加行为
详解如何在Laravel中增加自定义全局函数
http://www.php.cn/php-weizijiaocheng-383928.html
全栈程序员站长
2021/10/27
2.9K0
使用 FastAI 和即时频率变换进行音频分类
目前深度学习模型能处理许多不同类型的问题,对于一些教程或框架用图像分类举例是一种流行的做法,常常作为类似“hello, world” 那样的引例。FastAI 是一个构建在 PyTorch 之上的高级库,用这个库进行图像分类非常容易,其中有一个仅用四行代码就可训练精准模型的例子。随着v1版的发布,该版本中带有一个data_block的API,它允许用户灵活地简化数据加载过程。今年夏天我参加了Kaggle举办的Freesound General-Purpose Audio Tagging 竞赛,后来我决定调整其中一些代码,利用fastai的便利做音频分类。本文将简要介绍如何用Python处理音频文件,然后给出创建频谱图像(spectrogram images)的一些背景知识,示范一下如何在事先不生成图像的情况下使用预训练图像模型。
AI研习社
2019/05/15
1.8K0
NLTK FreqDist
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
2970
NLTK FreqDist
使用python+机器学习方法进行情感分析(详细步骤)
不是有词典匹配的方法了吗?怎么还搞多个机器学习方法。 因为词典方法和机器学习方法各有千秋。 机器学习的方法精确度更高,因为词典匹配会由于语义表达的丰富性而出现很大误差,而机器学习方法不会。而且它可使用的场景更多样。无论是主客观分类还是正负面情感分类,机器学习都可以完成任务。而无需像词典匹配那样要深入到词语、句子、语法这些层面。 而词典方法适用的语料范围更广,无论是手机、电脑这些商品,还是书评、影评这些语料,都可以适用。但机器学习则极度依赖语料,把手机语料训练出来的的分类器拿去给书评分类,那是注定要失败的。
机器学习AI算法工程
2018/03/14
6K0
使用python+机器学习方法进行情感分析(详细步骤)
如何在 Discourse 中批量移动主题到不同的分类中
例如,我们需要将下面的主题批量从当前的分类中移动到另外一个叫做 数据库 的分类中。
HoneyMoose
2021/07/23
1.2K0
如何在 Discourse 中批量移动主题到不同的分类中
如何在GitLab中的个人资料里增加SSH密钥
2、提示‘输入保存密钥的文件(//.ssh/id_rsa):’,按回车 3、提示输入密码显示“输入密码(空密码)”。 输入密码后按回车 4、提示再次输入密码,输入密码后按回车。 5、SSH密钥已生成
超级小可爱
2023/02/23
1.4K0
Discourse 如何在首页中显示 Box 的子分类
如果你不选择上门的选项的话,下面的列表是不会显示的,你可以通过这个自行确定如何显示子项目。
HoneyMoose
2020/05/30
2.1K0
Discourse 如何在首页中显示 Box 的子分类
机器学习中如何选择分类器
在机器学习中,分类器作用是在标记好类别的训练数据基础上判断一个新的观察样本所属的类别。分类器依据学习的方式可以分为非监督学习和监督学习。 非监督学习顾名思义指的是给予分类器学习的样本但没有相对应类别标签,主要是寻找未标记数据中的隐藏结构。 监督学习通过标记的训练数据推断出分类函数,分类函数可以用来将新样本映射到对应的标签。在监督学习方式中,每个训练样本包括训练样本的特征和相对应的标签。监督学习的流程包括确定训练样本的类型、收集训练样本集、确定学习函数的输入特征表示、确定学习函数的结构和对应的学习算法、完成整
企鹅号小编
2018/01/10
2.3K0
如何在BI中增加“路线地图”并进行数据分析?
随着客户的需求越来越“百变”,最近在做大屏设计的葡萄陷入了困境。 近期客户提出的需求是想在BI工具中增加 “路线地图”展示功能并进行数据分析。 不仅如此,这个“路线地图”还要兼具实用的功能与美观的动效,典型的“既要又要”系列。但是这对于我们的设计师葡萄来说,难度就有些大了。 静态图片展示不困难,可要让这地图动起来,确实有一些难度。 所以我们就将该问题拆成两部分,来解决这个问题。首先,我们需要一个路线地图工具。
葡萄城控件
2022/09/21
1.4K0
如何在BI中增加“路线地图”并进行数据分析?
python中的gensim入门
在自然语言处理(NLP)和信息检索领域中,文本向量化是一个重要的任务。文本向量化可以将文本数据转换为数值向量,以便于计算机进行处理和分析。Gensim是一个强大的Python库,专门用于处理文本数据和实现文本向量化。 本篇文章将带你入门使用Gensim库,介绍如何在Python中对文本进行向量化,并用其实现一些基本的文本相关任务。
大盘鸡拌面
2023/10/25
6070
点击加载更多

相似问题

带有EventMachine服务的任务

20

EventMachine Rails的多类实例

13

带有eventmachine的mongoid和mongomapper

23

如何使用带有实例索引的模块实例?

10

模块中的实例变量?

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文