#include <vector> #include <string> #include "agent_util.hpp" //该文件可以在Java SE Development Kit 8u101演示和样本中找到。 //see http://download.oracle.com/otn-pub/java/jdk/8u101-b13-demos/jdk-8u101-windows-x64-demos.zip //jdk1.8.0_101.zip!\demo\jvmti\versionCheck\src\agent_util.h /* * Struct used for jvmti->SetTag(object, <pointer to tag>); * http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#SetTag * */ typedef struct Tag { jlong referrer_tag; jlong size; char* classSignature; jint hashCode; } Tag; /* * Utility function: jlong -> Tag* */ static Tag* pointerToTag(jlong tag_ptr) { if (tag_ptr == 0) { return new Tag(); } return (Tag*)(ptrdiff_t)(void*)tag_ptr; } /* * Utility function: Tag* -> jlong */ static jlong tagToPointer(Tag* tag) { return (jlong)(ptrdiff_t)(void*)tag; } /* * Heap 1.0 Callback * http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#jvmtiObjectReferenceCallback */ static jvmtiIterationControl JNICALL heabObjectReferencesCallback( jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong referrer_tag, jint referrer_index, void* user_data) { //仅在参考字段上迭代 if (reference_kind != JVMTI_HEAP_REFERENCE_FIELD) { return JVMTI_ITERATION_IGNORE; } auto tag_ptr_list = (std::vector<jlong>*)(ptrdiff_t)(void*)user_data; //创建并分配标签 auto t = pointerToTag(*tag_ptr); t->referrer_tag = referrer_tag; t->size = size; *tag_ptr = tagToPointer(t); //收集标签 (*tag_ptr_list).push_back(*tag_ptr); return JVMTI_ITERATION_CONTINUE; } /* * Main function for demonstration of Iterate Over Objects Reachable From Object * http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#IterateOverObjectsReachableFromObject * */ void iterateOverObjectHeapReferences(jvmtiEnv* jvmti, JNIEnv* env, jobject object) { std::vector<jlong> tag_ptr_list; auto t = new Tag(); jvmti->SetTag(object, tagToPointer(t)); tag_ptr_list.push_back(tagToPointer(t)); stdout_message("tag list size before call callback: %d\n", tag_ptr_list.size()); /* * Call Callback for every reachable object reference * see http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#IterateOverObjectsReachableFromObject */ jvmti->IterateOverObjectsReachableFromObject(object, &heabObjectReferencesCallback, (void*)&tag_ptr_list); stdout_message("tag list size after call callback: %d\n", tag_ptr_list.size()); if (tag_ptr_list.size() > 0) { jint found_count = 0; jlong* tags = &tag_ptr_list[0]; jobject* found_objects; jlong* found_tags; /* * collect all tagged object (via *tag_ptr = pointer to tag ) * see http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#GetObjectsWithTags */ jvmti->GetObjectsWithTags(tag_ptr_list.size(), tags, &found_count, &found_objects, &found_tags); stdout_message("found %d objects\n", found_count); for (auto i = 0; i < found_count; ++i) { jobject found_object = found_objects[i]; char* classSignature; jclass found_object_class = env->GetObjectClass(found_object); /* * Get string representation of found_object_class * see http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#GetClassSignature */ jvmti->GetClassSignature(found_object_class, &classSignature, nullptr); jint hashCode; /* * Getting hash code for found_object * see http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#GetObjectHashCode */ jvmti->GetObjectHashCode(found_object, &hashCode); //将其全部保存在标签中 Tag* t = pointerToTag(found_tags[i]); t->classSignature = classSignature; t->hashCode = hashCode; } //打印所有保存的信息 for (auto i = 0; i < found_count; ++i) { auto t = pointerToTag(found_tags[i]); auto rt = pointerToTag(t->referrer_tag); if (t->referrer_tag != 0) { stdout_message("referrer object %s#%d --> object %s#%d (size: %2d)\n", rt->classSignature, rt->hashCode, t->classSignature, t->hashCode, t->size); } } } }
问题内容: 我正在尝试遍历JSON对象以导入数据,即标题和链接。我似乎无法掌握过去的内容。 JSON: 我尝试使用字典: 此代码仅在之前打印信息。( 忽略贾斯汀·比伯的曲目 :) 问题答案: 您加载JSON数据有些脆弱。代替: 您实际上应该这样做: 您不应该将“ JSON对象”视为什么。您所拥有的是清单。该列表包含两个字典。字典包含各种键/值对,所有字符串。当您这样做时,您将要求列表中的第一个字典
假设每种颜色总是有一辆车。所以我总是在找一辆车,不多也不少。 如何确保始终有一个对象被找到并返回?
本文向大家介绍Java 如何遍历JsonObject对象,包括了Java 如何遍历JsonObject对象的使用技巧和注意事项,需要的朋友参考一下 方法: 代码示例: 补充:java生成json格式数据 和 java遍历json格式数据 java 生成json 格式的数据,在需要加入一个创建json的jar包,这个网上有好多,我使用的是org.json的jar包。 通过运行上面的代码就能生成我们想
问题内容: 我有一个使用jsoncpp解码JSON字符串的C ++应用程序。我创建了以下函数,但仅向我显示了顶级对象… 如何获取转储整个对象列表的信息? - 功能 - -输入---- -输出- 问题答案: 您可能会遇到一些错误,这些错误似乎与您对递归或JSON的key-> value性质没有很好的了解以及如何与所使用的库相关联。我根本没有测试过此代码,但它应该可以更好地工作。
问题内容: 我很难找到一种以我想要的方式遍历此JSON对象的方法。我在这里只使用Javascript。 首先,这是对象 现在,我正在尝试基本方法来访问此对象上的每个dialog_trunk。理想情况下,我想遍历对象,并为每个主干显示其值。 我已经尝试过使用for循环动态地生成dialog_trunk的名称/编号,但是我无法使用对象名称的字符串来访问该对象,因此我不确定从何处去。 问题答案: 为此使
问题内容: 使用示例: 假设我有一个课堂电话。我还有另一个上课电话。 类的ArrayList为。 要遍历.. 的Arraylist而不是这样做: 我们可以像这样简单地遍历ArrayList : 现在,我要迭代并打印出所有第3个对象: 现在我的问题是: 与使用常规的for循环不同,我如何使用ArrayList迭代打印出枪支对象列表? 问题答案: 您要遵循与以前相同的模式: 在这种情况下,它将是: