[ 
https://issues.apache.org/jira/browse/JENA-985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14624550#comment-14624550
 ] 

Eugene Tenkaev commented on JENA-985:
-------------------------------------

Hello!
I create persistent storage with next code:
{code:java}
    /**
     * Creates dataset from source "*.nt" files.
     *
     * @param sourceFilePath source file path.
     * @param jenaModelPath  directory where jena model will be created.
     * @return true if all good.
     */
    private boolean createDataset(Path sourceFilePath, Path jenaModelPath) {
        try {
            logger.info("Creating new dataset: " + jenaModelPath);

            Location location = Location.create(jenaModelPath.toString());
            DatasetGraphTDB datasetGraphTDB = TDBMaker.createDatasetGraphTDB(
                location, StoreParams.getDftStoreParams()
            );
            String fileUri = sourceFilePath.toUri().toString();
            TDBLoader.load(datasetGraphTDB, fileUri, true);
            datasetGraphTDB.close();
            TDBMaker.releaseLocation(location);

            logger.info("Creating of new dataset completed.");
        } catch (Exception e) {
            logger.fatal(e);
            return false;
        }

        return true;
    }
{code}

Then I load this dataset by next code:
{code:java}
DatasetGraph datasetGraph = TDBFactory.createDatasetGraph(modelPath.toString());
Graph graph = datasetGraph.getDefaultGraph();
{code}

And I double check... my code doesn't store {code}Triple{code} or 
{code}Node{code}

So my iterate through all abstracts, looks like this:
{code:java}
     private voidprintAllAbstracts() {
        ExtendedIterator<Triple> iter = graph.find(
            Node.ANY, NodeFactory.createURI("dbpedia-owl:abstract"), Node.ANY
            );

        while (iter.hasNext()) {
            Triple triple = iter.next();
            Node subjectNode = triple.getSubject();
            Node objectNode = triple.getObject();

            if (objectNode.isLiteral()) {
                String abstractStr = objectNode.getLiteralLexicalForm();

                if (!abstractStr.isEmpty()) {
                    System.out.println(subjectNode.getURI() + " - " + 
abstractStr);
                }
            }
        }
    }
{code}

> Iterate using Apache Jena ExtendedIterator on Graph with big amount of triples
> ------------------------------------------------------------------------------
>
>                 Key: JENA-985
>                 URL: https://issues.apache.org/jira/browse/JENA-985
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: Jena 2.13.0
>         Environment: *Hardware*
> Windows 7 64-bit
> Intel Core i7 4785T @ 2.20GHz
> RAM 16,0GB DDR3
> 465GB Samsung SSD 850 EVO 500G SCSI Disk Device (SSD)
> *Software environment*
> java version "1.7.0_75"
> Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)
> *Running options*
> VM options: -Xmx14g
>            Reporter: Eugene Tenkaev
>            Priority: Minor
>
> I'm generating Apache Jena Graph from DBpedia dumps and now I want iterate 
> through all "dbpedia-owl:abstract".
> So I do something like this:
> {code:java}
>     ExtendedIterator<Triple> iterator = Graph.find(Node.ANY, 
> NodeFactory.createURI("dbpedia-owl:abstract"), Node.ANY);
> {code}
> But then I try to iterate, memory consumption is increased, so looks like 
> "ExtendedIterator" store found nodes.
> I use VisualVM profiler and found that while I iterate, count of 
> "com.hp.hpl.jena.graph.Node_URI" is increasing.
> I try to do "iterator.reset()" but this takes no effect.
> Is this bug or feature?:D
> Can I iterate through all DBpedia abstracts without storing nodes and without 
> increasing consumption of memory that gc can't freed?
> Sorry for my bad english.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to