源码中对于枚举类型WKID的使用

  1. static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
  2. static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
  3. static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
  4. int limit = (int)end_id + 1;
  5. initialize_wk_klasses_until((WKID) limit, start_id, THREAD);

这个是宏定义,类似于以下简码

  1. int main() {
  2. enum EM{
  3. day1,b1=day1,
  4. day2,b2=day2,
  5.  
  6. };
  7.  
  8. std::cout << "day2的值为:" << std::endl;
  9. std::cout << EM::day2 << std::endl;
  10. std::cout << "b1 的值为:" << std::endl;
  11. std::cout << EM::b1 << std::endl;
  12. return 0;
  13. }
  14. 打印结果
  15. day2的值为:
  16. 1
  17. b1 的值为:
  18. 0

能看出来,这个枚举非常特殊,

那么看WKID

  1. enum WKID {
  2. NO_WKID = 0,
  3. /* well-known classes */
  4. Object_klass_knum, java_lang_Object_knum = Object_klass_knum,
  5. String_klass_knum, java_lang_String_knum = String_klass_knum,
  6. Class_klass_knum, java_lang_Class_knum = Class_klass_knum,
  7. Cloneable_klass_knum, java_lang_Cloneable_knum = Cloneable_klass_knum,
  8. ClassLoader_klass_knum, java_lang_ClassLoader_knum = Cloneable_klass_knum,
  9. Serializable_klass_knum, java_io_Serializable_knum = Serializable_klass_knum,
  10. System_klass_knum, java_lang_System_knum = System_klass_knum,
  11. Throwable_klass_knum, java_lang_Throwable_knum = Throwable_klass_knum,
  12. Error_klass_knum, java_lang_Error_knum = Error_klass_knum,
  13. ThreadDeath_klass_knum, java_lang_ThreadDeath_knum = ThreadDeath_klass_knum,
  14. Exception_klass_knum, java_lang_Exception_knum = Exception_klass_knum,,
  15. RuntimeException_klass_knum, java_lang_RuntimeException_knum = RuntimeException_klass_knum,
  16. SecurityManager_klass_knum, java_lang_SecurityManager_knum = SecurityManager_klass_knum,
  17. ProtectionDomain_klass_knum, java_security_ProtectionDomain_knum = ProtectionDomain_klass_knum,
  18. AccessControlContext_klass_knum, java_security_AccessControlContext_knum = AccessControlContext_klass_knum,
  19. ClassNotFoundException_klass_knum, java_lang_ClassNotFoundException_knum = ClassNotFoundException_klass_knum,
  20. NoClassDefFoundError_klass_knum, java_lang_NoClassDefFoundError_knum = NoClassDefFoundError_klass_knum,
  21. LinkageError_klass_knum, java_lang_LinkageError_knum = LinkageError_klass_knum,
  22. ClassCastException_klass_knum, java_lang_ClassCastException_knum = ClassCastException_klass_knum,
  23. ArrayStoreException_klass_knum, java_lang_ArrayStoreException_knum = ArrayStoreException_klass_knum,
  24. VirtualMachineError_klass_knum, java_lang_VirtualMachineError_knum = VirtualMachineError_klass_knum,
  25. OutOfMemoryError_klass_knum, java_lang_OutOfMemoryError_knum = OutOfMemoryError_klass_knum,
  26. StackOverflowError_klass_knum, java_lang_StackOverflowError_knum = StackOverflowError_klass_knum,
  27. IllegalMonitorStateException_klass_knum, java_lang_IllegalMonitorStateException_knum = IllegalMonitorStateException_klass_knum,
  28. Reference_klass_knum, java_lang_ref_Reference_knum = Reference_klass_knum,
  29.  
  30. /* load ref klasses and set reference types */
  31. SoftReference_klass_knum, java_lang_ref_SoftReference_knum = SoftReference_klass_knum,
  32. WeakReference_klass_knum, java_lang_ref_WeakReference_knum = WeakReference_klass_knum,
  33. FinalReference_klass_knum, java_lang_ref_FinalReference_knum = FinalReference_klass_knum,
  34. PhantomReference_klass_knum, java_lang_ref_PhantomReference_knum = PhantomReference_klass_knum,
  35. Finalizer_klass_knum, java_lang_ref_Finalizer_knum = Finalizer_klass_knum,
  36.  
  37. Thread_klass_knum, java_lang_Thread_knum = Thread_klass_knum,
  38. ThreadGroup_klass_knum, java_lang_ThreadGroup_knum = ThreadGroup_klass_knum,
  39. Properties_klass_knum, java_util_Properties_knum = Properties_klass_knum,
  40. reflect_AccessibleObject_klass_knum, java_lang_reflect_AccessibleObject_knum = reflect_AccessibleObject_klass_knum,
  41. reflect_Field_klass_knum, java_lang_reflect_Field_knum = reflect_Field_klass_knum,
  42. reflect_Parameter_klass_knum, java_lang_reflect_Parameter_knum = reflect_Parameter_klass_knum,
  43. reflect_Method_klass_knum, java_lang_reflect_Method_knum = reflect_Method_klass_knum,
  44. reflect_Constructor_klass_knum, java_lang_reflect_Constructor_knum = reflect_Constructor_klass_knum,
  45.  
  46. /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */
  47. /* Universe::is_gte_jdk14x_version( is not set up by this point. */
  48. /* It's okay if this turns out to be NULL in non-1.4 JDKs. */
  49. reflect_MagicAccessorImpl_klass_knum, sun_reflect_MagicAccessorImpl_knum = reflect_MagicAccessorImpl_klass_knum,
  50. reflect_MethodAccessorImpl_klass_knum, sun_reflect_MethodAccessorImpl_knum = reflect_MethodAccessorImpl_klass_knum,
  51. reflect_ConstructorAccessorImpl_klass_knum, sun_reflect_ConstructorAccessorImpl_knum = reflect_ConstructorAccessorImpl_klass_knum,
  52. reflect_DelegatingClassLoader_klass_knum, sun_reflect_DelegatingClassLoader_knum = reflect_DelegatingClassLoader_klass_knum,
  53. reflect_ConstantPool_klass_knum, sun_reflect_ConstantPool_knum = reflect_ConstantPool_klass_knum,
  54. reflect_UnsafeStaticFieldAccessorImpl_klass_knum, sun_reflect_UnsafeStaticFieldAccessorImpl_knum = reflect_UnsafeStaticFieldAccessorImpl_klass_knum,
  55. reflect_CallerSensitive_klass_knum, sun_reflect_CallerSensitive_knum = reflect_CallerSensitive_klass_knum,
  56.  
  57. /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */
  58. DirectMethodHandle_klass_knum, java_lang_invoke_DirectMethodHandle_knum = DirectMethodHandle_klass_knum,
  59. MethodHandle_klass_knum, java_lang_invoke_MethodHandle_knum = MethodHandle_klass_knum,
  60. MemberName_klass_knum, java_lang_invoke_MemberName_knum = MemberName_klass_knum,
  61. MethodHandleNatives_klass_knum, java_lang_invoke_MethodHandleNatives_knum = MethodHandleNatives_klass_knum,
  62. LambdaForm_klass_knum, java_lang_invoke_LambdaForm_knum = LambdaForm_klass_knum,
  63. MethodType_klass_knum, java_lang_invoke_MethodType_knum = MethodType_klass_knum,
  64. BootstrapMethodError_klass_knum, java_lang_BootstrapMethodError_knum = BootstrapMethodError_klass_knum,
  65. CallSite_klass_knum, java_lang_invoke_CallSite_knum = CallSite_klass_knum,
  66. ConstantCallSite_klass_knum, java_lang_invoke_ConstantCallSite_knum = ConstantCallSite_klass_knum,
  67. MutableCallSite_klass_knum, java_lang_invoke_MutableCallSite_knum = MutableCallSite_klass_knum,
  68. VolatileCallSite_klass_knum, java_lang_invoke_VolatileCallSite_knum = VolatileCallSite_klass_knum,
  69. /* Note: MethodHandle must be first, and VolatileCallSite last in group */
  70.  
  71. StringBuffer_klass_knum, java_lang_StringBuffer_knum = StringBuffer_klass_knum,
  72. StringBuilder_klass_knum, java_lang_StringBuilder_knum = StringBuilder_klass_knum,
  73. misc_Unsafe_klass_knum, sun_misc_Unsafe_knum = misc_Unsafe_klass_knum,
  74.  
  75. /* It's NULL in non-1.4 JDKs. */
  76. StackTraceElement_klass_knum, java_lang_StackTraceElement_knum = StackTraceElement_klass_knum,
  77. /* Universe::is_gte_jdk14x_version( is not set up by this point. */
  78. /* It's okay if this turns out to be NULL in non-1.4 JDKs. */
  79. nio_Buffer_klass_knum, java_nio_Buffer_knum = nio_Buffer_klass_knum,
  80.  
  81. /* load boxing klasses */
  82. Boolean_klass_knum, java_lang_Boolean_knum = Boolean_klass_knum,
  83. Character_klass_knum, java_lang_Character_knum = Character_klass_knum,
  84. Float_klass_knum, java_lang_Float_knum = Float_klass_knum,
  85. Double_klass_knum, java_lang_Double_knum = Double_klass_knum,
  86. Byte_klass_knum, java_lang_Byte_knum = Byte_klass_knum,
  87. Short_klass_knum, java_lang_Short_knum = Short_klass_knum,
  88. Integer_klass_knum, java_lang_Integer_knum = Integer_klass_knum,
  89. Long_klass_knum, java_lang_Long_knum = Long_klass_knum, //68
  90. /*end*/
  91. WKID_LIMIT, //69
  92.  
  93. FIRST_WKID = NO_WKID + 1
  94. };

这个宏是之前是看不懂的,今天顺利的解决了,通过clion的replace R 功能,替换,先将代码写道一个cpp文件中,全部替换就行了

  1. public:
  2. enum WKID {
  3. NO_WKID = 0,
  4.  
  5. #define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
  6. WK_KLASSES_DO(WK_KLASS_ENUM)
  7. #undef WK_KLASS_ENUM
  8.  
  9. WKID_LIMIT,
  10.  
  11. FIRST_WKID = NO_WKID + 1
  12. };

这里非常重要的是

  1. #define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
    //

这个一行看成两部分,用  空格作为区分

jvm源码解读--10 enum WKID 枚举的更多相关文章

  1. JVM 源码解读之 CMS 何时会进行 Full GC

    t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触 ...

  2. jvm源码解读--17 Java的wait()、notify()学习

    write and debug by 张艳涛 wait()和notify()的通常用法 A线程取得锁,执行wait(),释放锁; B线程取得锁,完成业务后执行notify(),再释放锁; B线程释放锁 ...

  3. jvm源码解读--08 创建oop对象,将static静态变量放置在oop的96 offset处

    之前分析的已经加载的.Class文件中都没有Static 静态变量,所以也就没这部分的解析,自己也是不懂hotspot 将静态变量放哪里去了,追踪源码之后,看清楚了整个套路,总体上来说,可以举例来说对 ...

  4. jvm源码解读--16 cas 用法解析

    CAS的意思是campare and sweep比较交换 这个如果不用代码会比较抽象,那么在源码中进行解释 void ATTR ObjectMonitor::enter(TRAPS) { // The ...

  5. jvm源码解读--13 gc_root中的栈中oop的mark 和copy 过程分析

    粘贴源码 package com.test; import java.util.Random; public class Test { static int number=12; private in ...

  6. jvm源码解读--11 ldc指令的解读

    写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="a ...

  7. jvm源码解读--12 invokspecial指令的解读

    先看代码 package com.zyt.jvmbook; public class Girl extends Person{ public Girl() { int a; } @Override p ...

  8. jvm源码解读--06 Method 方法解析

    进入 // Methods bool has_final_method = false; AccessFlags promoted_flags; promoted_flags.set_flags(0) ...

  9. jvm源码解读--16 锁_开头

    现在不太清楚, public static void main(String[] args) { Object object=new Object(); System.out.println(&quo ...

随机推荐

  1. 可微渲染 SoftRas 实践

    SoftRas 是目前主流三角网格可微渲染器之一. 可微渲染通过计算渲染过程的导数,使得从单张图片学习三维结构逐渐成为现实.可微渲染目前被广泛地应用于三维重建,特别是人体重建.人脸重建和三维属性估计等 ...

  2. Linux命令基础(二)

    一.列表显示目录内容-ls 1.显示目录中内容,包括子目录和文件相关属性信息 ls(列表的形式去显示目录内容)                    [选项](可有可无的)              ...

  3. 聊一聊 Spring Boot 中 RESTful 接口设计规范

    在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...

  4. 【模拟8.01】string(线段树)

    因为题中只有a-z,所以区间中大量字母都是重复的,我们不妨利用桶的性质. 开一棵树,里面维护当前区间内的相同元素,若区间内元素不同,则为零 每次升序操作就先查询一遍区间,用桶将每个区间的a-z元素统计 ...

  5. noip2015 总结

    神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方:首先将1写在第一行的 ...

  6. C#调百度通用翻译API翻译HALCON的示例描述

    目录 准备工作 参数简介 输入参数 输出参数 使用HttpClient 翻译工具类 应用:翻译HALCON的示例描述 准备工作 HALCON示例程序的描述部分一直是英文的,看起来很不方便.我决定汉化一 ...

  7. 合肥某小公司面试题:Spring基础

    <对线面试官>系列目前已经连载25篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...

  8. MySql:CentOS7安装mysql后无法启动服务报错,(需要更新yum源)

    首先:需要更新你的yum源,保证yum源最新. 1.安装: yum install -y mariadb-server 2.启动maria DB服务: systemctl start mariadb. ...

  9. [心得体会]Spring容器的初始化

    1. Spring容器的初始化过程 public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {   ...

  10. fastposter发布1.4.2 跨语言的海报生成器

    fastposter发布1.4.2 跨语言的海报生成器 fastposter发布1.4.2 跨语言的海报生成器,一分钟完成海报开发 future: 完善docker镜像 引入异步asyncio 升级p ...