diff --git a/src/java.base/share/classes/java/lang/invoke/CallSite.java b/src/java.base/share/classes/java/lang/invoke/CallSite.java
index e159e235f30a3..ec002e1fc460a 100644
--- a/src/java.base/share/classes/java/lang/invoke/CallSite.java
+++ b/src/java.base/share/classes/java/lang/invoke/CallSite.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,9 +40,9 @@
  * In any case, it may be invoked through an associated method handle
  * called its {@linkplain #dynamicInvoker dynamic invoker}.
  * <p>
- * {@code CallSite} is an abstract class which does not allow
+ * {@code CallSite} is an abstract sealed class which does not allow
  * direct subclassing by users.  It has three immediate,
- * concrete subclasses that may be either instantiated or subclassed.
+ * concrete non-sealed subclasses that may be either instantiated or subclassed.
  * <ul>
  * <li>If a mutable target is not required, an {@code invokedynamic} instruction
  * may be permanently bound by means of a {@linkplain ConstantCallSite constant call site}.
@@ -85,7 +85,7 @@ private static CallSite bootstrapDynamic(MethodHandles.Lookup caller, String nam
  * @since 1.7
  */
 public
-abstract class CallSite {
+abstract sealed class CallSite permits ConstantCallSite, MutableCallSite, VolatileCallSite {
 
     // The actual payload of this call site.
     // Can be modified using {@link MethodHandleNatives#setCallSiteTargetNormal} or {@link MethodHandleNatives#setCallSiteTargetVolatile}.
diff --git a/src/java.base/share/classes/java/lang/invoke/ConstantCallSite.java b/src/java.base/share/classes/java/lang/invoke/ConstantCallSite.java
index e2e3f478a3c86..29e557ad141b2 100644
--- a/src/java.base/share/classes/java/lang/invoke/ConstantCallSite.java
+++ b/src/java.base/share/classes/java/lang/invoke/ConstantCallSite.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@
  * @author John Rose, JSR 292 EG
  * @since 1.7
  */
-public class ConstantCallSite extends CallSite {
+public non-sealed class ConstantCallSite extends CallSite {
     private static final Unsafe UNSAFE = Unsafe.getUnsafe();
 
     @Stable // should NOT be constant folded during instance initialization (isFrozen == false)
diff --git a/src/java.base/share/classes/java/lang/invoke/MutableCallSite.java b/src/java.base/share/classes/java/lang/invoke/MutableCallSite.java
index c16483d02ae5e..50ba77d8f96f9 100644
--- a/src/java.base/share/classes/java/lang/invoke/MutableCallSite.java
+++ b/src/java.base/share/classes/java/lang/invoke/MutableCallSite.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -83,7 +83,7 @@
  * @author John Rose, JSR 292 EG
  * @since 1.7
  */
-public class MutableCallSite extends CallSite {
+public non-sealed class MutableCallSite extends CallSite {
     /**
      * Creates a blank call site object with the given method type.
      * The initial target is set to a method handle of the given type
diff --git a/src/java.base/share/classes/java/lang/invoke/VolatileCallSite.java b/src/java.base/share/classes/java/lang/invoke/VolatileCallSite.java
index 742fa23737d02..faf10fd79f493 100644
--- a/src/java.base/share/classes/java/lang/invoke/VolatileCallSite.java
+++ b/src/java.base/share/classes/java/lang/invoke/VolatileCallSite.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,7 +42,7 @@
  * @author John Rose, JSR 292 EG
  * @since 1.7
  */
-public class VolatileCallSite extends CallSite {
+public non-sealed class VolatileCallSite extends CallSite {
     /**
      * Creates a call site with a volatile binding to its target.
      * The initial target is set to a method handle