Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 5FF33200B7D for ; Sat, 27 Aug 2016 01:27:24 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 5E88A160AC3; Fri, 26 Aug 2016 23:27:24 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id A632C160AB6 for ; Sat, 27 Aug 2016 01:27:23 +0200 (CEST) Received: (qmail 20155 invoked by uid 500); 26 Aug 2016 23:27:22 -0000 Mailing-List: contact dev-help@apex.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@apex.apache.org Delivered-To: mailing list dev@apex.apache.org Received: (qmail 20144 invoked by uid 99); 26 Aug 2016 23:27:22 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2016 23:27:22 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 55D04C20E3 for ; Fri, 26 Aug 2016 23:27:22 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -3.739 X-Spam-Level: X-Spam-Status: No, score=-3.739 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.519] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id CK3DprXO0ryS for ; Fri, 26 Aug 2016 23:27:21 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id 61F305F5A4 for ; Fri, 26 Aug 2016 23:27:21 +0000 (UTC) Received: (qmail 19352 invoked by uid 99); 26 Aug 2016 23:27:20 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2016 23:27:20 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id B84F82C0156 for ; Fri, 26 Aug 2016 23:27:20 +0000 (UTC) Date: Fri, 26 Aug 2016 23:27:20 +0000 (UTC) From: "bright chen (JIRA)" To: dev@apex.incubator.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (APEXMALHAR-2190) Use reusable buffer to serial spillable data structure MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Fri, 26 Aug 2016 23:27:24 -0000 [ https://issues.apache.org/jira/browse/APEXMALHAR-2190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15440182#comment-15440182 ] bright chen commented on APEXMALHAR-2190: ----------------------------------------- Confirmed with David, he will SpillableMap to store the window > Use reusable buffer to serial spillable data structure > ------------------------------------------------------ > > Key: APEXMALHAR-2190 > URL: https://issues.apache.org/jira/browse/APEXMALHAR-2190 > Project: Apache Apex Malhar > Issue Type: Task > Reporter: bright chen > Assignee: bright chen > Original Estimate: 240h > Remaining Estimate: 240h > > Spillable Data Structure created lots of temporary memory to serial data lot of of memory copy( see SliceUtils.concatenate(byte[], byte[]). Which used up memory very quickly. See APEXMALHAR-2182. > Use a shared memory to avoid allocate temporary memory and memory copy > some basic ideas > - SerToLVBuffer interface provides a method serTo(T object, LengthValueBuffer buffer): instead of create a memory and then return the serialized data, this method let the caller pass in the buffer. So different objects or object with embed objects can share the same LengthValueBuffer > - LengthValueBuffer: It is a buffer which manage the memory as length and value(which is the generic format of serialized data). which provide length placeholder mechanism to avoid temporary memory and data copy when the length can be know after data serialized > - memory management classes: includes interface ByteStream and it's implementations: Block, FixedBlock, BlocksStream. Which provides a mechanism to dynamic allocate and manage memory. Which basically provides following function. I tried other some other stream mechamism such as ByteArrayInputStream, but it can meet 3rd criteria, and don't have good performance(50% loss) > - dynamic allocate memory > - reset memory for reuse > - BlocksStream make sure the output slices will not be changed when need extra memory; Block can change the reference of output slices buffer is data was moved due to reallocate of memory(BlocksStream is better solution). -- This message was sent by Atlassian JIRA (v6.3.4#6332)