OpenJDK9 Hotspot 虚拟机内部对象内存管理

发布时间:2019-06-14 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了OpenJDK9 Hotspot 虚拟机内部对象内存管理脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

C++ 语言可以精确控制对象内存分配,出于性能考虑 C++ 框架 or 系统程序基本都会自己 "造轮子" 开发各种内存管理模块. hotspot 也不例外,它通过 new 和 delete 方法的访问级别以及重载 new 和 delete 方法来管理虚拟机内部 C++ 对象的内存.

内存管理相关的基类

hotspot 定义了几个基类来作为大部分 C++ 对象的基类:

  • StackObj

  • _ValueObj

  • MetaspaceObj

  • Allstatic

StackObj

StackObj 顾名思义,它们只能在 栈 上分配,StackObj 将 new 和 delete 运算符申明成 PRivate 禁止外部访问,外部类尝试在堆上分配 StackObj 类型的对象都会编译期报错,内部在调用 new,delete 会抛出异常

// allocation.hpp

class StackObj ALLOCATION_SUPER_CLASS_SPEC {
 private:
  void* operator new(size_t size) throw();
  void* operator new [](size_t size) throw();
#ifdef __IBMCPP__
 public:
#endif
  void  operator delete(void* p);
  void  operator delete [](void* p);
};

_ValueObj

// allocation.hpp

class _ValueObj {
 private:
  void* operator new(size_t size) throw();
  void  operator delete(void* p);
  void* operator new [](size_t size) throw();
  void  operator delete [](void* p);
};

MetaspaceObj

MetaspaceObj 是所有在 meta space(元对象空间?)对象的基类,调用 delete 函数进行析构会抛出异常

// allocation.hpp

class MetaspaceObj {
    ...
    void* operator new(size_t size, ClassLoaderData* loader_data,
                       size_t word_size, bool read_only,
                       Type type, Thread* thread) throw();
                       // can't use TRAPS From this header file.
    void operator delete(void* p) { ShouldNotCallThis(); }
}

AllStatic

AllStatic 类及其子类的所有字段和方法都是 static 类型的,所以在 构造 和 析构 函数中直接抛出异常

// allocation.hpp

class AllStatic {
 public:
  AllStatic()  { ShouldNotCallThis(); }
  ~AllStatic() { ShouldNotCallThis(); }
};

总结

脚本宝典总结

以上是脚本宝典为你收集整理的OpenJDK9 Hotspot 虚拟机内部对象内存管理全部内容,希望文章能够帮你解决OpenJDK9 Hotspot 虚拟机内部对象内存管理所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。