当前位置: 首页 > news >正文

常州免费企业网站建设一个网站做多少页面数量合适

常州免费企业网站建设,一个网站做多少页面数量合适,河南网站建设问一问公司,郑州看妇科最好的医院是哪里目录 Java堆溢出 常见原因#xff1a; 虚拟机栈和本地方法栈溢出 实验1#xff1a;虚拟机栈和本地方法栈测试#xff08;作为第1点测试程序#xff09; 实验2#xff1a;#xff08;作为第1点测试程序#xff09; 运行时常量池和方法区溢出 运行时常量池内存溢出 …目录 Java堆溢出 常见原因 虚拟机栈和本地方法栈溢出 实验1虚拟机栈和本地方法栈测试作为第1点测试程序 实验2作为第1点测试程序 运行时常量池和方法区溢出 运行时常量池内存溢出 方法区内存溢出 直接内存溢出 实验1本地内存的OOM 实验2直接通过 Unsafe 类申请本地内存 Java堆溢出 堆内存中主要存放对象、数组等只要不断地创建这些对象并且保证GC Roots到对象之间有可达路径来避免垃圾收集回收机制清除这些对象当这些对象所占空间超过最大堆容量时就会产生OutOfMemoryError的异常。 堆内存异常示例如下 /** * 设置最大堆最小堆-Xms20m -Xmx20m */ public class HeapOOM {static class OOMObject {}public static void main(String[] args) {ListOOMObject oomObjectList new ArrayList();while (true) {oomObjectList.add(new OOMObject());}} } 运行后会报异常在堆栈信息中可以看到 java.lang.OutOfMemoryError: Java heap space 的信息说明在堆内存空间产生内存溢出的异常。 新产生的对象最初分配在新生代新生代满后会进行一次Minor GC如果Minor GC后空间不足会把该对象和新生代满足条件的对象放入老年代老年代空间不足时会进行Full GC之后如果空间还不足以存放新对象则抛出OutOfMemoryError异常。 常见原因 内存中加载的数据过多如一次从数据库中取出过多数据集合对对象引用过多且使用完后没有清空代码中存在死循环或循环产生过多的重复对象堆内存分配不合理 虚拟机栈和本地方法栈溢出 由于HotSpot虚拟机中并不区分虚拟机栈和本地方法栈因此对于HotSpot来说-Xoss参数设置本地方栈大小虽然存在但实际上是没有任何效果的栈容量只能由-Xss参数来设定。 关于虚拟机栈和本地方法栈在《Java虚拟机规范》中描述了两种异常 1如果线程请求的栈深度大于虚拟机所允许的最大深度将抛出StackOverflowError异常。 2如果虚拟机的栈内存允许动态扩展当扩展栈容量无法申请到足够的内存时将抛出OutOfMemoryError异常。 《Java虚拟机规范》明确允许Java虚拟机实现自行选择是否支持栈的动态扩展而HotSpot虚拟机的选择是不支持扩展所以除非再创建线程申请内存时就因无法获得足够内存而出现OutOfMemoryError异常否则在线程运行时是不会因为扩展而导致内存溢出的只会因为栈容量无法容纳新的栈帧而导致StackOverflowError异常。 以下用两个实验验证一下(单线程下操作) 是否能让HotSpot虚拟机产生OutOfMemoryError异常使用-Xss参数减少栈内存容量。 结果抛出StackOverflowError异常异常出现时输出的堆栈深度相应缩小。定义大量的本地变量增大此方法帧中本地变量表的长度。 结果抛出StackOverflowError异常异常出现时输出的堆栈深度相应缩小。 实验1虚拟机栈和本地方法栈测试作为第1点测试程序 /** * VM Args -Xss128k */ public class JavaVMStackSOF {private int stackLength 1;public void stackLeak() {stackLength;stackLeak();}public static void main(String[] args) throws Throwable {JavaVMStackSOF oom new JavaVMStackSOF();try {oom.stackLeak();} catch (Throwable e) {System.out.println(stack length: oom.stackLength);throw e;}} } 结果 实验2作为第1点测试程序 public class JavaVMStackSOF {private static int stackLength 0;public static void test() {long unused1, unused2, unused3, unused4, unused5,unused6, unused7, unused8, unused9, unused10,unused11, unused12, unused13, unused14, unused15,unused16, unused17, unused18, unused19, unused20,unused21, unused22, unused23, unused24, unused25,unused26, unused27, unused28, unused29, unused30,unused31, unused32, unused33, unused34, unused35,unused36, unused37, unused38, unused39, unused40,unused41, unused42, unused43, unused44, unused45,unused46, unused47, unused48, unused49, unused50,unused51, unused52, unused53, unused54, unused55,unused56, unused57, unused58, unused59, unused60,unused61, unused62, unused63, unused64, unused65,unused66, unused67, unused68, unused69, unused70,unused71, unused72, unused73, unused74, unused75,unused76, unused77, unused78, unused79, unused80,unused81, unused82, unused83, unused84, unused85,unused86, unused87, unused88, unused89, unused90,unused91, unused92, unused93, unused94, unused95,unused96, unused97, unused98, unused99, unused100;stackLength ;test();unused1 unused2 unused3 unused4 unused5 unused6 unused7 unused8 unused9 unused10 unused11 unused12 unused13 unused14 unused15 unused16 unused17 unused18 unused19 unused20 unused21 unused22 unused23 unused24 unused25 unused26 unused27 unused28 unused29 unused30 unused31 unused32 unused33 unused34 unused35 unused36 unused37 unused38 unused39 unused40 unused41 unused42 unused43 unused44 unused45 unused46 unused47 unused48 unused49 unused50 unused51 unused52 unused53 unused54 unused55 unused56 unused57 unused58 unused59 unused60 unused61 unused62 unused63 unused64 unused65 unused66 unused67 unused68 unused69 unused70 unused71 unused72 unused73 unused74 unused75 unused76 unused77 unused78 unused79 unused80 unused81 unused82 unused83 unused84 unused85 unused86 unused87 unused88 unused89 unused90 unused91 unused92 unused93 unused94 unused95 unused96 unused97 unused98 unused99 unused100 0;}public static void main(String[] args) {try {test();}catch (Error e){System.out.println(stack length: stackLength);throw e;}} } 结果 运行时常量池和方法区溢出 由于运行时常量池是方法区的一部分所以这两个区域的溢出测试可以放到一起进行。 String::intern()是一个本地方法它的作用是如果字符串常量池中已经包含一个等于此String对象的 字符串则返回代表池中这个字符串的String对象的引用否则会将此String对象包含的字符串添加到常量池中并且返回此String对象的引用。 在JDK 6或更早之前的HotSpot虚拟机中常量池都是分配在永久代中我们可以通过-XXPermSize和-XXMaxPermSize限制永久代的大小 即可间接限制其中常量池的容量。运行时常量池内存溢出 /** * VM Args -XX:PermSize6M -XX:MaxPermSize6M */ public class RuntimeConstantPoolOOM {public static void main(String[] args) {// 使用Set保持着常量池引用 避免Full GC回收常量池行为SetString set new HashSetString();// 在short范围内足以让6MB的PermSize产生OOM了short i 0;while (true) {set.add(String.valueOf(i).intern());}} } 运行结果Exception in thread main java.lang.OutOfMemoryError: PermGen space at java.lang.String.intern(Native Method) at org.fenixsoft.oom.RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java: 18) 从运行结果中可以看到运行时常量池溢出时在OutOfMemoryError异常后面跟随的提示信息 是“PermGen space”说明运行时常量池的确是属于方法区即JDK 6的HotSpot虚拟机中的永久代 的 一部分。而使用JDK 7或更高版本的JDK来运行这段程序并不会得到相同的结果无论是在JDK7中继续使 用-XXMaxPermSize参数或者在JDK 8及以上版本使用-XXMaxMeta-spaceSize参数把方法区容量同 样限制在6MB也都不会重现JDK 6中的溢出异常循环将一直进行下去永不停歇。 出现这种变化是因为自JDK 7起原本存放在永久代的字符串常量池被移至Java堆之中所以在JDK 7及以上版本限制方法区的容量对该测试用例来说是毫无意义的。 这时候使用-Xmx参数限制最大堆到6MB就能够看到以下两种运行结果之一具体取决于哪里的对象分配时产生了溢出 // OOM异常一 Exception in thread main java.lang.OutOfMemoryError: Java heap space at java.base/java.lang.Integer.toString(Integer.java:440) at java.base/java.lang.String.valueOf(String.java:3058) at RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java:12) // OOM异常二 //根据Oracle官方文档默认情况下如果Java进程花费98%以上的时间执行GC并且每次只有不到2%的堆被恢复则JVM抛出此错误 Exception in thread main java.lang.OutOfMemoryError: GC overhead limit exceeded at java.lang.Integer.toString(Integer.java:401) at java.lang.String.valueOf(String.java:3099) at com.lagou.unit.RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java:17) 方法区内存溢出 方法区的其他部分的内容方法区的主要职责是用于存放类型的相关信息如类名、访问修饰符、常量池、字段描述、方法描述等。 对于这部分区域的测试基本的思路是运行时产 生大量的类去填满方法区直到溢出为止。 虽然直接使用Java SE API也可以动态产生类如反射时的 GeneratedConstructorAccessor和动态代理等。 HotSpot还是提供了一 些参数作为元空间的防御措施 主要包括-XXMaxMetaspaceSize设置元空间最大值默认是-1即不限制或者说只受限于本地内存 大小 -XXMetaspaceSize指定元空间的初始空间大小以字节为单位达到该值就会触发垃圾收集进行类型卸载同时收集器会对该值进行调整如果释放了大量的空间就适当降低该值如果释放了很少的空间那么在不超过-XXMaxMetaspaceSize如果设置了的话情况下适当提高该值。 XXMinMetaspaceFreeRatio作用是在垃圾收集之后控制最小的元空间剩余容量的百分比可减少因为元空间不足导致的垃圾收集的频率。 -XXMax-MetaspaceFreeRatio用于控制最 大的元空间剩余容量的百分比。 直接内存溢出 直接内存也可能导致OutofMemoryError异常由于直接内存在Java堆外因此它的大小不会直接受限于-Xmx指定的最大堆大小但是系统内存是有限的Java堆和直接内存的总和依然受限于操作系统能给出的最大内存直接内存的缺点为 分配回收成本较高不受JVM内存回收管理直接内存大小可以通过MaxDirectMemorySize设置如果不指定默认与堆的最大值-Xmx参数值一致 实验1本地内存的OOM /*** 本地内存的OOM: OutOfMemoryError: Direct buffer memory*/ public class BufferTest1 {private static final int BUFFER 1024 * 1024 * 20; //20MBpublic static void main(String[] args) {ArrayListByteBuffer list new ArrayList();int count 0;try {while(true){ByteBuffer byteBuffer ByteBuffer.allocateDirect(BUFFER);list.add(byteBuffer);count;try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}} finally {System.out.println(count);}} } 本地内存持续增长直至程序抛出异常java.lang.OutOfMemoryError: Direct buffer memory 实验2直接通过 Unsafe 类申请本地内存 Unsafe 类在 sun.misc 包下不属于 Java 标准。 /*** 设置JVM参数 -Xmx20m -XX:MaxDirectMemorySize10m*/ public class MaxDirectMemorySizeTest {private static final long _1MB 1024 * 1024;public static void main(String[] args) throws IllegalAccessException {Field unsafeField Unsafe.class.getDeclaredFields()[0];unsafeField.setAccessible(true);Unsafe unsafe (Unsafe)unsafeField.get(null);while(true){unsafe.allocateMemory(_1MB);}} } 作者筱白爱学习 欢迎关注转发评论点赞沟通您的支持是筱白的动力
http://www.dnsts.com.cn/news/194438.html

相关文章:

  • 手机壁纸网站源码餐饮管理培训课程
  • 网站建设中的图片及视频要求做网站接私单
  • 重庆做网站做得好的公司短视频推广引流方案
  • 济南做网站哪家好免费学做淘宝的网站
  • 网站公司怎么做业务wordpress省理工大学
  • 企业做网站需要哪些人员网站建设 推神网络
  • 北京网站建设首选石榴汇郑州有哪些搞网站开发的公司
  • 深圳商业网站建设怎么样建设银行网站用什么字体
  • 网站公司网站开发网页代码用什么软件
  • 网站做成app需要多少钱上海做网站比较好的公司
  • 兰州怎么提高网站的排名关注公众号一单一结兼职app
  • 外贸网站建设软件宜春市城市建设网站
  • 多语言网站是怎么做的北京企业官网网站建设报价
  • 产品 网站建设wordpress数据库主机名
  • 找马云做网站私域平台运营分为几个步骤
  • 外贸网络推广平台哈尔滨网站优化指导
  • 建站平台白之家低成本做网站
  • 济南网站开发互联网推广
  • 石家庄网站编辑建网站域名后怎样做
  • 房屋装修简约风格企业seo排名服务
  • 苏州企业网站建设专家wordpress 文章标题
  • 做网站还是博客asp网站js悬浮窗怎么做
  • 做一个家乡网站有什么可以做一般家庭装修照片
  • 福州网站建设方案推广用个人的信息备案网站
  • 南宁网站制作策划微信微商城怎么做
  • 杭州建设网站公司沙井网站开发
  • 商城网站开发报价微商城网站建设方案
  • 西安网站建设系统开发共同建设网站心得
  • 做影视网站挣钱吗小红书的网络营销方法
  • 做网站会遇到哪些问题公司注册地址和经营地址不一致可以吗