深入java虚拟机

来源:互联网 发布:windows phone 7.8 编辑:程序博客网 时间:2024/06/06 03:05

1.jvm的相关概念

       当List放了大量的数据超过jvm中所能容纳的内存后,就会发生堆溢出.当递归调用 的没有临界退出条件就会出现栈溢出.

       当批量导入大量数据或者用dom4j解析大的xml文件的时候,就会出现堆溢出,这个时候可以通过分段批量提交以及用sax代替dom4j来解决问题.

      heap(堆)     ,stack(栈).


2.jvm的结构细分及其概述.

       java虚拟机有一个堆,堆是运行时数据区域,

所有的类实例和数组的内存均从此处分配堆是在java虚拟机启动时创建的. ''在JVM中堆之外的内存称为非堆内存'',可以看出JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是java代码可及的内存,是留给开发人员使用的;非堆就是jvm留给自己用的.


3.jvm内存结构?

       堆:逻辑上是连续,物理上可以出于不连续的内存空间中,里面存储的是对对象实例以及数组.可以细分为新生代,老生代.通过-Xmx和-Xms控制大小.

        虚拟机栈:基本数据类型,对象引用(地址,指针).

        本地方法栈:他与虚拟机栈发挥的作用差不多,区别在于虚拟机栈为java方法的执行提供服务,而本地方法栈为虚拟机使用到Native方法服务.


4.方法区

       放了所加载的类的信息,类中的静态变量.

        类中定义为final类型的常量,类中的Filed信息,类中的方法信息,

        在Sun JDK 中这块区域对应的为permanetGeneration,又称为持久化,

        默认为64M,可通过-XX:permSize以及-XX:MaxPerSize来指定其大小


5.常量池也是方法区的一部分

       用来存储常量信息.如String就存储在常量池中.


6.jvm内存限制

         jvm内存的最大值跟操作系统有很大的关系.

简单来说32处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB,而64bit以上的处理器就不会有限制了.


7.jvm调忧

         开启-Server模式 ,增大堆的大小,以及持久化的大小,从而体改程序的运行效率,并且将初始堆的大小和最大堆的大小设置为一样的值从而避免了堆增长会带来额外压力.持久化大小的设置同理,也设置为初始化大小和最大大小一样大.


8.jvm的生命周期

        生命周期:加载,链接,初始化,使用,卸载.对象基本都是在jvm堆区中创建,在创建对象之前,会触发类加载,当类加载初始化完成后,根据类信息在堆中实例化类对象,初始化非静态变量,非静态代码以及默认构造方法,当对象使用完之后会在何时的时候被jvm垃圾回收机制回收.

        要经过三步:加载,链接,准备,解析三步


9.linux中的命令

        ps-ef 丨 grep:查看进程信息

         vi:文件编辑命令

         more:分页查看命令

         top:常用的性能分析工具,能够实时显示系统中各个继承的资源占用状况

         ifconfig:显示或配置网络设备的命令

         ping:它通常用来测试与目标主机的连通性


   简单的阐述到此结束,希望大家提出宝贵建议!




2 0