@@ -89,14 +89,16 @@ def _loop():
8989 return stop_event
9090
9191
92- def heap_tag_from_env ( ) -> str :
93- """Return heap tag derived from ARCADEDB_JVM_ARGS (-Xmx) , or 'default'."""
92+ def heap_tag_from_args ( heap_size : str | None , jvm_args : str | None ) -> str :
93+ """Return heap tag derived from explicit args , or 'default'."""
9494
95- jvm_args = os .environ .get ("ARCADEDB_JVM_ARGS" , "" )
96- m = re .search (r"-Xmx(\S+)" , jvm_args )
97- if not m :
98- return "default"
99- return m .group (1 )
95+ if heap_size :
96+ return heap_size
97+ if jvm_args :
98+ m = re .search (r"-Xmx(\S+)" , jvm_args )
99+ if m :
100+ return m .group (1 )
101+ return "default"
100102
101103
102104# -------------------------
@@ -466,16 +468,38 @@ def main():
466468 default = 100_000 ,
467469 help = "Number of vectors to ingest per transaction batch" ,
468470 )
471+ ap .add_argument (
472+ "--heap-size" ,
473+ default = None ,
474+ help = (
475+ "Heap size for the embedded JVM (e.g., 8g). Prefer this over "
476+ "ARCADEDB_JVM_ARGS."
477+ ),
478+ )
479+ ap .add_argument (
480+ "--jvm-args" ,
481+ default = None ,
482+ help = (
483+ "Extra JVM args to pass to start_jvm (e.g., thread flags). "
484+ "Prefer this over ARCADEDB_JVM_ARGS."
485+ ),
486+ )
469487 args = ap .parse_args ()
470488
471489 stop_cpu = start_cpu_logger (2 )
472490
473491 np .random .seed (args .seed )
474492 eval_k = 50
475493
476- # Import after potential JVM arg override
494+ # Import and configure JVM before any DB creation
477495 import arcadedb_embedded as arcadedb
478496
497+ jvm_kwargs = {}
498+ if args .heap_size is not None :
499+ jvm_kwargs ["heap_size" ] = args .heap_size
500+ if args .jvm_args is not None :
501+ jvm_kwargs ["jvm_args" ] = args .jvm_args
502+
479503 sources , gt_path , dim , label = resolve_dataset (Path (args .dataset_dir ))
480504 total_rows = sum (s ["count" ] for s in sources )
481505 count = args .count if args .count is not None else total_rows
@@ -513,7 +537,7 @@ def record(name: str, result, dur, rss_start, rss_end):
513537 record ("load_queries" , {"queries" : len (queries )}, dur , r0 , r1 )
514538
515539 # Prepare DB path
516- heap_tag = heap_tag_from_env ( )
540+ heap_tag = heap_tag_from_args ( args . heap_size , args . jvm_args )
517541 param_dir = "_" .join (
518542 [
519543 f"dataset={ Path (args .dataset_dir ).name } " ,
@@ -537,7 +561,8 @@ def record(name: str, result, dur, rss_start, rss_end):
537561
538562 # Create DB
539563 (db , dur , r0 , r1 ) = timed_section (
540- "create_db" , lambda : arcadedb .create_database (str (db_path ))
564+ "create_db" ,
565+ lambda : arcadedb .create_database (str (db_path ), jvm_kwargs = jvm_kwargs ),
541566 )
542567 record ("create_db" , {"db_path" : str (db_path )}, dur , r0 , r1 )
543568
@@ -670,7 +695,8 @@ def record(name: str, result, dur, rss_start, rss_end):
670695
671696 # Reopen
672697 (db , dur , r0 , r1 ) = timed_section (
673- "open_db" , lambda : arcadedb .open_database (str (db_path ))
698+ "open_db" ,
699+ lambda : arcadedb .open_database (str (db_path ), jvm_kwargs = jvm_kwargs ),
674700 )
675701 record ("open_db" , {}, dur , r0 , r1 )
676702
0 commit comments