jvm 内存溢出 - 方法区及运行时常量池溢出

0

Java 永久代是非堆内存的组成部分,用来存放类名、访问修饰符、常量池、字段描述、方法描述等,因运行时常量池是方法区的一部分,所以这里也包含运行时常量池。我们可以通过 jvm 参数 -XX:PermSize=10M -XX:MaxPermSize=10M 来指定该区域的内存大小,-XX:PermSize 默认为物理内存的 1/64 ,-XX:MaxPermSize 默认为物理内存的 1/4 。String.intern() 方法是一个 Native 方法,它的作用是:如果字符串常量池中已经包含一个等于此 String 对象的字符串,则返回代表池中这个字符串的 String 对象;否则,将此 String 对象包含的字符串添加到常量池中,并且返回此 String 对象的引用。在 JDK 1.6 及之前的版本中,由于常量池分配在永久代内,我们可以通过 -XX:PermSize-XX:MaxPermSize 限制方法区大小,从而间接限制其中常量池的容

jvm 内存溢出 - 方法栈溢出

0

Java 程序中堆栈( Stack Space )用来做方法的递归调用时压入栈帧( Stack Frame ),每个线程都有自己的堆栈,这个堆栈不是来自 Heap 的分配。所以堆栈的大小不会受到 -Xmx-Xms 的影响,这2个 JVM 参数仅仅是影响 Heap 的大小。虚拟机参数 -Xss 用来指定每个线程的堆栈大小,设定该值后,当递归调用太深的时候,就有可能耗尽堆栈空间,爆出 StackOverflow 的错误,我们使用如下代码做实验:

Centos 下调整 java 时区

0
文章没有摘要信息,添加摘要需要在文章中加入<!-- more -->标记,标记之前内容为摘要

VisualVM - Java 应用运行监视与故障处理程序

0

VisualVM(All-in-One Java Troubleshooting Tool) 是随 JDK 发布的一款功能强大的运行监视和故障处理程序。除了运行监视、故障处理之外,它还提供了性能分析等其他功能。与其他功能相比,VisualVM 不需要被监视程序基于特殊的 Agent 运行,因此他对应用程序的实际性能影响很小,使得它可以直接应用在生产环境中。

Java 类、变量加载顺序

0
文章没有摘要信息,添加摘要需要在文章中加入<!-- more -->标记,标记之前内容为摘要

Java 访问修饰符总结

0
文章没有摘要信息,添加摘要需要在文章中加入<!-- more -->标记,标记之前内容为摘要

Java 垃圾回收 - 方法区回收

0

很多人认为方法区(或者 HotSpot 虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区中进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收 70%~95% 的空间,而永久代的垃圾收集效率远低于此。

Centos7 下编译 Openjdk8

0

本文主要介绍如何在 Centos7 下编译 Openjdk8 源码,《深入理解java虚拟机》第二版网上好多 openjdk7 的帖子,编译 jdk8 和 7 还是有些差别的,比如大家经常提到的 make sanity 在 jdk8 源码里是没有的,下面我们一步步编译 openjdk8。

Java 对象的内存分配策略

0

本文主要通过几个简单的例子介绍 Java 对象的内存分配策略。

Java 垃圾回收 - 垃圾回收算法

0

本文主要介绍几种常用的垃圾回收算法:标记 - 清除算法、复制算法、标记 - 整理算法、分代收集算法。