初次接触weblogic便被它强大的功能所折服。
关于如何安装和配置weblogic度娘上有很多的介绍,这里就不再赘述了。
可以参考以下链接:
http://blog.csdn.net/hackage4619/article/details/55189106
————————————————————————————————–常见的内存溢出介绍———————————————————————————————————-
    
     导致
    
    OutOfMemoryError异常的常见原因有以下几种:
   
    1.
    
     内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
    
   
    2.
    
     集合类中有对对象的引用,使用完后未清空,使得
    
    JVM不能回收;
   
    3.
    
     代码中存在死循环或循环产生过多重复的对象实体;
    
   
    4.
    
     使用的第三方软件中的
    
    BUG;
   
    5.
    
     启动参数内存值设定的过小;
    
   
    
     此错误常见的错误提示:
    
   
1. tomcat:java.lang.OutOfMemoryError: PermGen space
2. tomcat:java.lang.OutOfMemoryError: Java heap space
3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
4. resin:java.lang.OutOfMemoryError
5. java:java.lang.OutOfMemoryError
   —————————————————————————————————————————————————————————————————————————————
   
正餐来了,当安装和配置完weblogic以后满怀欣喜的部署了项目想要一睹芳容,尼玛怎么也跑不起来,控制台报错如下:
java.lang.OutOfMemoryError: PermGen space
这个错误很明显是内存溢出,通过一番查找后终于找到了修改的地方,因为使用的是myeclipse继承weblogic,解决方法如下:
    
   
知其然必要知其所以然,下面介绍下配置参数的一些含义:
    
     
      -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
      
      -vmargs 说明后面是JVM的参数,所以后面的其实都是JVM的参数了
     
     
      
     
    
   
    
     
      -Xms128m JVM
      
       初始分配的堆内存
      
     
     
      
     
     
      -Xmx512m JVM
      
       最大允许分配的堆内存,按需分配
      
     
     
      
     
     
      -XX:PermSize=64M JVM
      
       初始分配的非堆内存
      
     
     
      
     
     
      -XX:MaxPermSize=128M JVM
      
       最大允许分配的非堆内存,按需分配
      
     
    
   
    
     
      
       
      
     
    
   
    
     
      
       那么问题又来了,什么是堆什么是非堆呢?
      
     
    
   
    
     
      
       ————————————————初识java内存概念——————————————————————–
       
      
     
    
   
    
     
      
       下图是之前自己学习时整理的笔记,讲的比较浅显。
      
     
    
   
    
     
      
       ①
       
        
         
          什么是栈?
         
        
       
       什么是堆?什么是方法区?
      
     
    
   
    
     
      
       答:
      
     
    
   
    
     
      
       栈:用于存放局部变量
      
     
    
   
    
     
      
       堆:存放new出来的对象
      
     
    
   
    
     
      
       方法区:存放类的信息(代码)、static变量、常量池等   //注:方法区也是属于堆的一部分
      
     
    
   
    
     
      
      
     
    
   
    解析
    
     Student s1=new Student()在内存中的分配
    
    
     过程
    
   
    1
    
     、
    
    
     jvm
    
    
     执行到
    
    
     Student
    
    
     ,首先在堆中查找是不是有这个类的信息,没有就通过类加载器把这个类的信息(属性和方法等)加载进堆中。
    
   
    2
    
     、执行
    
    
     Student s1
    
    
     在栈中分配空间存放变量
    
    
     s1
    
    
     。(此时这个变量并没有指向其他内存空间)
    
   
    3
    
     、执行
    
    
     new Student()
    
    
     ,在堆中的方法区外分配一片内存存放
    
    
     new
    
    
     出来的对象信息(对象的方法只是存放地址指向方法区里面的方法)
    
   
    4
    
     、执行
    
    
     =
    
    
     赋值,将
    
    
     new
    
    
     出来的对象的内存空间的首地址赋给
    
    
     s1
    
    
     。
    
   
    
     内存分析示意图:
    
   
    
    
   
————————————————————————————————————————————
    
     
      
       
      
     
    
   
    
     
      
       ——————————————————JVM内存进阶——————————————————————-
      
     
    
   
    
     
      
       现在我们队堆的概念有了一个大概的了解,那么回到上面的问题,什么是非堆呢?
       
      
     
    
   
    
     
      
       其实这里是个叫法的不同,非堆其实指的就是上面的方法区。
      
     
    
   
    
     
      
       关于这一部分的内容,小白就不说自己的感悟了(怕误导大家),在度娘上看了位大神的博客觉得甚是牛逼(ps:虽然我看得一知半解):
      
     
    
   
    
     
      
       附上链接地址:http://www.cnblogs.com/dingyingsi/p/3760447.html
       
      
     
    
   
    
     
      
       有兴趣的朋友可以看看,说的真的很好。
      
     
    
   
    
     
      
       在这也感谢下这位大牛分享的姿势。。。fuck。。知识。—做人不能太污啊
       
       
      
     
    
   
    
     
      
       ————————————————————————————————————————————
       
      
     
    
   
    
     
      
       最后总结:码海无涯,回头也不是岸啊
       
       
      
     
    
   
 
