{"id":6344,"date":"2026-09-12T04:20:56","date_gmt":"2026-09-12T04:20:56","guid":{"rendered":"https:\/\/enigmametaverse.com\/?p=6344"},"modified":"2026-09-09T06:21:32","modified_gmt":"2026-09-09T06:21:32","slug":"pega-clipboard-memory-leaks","status":"publish","type":"post","link":"https:\/\/enigmametaverse.com\/it\/pega-clipboard-memory-leaks\/","title":{"rendered":"Pega Clipboard Memory Leaks: How Innocent Page Lists Can Become Production Performance Problems"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>Performance problems in Pega applications do not always come from slow database queries or poor integrations. Sometimes, the problem is much closer to the runtime.<\/p>\n\n\n\n<p>One common cause is <strong>excessive data stored on the Clipboard<\/strong>.<\/p>\n\n\n\n<p>The Pega Clipboard acts as runtime working memory during case processing. It can hold case data, embedded pages, Page Lists, Page Groups, Data Page content, integration responses, parameters, and temporary data.<\/p>\n\n\n\n<p>The Clipboard itself does not cause performance problems. Instead, issues can occur when an application stores too much data for too long.<\/p>\n\n\n\n<p>A Page List is a good example.<\/p>\n\n\n\n<p>A Page List with a few records is usually fine. However, storing thousands or millions of complex pages can quickly increase memory use. As a result, processing can slow down and garbage collection can increase.<\/p>\n\n\n\n<p>In severe cases, excessive Clipboard growth can affect requestor or JVM stability.<\/p>\n\n\n\n<p>This article explains how Page Lists can create production performance problems. It also covers common causes, troubleshooting steps, and practical design rules for high-volume Pega applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Understanding the Pega Clipboard<\/h2>\n\n\n\n<p>The Pega Clipboard works as the <strong>runtime working memory<\/strong> for application processing.<\/p>\n\n\n\n<p>A typical case can contain structures such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Case\n\u2502\n\u251c\u2500\u2500 Customer Information\n\u251c\u2500\u2500 Address\n\u251c\u2500\u2500 Contact Details\n\u251c\u2500\u2500 Documents()\n\u251c\u2500\u2500 RelatedItems()\n\u2514\u2500\u2500 ProcessingData\n<\/code><\/pre>\n\n\n\n<p>The Clipboard can also contain temporary pages and data retrieved during processing.<\/p>\n\n\n\n<p>For example, an integration may return customer information. The application may then copy that information into a temporary structure for validation.<\/p>\n\n\n\n<p>These objects use runtime memory while the requestor retains them.<\/p>\n\n\n\n<p>Therefore, developers should consider two key factors:<\/p>\n\n\n\n<p><strong>Data size \u00d7 Data lifetime<\/strong><\/p>\n\n\n\n<p>A small object that exists for a short time usually has little impact.<\/p>\n\n\n\n<p>In contrast, a large object that remains in memory during a long-running operation can become expensive.<\/p>\n\n\n\n<p>This difference becomes especially important in high-volume processing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Why Page Lists Can Become a Performance Problem<\/h2>\n\n\n\n<p>Page Lists are useful for storing collections of related objects.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Customer\n   |\n   \u2514\u2500\u2500 Addresses()\n        \u251c\u2500\u2500 Address 1\n        \u251c\u2500\u2500 Address 2\n        \u2514\u2500\u2500 Address 3\n<\/code><\/pre>\n\n\n\n<p>This design is normal.<\/p>\n\n\n\n<p>However, problems can arise when a Page List becomes a container for an entire dataset.<\/p>\n\n\n\n<p>Consider a file-processing application with 500,000 records:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Input File\n    \u2193\nRead Records\n    \u2193\nCreate Page List\n    \u2193\nStore 500,000 Records\n    \u2193\nProcess Records\n<\/code><\/pre>\n\n\n\n<p>The design may work well with a small test file. However, production data can create a much larger runtime structure.<\/p>\n\n\n\n<p>The situation becomes more serious when every Page List item contains:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Many properties<\/li>\n\n\n\n<li>Embedded Pages<\/li>\n\n\n\n<li>Nested Page Lists<\/li>\n\n\n\n<li>API response data<\/li>\n\n\n\n<li>Document metadata<\/li>\n\n\n\n<li>Large strings<\/li>\n\n\n\n<li>Duplicate information<\/li>\n<\/ul>\n\n\n\n<p>Therefore, record count alone does not determine memory use.<\/p>\n\n\n\n<p>The <strong>complexity of each page<\/strong> also matters.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. The Hidden Impact of Nested Structures<\/h2>\n\n\n\n<p>Nested collections can make a Page List much more expensive.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Customers()\n\u2502\n\u251c\u2500\u2500 Customer 1\n\u2502     \u2514\u2500\u2500 Orders()\n\u2502          \u251c\u2500\u2500 Order 1\n\u2502          \u251c\u2500\u2500 Order 2\n\u2502          \u2514\u2500\u2500 Order 3\n\u2502\n\u251c\u2500\u2500 Customer 2\n\u2502     \u2514\u2500\u2500 Orders()\n\u2502          \u251c\u2500\u2500 Order 1\n\u2502          \u251c\u2500\u2500 Order 2\n\u2502          \u2514\u2500\u2500 Order 3\n\u2502\n\u2514\u2500\u2500 Customer 3\n      \u2514\u2500\u2500 Orders()\n           \u251c\u2500\u2500 Order 1\n           \u251c\u2500\u2500 Order 2\n           \u2514\u2500\u2500 Order 3\n<\/code><\/pre>\n\n\n\n<p>Now imagine thousands of customer pages. Each customer may contain several order pages.<\/p>\n\n\n\n<p>As a result, the number of Clipboard objects can grow quickly.<\/p>\n\n\n\n<p>Therefore, developers should ask more than:<\/p>\n\n\n\n<p><strong>&#8220;How many records am I loading?&#8221;<\/strong><\/p>\n\n\n\n<p>A better question is:<\/p>\n\n\n\n<p><strong>&#8220;How complex is each record, and how many records remain in memory?&#8221;<\/strong><\/p>\n\n\n\n<p>This approach gives a clearer view of the real memory requirement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Clipboard Growth Is Not Always a Traditional Memory Leak<\/h2>\n\n\n\n<p>The term &#8220;memory leak&#8221; can describe several types of memory problems.<\/p>\n\n\n\n<p>A traditional memory leak occurs when an application keeps memory that it no longer needs. The application cannot reclaim that memory because unwanted references still exist.<\/p>\n\n\n\n<p>Pega applications can experience a different problem: <strong>uncontrolled data retention<\/strong>.<\/p>\n\n\n\n<p>Consider this flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start Processing\n      \u2193\nCreate Temporary Page\n      \u2193\nAdd to Page List\n      \u2193\nProcess Next Record\n      \u2193\nCreate Another Page\n      \u2193\nAdd to Page List\n      \u2193\nContinue...\n<\/code><\/pre>\n\n\n\n<p>The Page List continues to grow because each processed page remains referenced.<\/p>\n\n\n\n<p>The application is doing what the design tells it to do. However, the design keeps data that the process no longer needs.<\/p>\n\n\n\n<p>That creates an architectural problem:<\/p>\n\n\n\n<p><strong>The application retains information beyond its useful lifetime.<\/strong><\/p>\n\n\n\n<p>Increasing JVM heap size may delay the failure. However, it does not remove the underlying cause.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Common Causes of Excessive Clipboard Usage<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Loading More Data Than Required<\/h3>\n\n\n\n<p>One common design problem is retrieving more data than the process needs.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Database\n   \u2193\n100,000 Records\n   \u2193\nClipboard\n   \u2193\nApplication Needs 500 Records\n<\/code><\/pre>\n\n\n\n<p>If the application can filter the data before it reaches the Clipboard, that approach is usually more efficient.<\/p>\n\n\n\n<p>Instead of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Load Everything \u2192 Filter in Memory\n<\/code><\/pre>\n\n\n\n<p>prefer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filter at Source \u2192 Load Required Data \u2192 Process\n<\/code><\/pre>\n\n\n\n<p>This reduces the working set.<\/p>\n\n\n\n<p>It also reduces unnecessary data transfer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 Continuously Growing Page Lists<\/h3>\n\n\n\n<p>Another problem occurs when an application adds every processed record to a Page List.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>For each record:\n    Process record\n    Add record to ProcessedRecords()\n<\/code><\/pre>\n\n\n\n<p>If the application never uses the final Page List, the stored records provide little value.<\/p>\n\n\n\n<p>A better design is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Read Record\n    \u2193\nProcess\n    \u2193\nPersist Result\n    \u2193\nMove to Next Record\n<\/code><\/pre>\n\n\n\n<p>The application should retain only the information needed for the current task.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.3 Copying Complete Pages<\/h3>\n\n\n\n<p>Copying complete pages can also increase memory use.<\/p>\n\n\n\n<p>Suppose an API returns:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CustomerResponse\n\u251c\u2500\u2500 CustomerID\n\u251c\u2500\u2500 Name\n\u251c\u2500\u2500 Contact\n\u251c\u2500\u2500 Accounts()\n\u251c\u2500\u2500 Transactions()\n\u251c\u2500\u2500 Documents()\n\u251c\u2500\u2500 Preferences()\n\u2514\u2500\u2500 History()\n<\/code><\/pre>\n\n\n\n<p>However, the application only needs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CustomerID\nName\nContact\n<\/code><\/pre>\n\n\n\n<p>Copying the complete response creates unnecessary duplication.<\/p>\n\n\n\n<p>Instead, create a smaller structure that contains only the required properties.<\/p>\n\n\n\n<p>This practice is especially useful in integration-heavy and batch-processing applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Data Pages and Integration Responses<\/h2>\n\n\n\n<p>Data Pages provide convenient access to reusable data. However, developers should still consider data size and lifetime.<\/p>\n\n\n\n<p>A potentially inefficient flow can look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Large Data Source\n       \u2193\nLoad Large Dataset\n       \u2193\nCopy Entire Result\n       \u2193\nStore in Page List\n       \u2193\nRepeat\n<\/code><\/pre>\n\n\n\n<p>Data Pages are not automatically inefficient.<\/p>\n\n\n\n<p>The key concern is <strong>how the application consumes the returned data<\/strong>.<\/p>\n\n\n\n<p>Before copying or retaining Data Page content, ask:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do I need the complete result?<\/li>\n\n\n\n<li>Can the source return fewer records?<\/li>\n\n\n\n<li>Can I retrieve only the required properties?<\/li>\n\n\n\n<li>Is the Data Page scoped correctly?<\/li>\n\n\n\n<li>Is the application copying the same data more than once?<\/li>\n\n\n\n<li>Can the process work with smaller batches?<\/li>\n<\/ul>\n\n\n\n<p>The same principle applies to REST and other integration responses.<\/p>\n\n\n\n<p>For example, an external service may return a large payload while the application needs only a few fields.<\/p>\n\n\n\n<p>Keeping the entire response throughout a long-running process can increase the Clipboard working set.<\/p>\n\n\n\n<p>Therefore, process only the data that the application actually needs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Why the Problem Often Appears Only in Production<\/h2>\n\n\n\n<p>Clipboard problems can remain hidden during development.<\/p>\n\n\n\n<p>A developer may test an application with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 Records\n<\/code><\/pre>\n\n\n\n<p>The application may perform well.<\/p>\n\n\n\n<p>Production, however, may process:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100,000 Records\n<\/code><\/pre>\n\n\n\n<p>or even millions of records.<\/p>\n\n\n\n<p>The same logic now has a very different resource requirement.<\/p>\n\n\n\n<p>A useful architectural model is:<\/p>\n\n\n\n<p><strong>Working Set \u2248 Number of Retained Objects \u00d7 Object Complexity<\/strong><\/p>\n\n\n\n<p>This is not an exact JVM memory formula.<\/p>\n\n\n\n<p>Instead, it provides a simple way to think about Clipboard growth.<\/p>\n\n\n\n<p>If the number of retained objects keeps increasing, memory pressure can increase as well.<\/p>\n\n\n\n<p>Typical symptoms include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Processing becomes slower over time<\/li>\n\n\n\n<li>Requestor response time increases<\/li>\n\n\n\n<li>Garbage collection becomes more frequent<\/li>\n\n\n\n<li>Large Clipboard structures appear during troubleshooting<\/li>\n\n\n\n<li>Long-running operations become unstable<\/li>\n\n\n\n<li>Application responsiveness decreases<\/li>\n\n\n\n<li>High-volume jobs fail intermittently<\/li>\n<\/ul>\n\n\n\n<p>One useful warning sign is a gradual slowdown.<\/p>\n\n\n\n<p>For example, the first part of a process may run quickly. Later, each batch may take longer.<\/p>\n\n\n\n<p>When that happens, investigate data accumulation and working-set growth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. How to Troubleshoot Clipboard Growth<\/h2>\n\n\n\n<p>A structured investigation works better than simply increasing memory allocation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Identify the Processing Path<\/h3>\n\n\n\n<p>First, determine where the problem occurs.<\/p>\n\n\n\n<p>Possible areas include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Case creation<\/li>\n\n\n\n<li>Case processing<\/li>\n\n\n\n<li>Data loading<\/li>\n\n\n\n<li>File processing<\/li>\n\n\n\n<li>Integration processing<\/li>\n\n\n\n<li>Batch jobs<\/li>\n\n\n\n<li>Queue-based processing<\/li>\n\n\n\n<li>UI operations<\/li>\n<\/ul>\n\n\n\n<p>Knowing the processing path helps narrow the investigation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Inspect Clipboard Structures<\/h3>\n\n\n\n<p>Next, look for unusually large structures.<\/p>\n\n\n\n<p>Pay attention to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Large Page Lists<\/li>\n\n\n\n<li>Large Page Groups<\/li>\n\n\n\n<li>Deeply nested pages<\/li>\n\n\n\n<li>Duplicate structures<\/li>\n\n\n\n<li>Large API responses<\/li>\n\n\n\n<li>Temporary pages<\/li>\n\n\n\n<li>Unexpected data objects<\/li>\n\n\n\n<li>Collections that keep growing<\/li>\n<\/ul>\n\n\n\n<p>Then ask:<\/p>\n\n\n\n<p><strong>&#8220;Why is this data still present?&#8221;<\/strong><\/p>\n\n\n\n<p>If the reason is unclear, investigate the structure further.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Trace Where the Data Is Created<\/h3>\n\n\n\n<p>Review the rules involved in the processing path.<\/p>\n\n\n\n<p>These may include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Data Transforms<\/li>\n\n\n\n<li>Activities<\/li>\n\n\n\n<li>Functions<\/li>\n\n\n\n<li>Data Pages<\/li>\n\n\n\n<li>Connectors<\/li>\n\n\n\n<li>Loops<\/li>\n\n\n\n<li>Report Definitions<\/li>\n\n\n\n<li>Asynchronous processing logic<\/li>\n<\/ul>\n\n\n\n<p>Look for repeated page creation and unnecessary copying.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Correlate Performance Monitoring<\/h3>\n\n\n\n<p>PDC and other platform monitoring capabilities can help identify performance patterns.<\/p>\n\n\n\n<p>However, an alert does not automatically identify the root cause.<\/p>\n\n\n\n<p>Instead, compare the findings with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Processing volume<\/li>\n\n\n\n<li>Clipboard growth<\/li>\n\n\n\n<li>Database activity<\/li>\n\n\n\n<li>Integration latency<\/li>\n\n\n\n<li>Requestor behavior<\/li>\n\n\n\n<li>JVM memory behavior<\/li>\n\n\n\n<li>Garbage collection<\/li>\n\n\n\n<li>Application server metrics<\/li>\n<\/ul>\n\n\n\n<p>The goal is to connect the application operation with the observed performance impact.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. A Production Example<\/h2>\n\n\n\n<p>Consider a customer migration process that receives a large file.<\/p>\n\n\n\n<p>An inefficient design may look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Large File\n    \u2193\nLoad All Records\n    \u2193\nCreate Customers()\n    \u2193\nStore Entire Dataset\n    \u2193\nValidate\n    \u2193\nCall External API\n    \u2193\nUpdate Records\n    \u2193\nGenerate Output\n<\/code><\/pre>\n\n\n\n<p>In this design, one requestor handles a very large working set.<\/p>\n\n\n\n<p>As processing continues, the working set may grow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>More Records\n     \u2193\nLarger Page List\n     \u2193\nMore Memory Retained\n     \u2193\nIncreased Memory Pressure\n     \u2193\nMore GC Activity\n     \u2193\nLonger Processing Time\n<\/code><\/pre>\n\n\n\n<p>A better design divides the workload into controlled units:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Large File\n    \u2193\nRead Batch\n    \u2193\nValidate\n    \u2193\nProcess\n    \u2193\nPersist Results\n    \u2193\nHandle Errors\n    \u2193\nNext Batch\n<\/code><\/pre>\n\n\n\n<p>The right batch size should come from performance testing and workload characteristics.<\/p>\n\n\n\n<p>Avoid choosing an arbitrary number.<\/p>\n\n\n\n<p>The goal is simple:<\/p>\n\n\n\n<p><strong>Keep the active working set under control.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. When Asynchronous Processing Makes Sense<\/h2>\n\n\n\n<p>Long-running, high-volume operations do not always need to depend on one synchronous requestor.<\/p>\n\n\n\n<p>For suitable workloads, asynchronous processing can provide a more scalable design.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Input\n  \u2193\nQueue\n  \u2193\nWorker\n  \u2193\nProcess Record \/ Batch\n  \u2193\nPersist Result\n  \u2193\nNext Work Item\n<\/code><\/pre>\n\n\n\n<p>This approach can provide several benefits:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Smaller working sets<\/li>\n\n\n\n<li>Better workload distribution<\/li>\n\n\n\n<li>Fault isolation<\/li>\n\n\n\n<li>Controlled retries<\/li>\n\n\n\n<li>Improved scalability<\/li>\n\n\n\n<li>Less dependence on one requestor<\/li>\n<\/ul>\n\n\n\n<p>Pega provides multiple options for asynchronous processing.<\/p>\n\n\n\n<p>The right option depends on factors such as workload size, transaction boundaries, retry needs, and application architecture.<\/p>\n\n\n\n<p>Therefore, the key principle is not simply:<\/p>\n\n\n\n<p><strong>&#8220;Use asynchronous processing.&#8221;<\/strong><\/p>\n\n\n\n<p>Instead:<\/p>\n\n\n\n<p><strong>&#8220;Choose a processing model that matches the volume and lifetime of the work.&#8221;<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Five Practical Design Rules<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Load Only What You Need<\/h3>\n\n\n\n<p>Reduce the dataset as early as practical.<\/p>\n\n\n\n<p>Avoid retrieving everything and filtering it later.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Avoid Unnecessary Page Copies<\/h3>\n\n\n\n<p>If the application needs only a few properties, do not duplicate an entire complex page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Control Page List Growth<\/h3>\n\n\n\n<p>Do not continuously append records unless the complete collection is genuinely required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Keep Temporary Data Temporary<\/h3>\n\n\n\n<p>Temporary structures should have a clear purpose.<\/p>\n\n\n\n<p>Remove unnecessary data from the active working set when the process no longer needs it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Design for Production Volume<\/h3>\n\n\n\n<p>Test with realistic:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Record counts<\/li>\n\n\n\n<li>Payload sizes<\/li>\n\n\n\n<li>Concurrency<\/li>\n\n\n\n<li>Processing duration<\/li>\n<\/ul>\n\n\n\n<p>A design that works with 100 records may not work with one million records.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Clipboard Anti-Patterns<\/h2>\n\n\n\n<p>The following patterns deserve attention during code reviews.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Pattern 1: &#8220;Store Everything in a Page List&#8221;<\/h3>\n\n\n\n<p>This can work for small collections.<\/p>\n\n\n\n<p>However, it becomes risky when the collection represents a high-volume dataset.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Pattern 2: &#8220;Copy the Entire API Response&#8221;<\/h3>\n\n\n\n<p>This may seem convenient during development.<\/p>\n\n\n\n<p>However, copying a large response is wasteful when the application needs only a few fields.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Pattern 3: &#8220;Increase the Heap&#8221;<\/h3>\n\n\n\n<p>More memory can postpone failure.<\/p>\n\n\n\n<p>However, it does not fix inefficient data retention.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Pattern 4: &#8220;Process Everything in One Request&#8221;<\/h3>\n\n\n\n<p>Large, long-running operations can create unnecessarily large working sets.<\/p>\n\n\n\n<p>Breaking the work into smaller units can provide better control.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anti-Pattern 5: &#8220;It Worked in Development&#8221;<\/h3>\n\n\n\n<p>Small datasets can hide scalability problems.<\/p>\n\n\n\n<p>Therefore, production-like testing remains important.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13. Production Readiness Checklist<\/h2>\n\n\n\n<p>Before deploying a high-volume Pega process, review these questions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is the Clipboard working set reasonable?<\/li>\n\n\n\n<li>Are large Page Lists genuinely required?<\/li>\n\n\n\n<li>Are nested Page Lists necessary?<\/li>\n\n\n\n<li>Are complete API responses being retained?<\/li>\n\n\n\n<li>Are unnecessary properties being copied?<\/li>\n\n\n\n<li>Can filtering happen before data reaches the Clipboard?<\/li>\n\n\n\n<li>Can the workload run in batches?<\/li>\n\n\n\n<li>Is asynchronous processing appropriate?<\/li>\n\n\n\n<li>Are temporary structures retained longer than needed?<\/li>\n\n\n\n<li>Has the application been tested with realistic production volumes?<\/li>\n\n\n\n<li>Have performance metrics been reviewed during load testing?<\/li>\n\n\n\n<li>Have PDC findings been compared with actual application behavior?<\/li>\n<\/ul>\n\n\n\n<p>These checks should become part of the design and code-review process for high-volume applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Pega Clipboard performance problems rarely start with an obviously incorrect design.<\/p>\n\n\n\n<p>Instead, they can begin with small decisions.<\/p>\n\n\n\n<p>For example:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Let&#8217;s temporarily store this record.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Let&#8217;s copy this response.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Let&#8217;s add this item to the Page List.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;We might need this data later.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p>Each decision may appear harmless.<\/p>\n\n\n\n<p>However, repeating the same decisions thousands of times can create a large working set.<\/p>\n\n\n\n<p>The lesson is not to avoid Page Lists or Clipboard structures. They remain important parts of Pega application development.<\/p>\n\n\n\n<p>The real goal is to <strong>control what the application stores, how much it stores, and how long it keeps that data<\/strong>.<\/p>\n\n\n\n<p>A scalable Pega application should keep its runtime working set focused on the current unit of work.<\/p>\n\n\n\n<p>Large datasets should be filtered early when possible. They can also be processed in manageable batches or handled through suitable asynchronous and persistence mechanisms.<\/p>\n\n\n\n<p>Ultimately, one question should guide Clipboard design:<\/p>\n\n\n\n<p><strong>&#8220;Does the application really need to keep this data in memory right now?&#8221;<\/strong><\/p>\n\n\n\n<p>If the answer is no, removing that data from the active working set can help protect application performance and scalability.<\/p>","protected":false},"excerpt":{"rendered":"<p>Introduction Performance problems in Pega applications do not always come from slow database queries or poor integrations. Sometimes, the problem is much closer to the runtime. One common cause is excessive data stored on the Clipboard. The Pega Clipboard acts as runtime working memory during case processing. It can hold case data, embedded pages, Page [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":6345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-6344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pega Clipboard Memory Leaks: Causes, Risks &amp; Fixes - Enigma Metaverse<\/title>\n<meta name=\"description\" content=\"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/enigmametaverse.com\/it\/pega-clipboard-memory-leaks\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pega Clipboard Memory Leaks: Causes, Risks &amp; Fixes - Enigma Metaverse\" \/>\n<meta property=\"og:description\" content=\"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/enigmametaverse.com\/it\/pega-clipboard-memory-leaks\/\" \/>\n<meta property=\"og:site_name\" content=\"Enigma Metaverse\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EnigmaMetaverse\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T04:20:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png\" \/>\n\t<meta property=\"og:image:width\" content=\"799\" \/>\n\t<meta property=\"og:image:height\" content=\"532\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Enigma Metaverse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@EnigmaMetaverse\" \/>\n<meta name=\"twitter:site\" content=\"@EnigmaMetaverse\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Enigma Metaverse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/\"},\"author\":{\"name\":\"Enigma Metaverse\",\"@id\":\"https:\/\/enigmametaverse.com\/#\/schema\/person\/8e52133e3cc700baf39c19ab7992e76e\"},\"headline\":\"Pega Clipboard Memory Leaks: How Innocent Page Lists Can Become Production Performance Problems\",\"datePublished\":\"2026-09-12T04:20:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/\"},\"wordCount\":1979,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/enigmametaverse.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/\",\"url\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/\",\"name\":\"Pega Clipboard Memory Leaks: Causes, Risks & Fixes - Enigma Metaverse\",\"isPartOf\":{\"@id\":\"https:\/\/enigmametaverse.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png\",\"datePublished\":\"2026-09-12T04:20:56+00:00\",\"description\":\"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.\",\"breadcrumb\":{\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage\",\"url\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png\",\"contentUrl\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png\",\"width\":799,\"height\":532},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/enigmametaverse.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pega Clipboard Memory Leaks: How Innocent Page Lists Can Become Production Performance Problems\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/enigmametaverse.com\/#website\",\"url\":\"https:\/\/enigmametaverse.com\/\",\"name\":\"Enigma Metaverse\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/enigmametaverse.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/enigmametaverse.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/enigmametaverse.com\/#organization\",\"name\":\"Enigma Metaverse\",\"url\":\"https:\/\/enigmametaverse.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/enigmametaverse.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2025\/03\/enigmametaverse-white-logo.svg\",\"contentUrl\":\"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2025\/03\/enigmametaverse-white-logo.svg\",\"width\":125,\"height\":35,\"caption\":\"Enigma Metaverse\"},\"image\":{\"@id\":\"https:\/\/enigmametaverse.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/EnigmaMetaverse\",\"https:\/\/x.com\/EnigmaMetaverse\",\"http:\/\/instagram.com\/EnigmaMetaverse\",\"https:\/\/www.linkedin.com\/company\/EnigmaMetaverse\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/enigmametaverse.com\/#\/schema\/person\/8e52133e3cc700baf39c19ab7992e76e\",\"name\":\"Enigma Metaverse\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/enigmametaverse.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ffb931a8d36a9ce6976a0a4d7821661b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ffb931a8d36a9ce6976a0a4d7821661b?s=96&d=mm&r=g\",\"caption\":\"Enigma Metaverse\"},\"sameAs\":[\"http:\/\/enigmametaverse.com\"],\"url\":\"https:\/\/enigmametaverse.com\/it\/author\/enigmametaverse\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pega Clipboard Memory Leaks: Causes, Risks & Fixes - Enigma Metaverse","description":"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/enigmametaverse.com\/it\/pega-clipboard-memory-leaks\/","og_locale":"it_IT","og_type":"article","og_title":"Pega Clipboard Memory Leaks: Causes, Risks & Fixes - Enigma Metaverse","og_description":"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.","og_url":"https:\/\/enigmametaverse.com\/it\/pega-clipboard-memory-leaks\/","og_site_name":"Enigma Metaverse","article_publisher":"https:\/\/www.facebook.com\/EnigmaMetaverse","article_published_time":"2026-09-12T04:20:56+00:00","og_image":[{"width":799,"height":532,"url":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png","type":"image\/png"}],"author":"Enigma Metaverse","twitter_card":"summary_large_image","twitter_creator":"@EnigmaMetaverse","twitter_site":"@EnigmaMetaverse","twitter_misc":{"Scritto da":"Enigma Metaverse","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#article","isPartOf":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/"},"author":{"name":"Enigma Metaverse","@id":"https:\/\/enigmametaverse.com\/#\/schema\/person\/8e52133e3cc700baf39c19ab7992e76e"},"headline":"Pega Clipboard Memory Leaks: How Innocent Page Lists Can Become Production Performance Problems","datePublished":"2026-09-12T04:20:56+00:00","mainEntityOfPage":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/"},"wordCount":1979,"commentCount":0,"publisher":{"@id":"https:\/\/enigmametaverse.com\/#organization"},"image":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage"},"thumbnailUrl":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png","articleSection":["Uncategorized"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/","url":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/","name":"Pega Clipboard Memory Leaks: Causes, Risks & Fixes - Enigma Metaverse","isPartOf":{"@id":"https:\/\/enigmametaverse.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage"},"image":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage"},"thumbnailUrl":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png","datePublished":"2026-09-12T04:20:56+00:00","description":"Learn how Pega Clipboard memory leaks occur, why Page Lists cause performance issues, and how to reduce memory use in high-volume applications.","breadcrumb":{"@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#primaryimage","url":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png","contentUrl":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2026\/09\/image-9.png","width":799,"height":532},{"@type":"BreadcrumbList","@id":"https:\/\/enigmametaverse.com\/pega-clipboard-memory-leaks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/enigmametaverse.com\/"},{"@type":"ListItem","position":2,"name":"Pega Clipboard Memory Leaks: How Innocent Page Lists Can Become Production Performance Problems"}]},{"@type":"WebSite","@id":"https:\/\/enigmametaverse.com\/#website","url":"https:\/\/enigmametaverse.com\/","name":"Enigma Metaverse","description":"","publisher":{"@id":"https:\/\/enigmametaverse.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/enigmametaverse.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/enigmametaverse.com\/#organization","name":"Enigma Metaverse","url":"https:\/\/enigmametaverse.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/enigmametaverse.com\/#\/schema\/logo\/image\/","url":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2025\/03\/enigmametaverse-white-logo.svg","contentUrl":"https:\/\/enigmametaverse.com\/wp-content\/uploads\/2025\/03\/enigmametaverse-white-logo.svg","width":125,"height":35,"caption":"Enigma Metaverse"},"image":{"@id":"https:\/\/enigmametaverse.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/EnigmaMetaverse","https:\/\/x.com\/EnigmaMetaverse","http:\/\/instagram.com\/EnigmaMetaverse","https:\/\/www.linkedin.com\/company\/EnigmaMetaverse"]},{"@type":"Person","@id":"https:\/\/enigmametaverse.com\/#\/schema\/person\/8e52133e3cc700baf39c19ab7992e76e","name":"Enigma Metaverse","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/enigmametaverse.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ffb931a8d36a9ce6976a0a4d7821661b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ffb931a8d36a9ce6976a0a4d7821661b?s=96&d=mm&r=g","caption":"Enigma Metaverse"},"sameAs":["http:\/\/enigmametaverse.com"],"url":"https:\/\/enigmametaverse.com\/it\/author\/enigmametaverse\/"}]}},"_links":{"self":[{"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/posts\/6344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/comments?post=6344"}],"version-history":[{"count":1,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/posts\/6344\/revisions"}],"predecessor-version":[{"id":6346,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/posts\/6344\/revisions\/6346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/media\/6345"}],"wp:attachment":[{"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/media?parent=6344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/categories?post=6344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enigmametaverse.com\/it\/wp-json\/wp\/v2\/tags?post=6344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}