view test/runtime/6929067/invoke.c @ 3285:49a67202bc67

7011855: G1: non-product flag to artificially grow the heap Summary: It introduces non-product cmd line parameter G1DummyRegionsPerGC which indicates how many "dummy" regions to allocate at the end of each GC. This allows the G1 heap to grow artificially and makes concurrent marking cycles more frequent irrespective of what the application that is running is doing. The dummy regions will be found totally empty during cleanup so this parameter can also be used to stress the concurrent cleanup operation. Reviewed-by: brutisso, johnc
author tonyp
date Tue, 19 Apr 2011 15:46:59 -0400
parents 3b3d12e645e7
children
line wrap: on
line source

#include <assert.h>
#include <jni.h>
#include <alloca.h>

#include <pthread.h>

union env_union
{
  void *void_env;
  JNIEnv *jni_env;
};

union env_union tmp;
JNIEnv* env;
JavaVM* jvm;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
jclass class_id;
jmethodID method_id;
jint result;

long product(unsigned long n, unsigned long m) {
    if (m == 1) {
      return n;
    } else {
      int *p = alloca(sizeof (int));
      *p = n;
      return product (n, m-1) + *p;
    }
}

void *
floobydust (void *p)
{
  (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
  env = tmp.jni_env;

  class_id = (*env)->FindClass (env, "T");
  assert (class_id);

  method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
  assert (method_id);

  (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);

  (*jvm)->DetachCurrentThread(jvm);

  printf("%ld\n", product(5000,5000));

  (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
  env = tmp.jni_env;

  class_id = (*env)->FindClass (env, "T");
  assert (class_id);

  method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
  assert (method_id);

  (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);

  (*jvm)->DetachCurrentThread(jvm);

  printf("%ld\n", product(5000,5000));

  return NULL;
}

int
main (int argc, const char** argv)
{
  options[0].optionString = "-Xss320k";

  vm_args.version = JNI_VERSION_1_2;
  vm_args.ignoreUnrecognized = JNI_TRUE;
  vm_args.options = options;
  vm_args.nOptions = 1;

  result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
  assert (result >= 0);

  env = tmp.jni_env;

  floobydust (NULL);

  pthread_t thr;
  pthread_create (&thr, NULL, floobydust, NULL);
  pthread_join (thr, NULL);

  return 0;
}