小编Mic*_*ael的帖子

如何解释"jmap -permstat"的输出?

我正在尝试解决permgen泄漏问题,并想问你们大家如何解释jmap -permstat的输出.

假设我有一个jmap -permstat报告,如下所示:

class_loader        classes  bytes     parent_loader       alive?  type

<bootstrap>            4791  25941568                null   live  <internal>
0x00000007203ed508        0         0  0x00000007203ed228   dead  com/example/object/SomeObjectType$FirstClassLoader@0x0000000something1
0x000000071dc17620        1      3056  0x0000000705e692a8   dead  sun/reflect/DelegatingClassLoader@0x0000000something4
0x000000071f26a898        0       100                null   dead  com/example/object/SomeClassLoader@0x0000000something3
0x0000000721c6dba0        0       100                null   dead  com/example/object/SomeClassLoader@0x0000000something3
0x000000071e36df20        0       100                null   dead  com/example/object/SomeClassLoader@0x0000000something3
0x000000072157c1b8      339   2069112  0x000000072157b8d8   dead  com/example/object/SomeObjectType$SecondClassLoader@0x0000000something2
0x00000007128b7830        1      1912  0x0000000700056db8   dead  sun/reflect/DelegatingClassLoader@0x0000000something4
0x0000000707634360        1      3088  0x0000000700056db8   dead  sun/reflect/DelegatingClassLoader@0x0000000something4
Run Code Online (Sandbox Code Playgroud)

以下是我将如何解释上述输出 - 请更正我在此过程中所犯的任何错误.

"类型"列中的值不是唯一的.我们看到一些出现三次的物体.但是,class_loader值在所有三个中都是唯一的; 因此,它们中的每一个都是一个独特的对象,占据了permgen空间.在这个例子中,每个占用100个字节; 因此,SomeClassLoader类型的对象占用了300字节的permgen空间.

如果classes值为非零,则此对象必须是某种类加载器,并且这指的是它引用的类的数量.(注意:在实际文件中,这三个对象在bytes列中都有零;我为这个例子添加了值.在实际操作中,我猜测如果classes列中有0,那就没办法了bytes值可以是零.)

如果alive值为"dead",则表示该对象已准备好进行垃圾回收,但JVM没有这样做.对于可能出现这种情况的原因,需要单独讨论.

如果parent_loader列中有一个值,那么这是一个由另一个类加载器引用的对象,并且在该对象被垃圾回收之前不能进行垃圾回收.

最后:1)如果我在报告中看到所有列出相同类型的500行,2)但是它们列出了不同的class_loader值,3)然后我可以在字节列4)中添加值,这将准确地表示多少permgen空间被该类型的对象占用.

它是否正确?谢谢!

java permgen jmap

15
推荐指数
1
解决办法
6702
查看次数

如何处理 REST API 中的更新?

我想要一些关于使用 RESTful API 执行写入的方法的观点。对于这个例子,假设一个 Person 对象:

{
    "id": 1,
    "name": "Example Person",
    "addresses": [
        {
            "id": 11,
        }
    ],
    "friends": [
        {
            "id": 21,
            "name": "John"
        }
    ]    }
Run Code Online (Sandbox Code Playgroud)

有一个 /people API 可以提供这样的对象。你可以 GET /people/123 来检索上面的例子。不过,我担心的是写作。传统上,通过 REST API 更新这样的对象是通过向 /people/123 发送带有对象新状态的 PATCH 或 PUT 来完成的。但是,您可能会在更新中执行一项或多项操作:

  • 更改人名
  • 更新现有地址
  • 增加一个新地址
  • 删除地址
  • 更新现有朋友
  • 将现有人员添加为新朋友
  • 停止与某人成为朋友

每一个都是不同的动作,可能有不同的逻辑与之关联。例如,如果有人将您添加为朋友,您应该收到有关它的通知,而添加地址不应生成任何类型的通知。

在与 REST API 通信时,发送要采取的操作列表而不是仅发送对象的新状态并要求 API 确定用户打算基于此执行的操作是否有价值?

api rest

1
推荐指数
1
解决办法
3577
查看次数

标签 统计

api ×1

java ×1

jmap ×1

permgen ×1

rest ×1