イントラマートのメモリ解放処理

2018/02/07イントラマートintra-mart ver7.2,スクリプト開発

記事内に広告が含まれています。

イントラマートのメモリ解放は本来ガベージコレクションで自動で行われますが、プログラム的に意図して開放する処理を検討します。

イントラマートとは
株式会社NTTデータイントラマート社が開発・販売している、Webアプリケーションシステムのシステム共通基盤(統合型フレームワーク)で、国内の著名企業を中心に6,000社以上に導入されています。 イントラマートを導入することにより、Webシステム開発における短納期・低コスト・標準化推進・品質向上を実現できます。
詳しくはこちらをご覧ください。

イントラマートのメモリ解放処理

本来はガベージコレクターで解放されるので不要なのかも知れませんが、メモリリークの対策として、ガベージコレクターが動かなくてもメモリを解放する処理を作成して見ました。

function memoryClean( target )
{
var i = 0 ;

switch( Module.data.varType( target )){
case “string" : //文字列
case “number" : //数値
case “boolean" : //真偽値
case “date" : //日付
case “function" : //関数
delete target ;
break ;
case “null" : //NULL
break ;
case “undefined" : //未定義
break ;
case “object" : //オブジェクト
for( i in target ){
target[ i ] = memoryClean( target[ i ]) ;
}
break ;
case “array" : //配列
for( i = 0 ; i < target.length ; i++ ){ target[ i ] = memoryClean( target[ i ]) ; } break ; } return target ; } [/javascript] ちなみに呼び出し形式は [javascript] //ダミーでデータセットしておく var obj = new Array() ; obj[ 0 ] = "aaa" ; obj[ 1 ] = "bbb" ; obj[ 2 ] = "ccc" ; obj[ 3 ] = new Object() ; obj[ 3 ].aaa = "aaa" ; obj[ 4 ] = new Array() ; obj[ 4 ][ 0 ] = "1111" ; obj[ 4 ][ 1 ] = "2222" ; memoryClean( obj ) ; //メモリクリア [/javascript] です。 Module.data.varType()の戻り値すべてで動作させましたが 特にはエラーは出ませんでした。 実際に適当に大きなメモリを確保して呼び出すと FreeMemory増えたり減ったり。 ガベージコレクターは確実にFreeMemory増えますね。 以下は関数呼び出し前後、ガベージコレクターの結果。 [text] function call before!! FreeMemory=730727712 function call after!! FreeMemory=769349384 The processing end of Garbage-Controller[Free-Memory]: 769349384 -> 901882408 / 999686144
function call before!! FreeMemory=894320568
function call after!! FreeMemory=802260440
The processing end of Garbage-Controller[Free-Memory]: 802260440 -> 933808064 / 1015611392
function call before!! FreeMemory=896101904
function call after!! FreeMemory=933391912
The processing end of Garbage-Controller[Free-Memory]: 933391912 -> 951318880 / 1029111808
[/text]

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ