Skip to content

Is it possible to implements the GC by using visitor pattern ? #9

@xiaoma20082008

Description

@xiaoma20082008

code maybe like this:

class JavaTypeVisitor;
struct JavaType {
  // ... other fields
  virtual void accept(JavaTypeVisitor* visitor) = 0;
};
struct JavaInt : public JavaType {
  virtual void accept(JavaTypeVisitor* visitor) override;
};

struct JavaLong : public JavaType {
  virtual void accept(JavaTypeVisitor* visitor) override;
};

struct JavaObject : public JavaType {
  virtual void accept(JavaTypeVisitor* visitor) override;
};

// ... other JavaType struct definitions

// visitor
class JavaTypeVisitor {
public:
  virtual void visit(JavaInt* ji) = 0;
  virtual void visit(JavaLong* jl) = 0;
  virtual void visit(JavaObject* jo) = 0;
  // ... visit other JavaTypes
};

// region gc

class GC {
public:
  virtual void gc() = 0;
protected:
  // ... some fields
};

class CMS_GC : public GC, public JavaTypeVisitor {
// ... some implementations
};

class G1_GC : public GC, public JavaTypeVisitor {
// ... some implementations
};

// ... other GC Implementation, eg: zgc

// endregion gc

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions