- argc = static_cast<int>(env->GetArrayLength(jargs));
-
- argc++;
- argv = xbt_new(char *, argc + 1);
- argv[0] = xbt_strdup("java");
-
- for (index = 0; index < argc - 1; index++) {
- jval = (jstring) env->GetObjectArrayElement(jargs, index);
- tmp = env->GetStringUTFChars(jval, 0);
- argv[index + 1] = xbt_strdup(tmp);
+ argc += static_cast<int>(env->GetArrayLength(jargs));
+ xbt_assert(argc > 0);
+
+ // Need a static storage because the XBT layer saves the arguments in xbt::binary_name and xbt::cmdline.
+ static std::vector<std::string> args;
+ args.reserve(argc);
+
+ args.emplace_back("java");
+ for (int index = 1; index < argc; index++) {
+ jstring jval = (jstring)env->GetObjectArrayElement(jargs, index - 1);
+ const char* tmp = env->GetStringUTFChars(jval, 0);
+ args.emplace_back(tmp);