zoukankan      html  css  js  c++  java
  • JVM内存学习

    转帖

    http://blog.csdn.net/cutesource/article/details/5904501

    http://sesame.iteye.com

    买本 java jvm的书

    /blog/353242

    jvm 内存图

     

    java 内存:
    堆,方法区(这2个是线程共享的,会出现线程不安全的问题)
    栈,pc,本地方法区(线程独享不会出现安全问题)
     
    static int i =10 ;在 方法区中。
     
    线程部分
    线程池的最大多少和最小多少的区别?
     
    线程池解决了java创建线程和销毁线程所浪费的时间。
    多个线程池的坏处?
     

    线程用方法区的时候,只是复制一份,到自己的栈帧里,用完以后,再同步回去。

    Java stack以帧为单位保存线程的运行状态。

    每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果。所以一个方法被多个线程执行的时候,临时变量、参数和中间结果不用考虑同步问题。

    Heap
    Java程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java虚拟实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个java程序独占一个JVM实例,因而每个java程序都有它自己的堆空间,它们不会彼此干扰。但是同一java程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对象(堆数据)的同步问题。 (这里可能出现的异常java.lang.OutOfMemoryError: Java heap space)

    Program counter
    每个运行中的Java程序,每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的饿“地址”,这里的“地址”可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

    内存优化:

    在Java垃圾收集机制中的Minor GC和Full GC分别指什么,有和不同?
    答:Minor GC是指新生代GC,是发生在新生代的垃圾收集动作,因为Java对象大多都具有“朝生夕灭”的特性,所以Minor GC非常频繁,一般回收速度也比较快;Full GC(也称为Major GC)是指老年代的GC,Full GC的速度一般会比Minor GC慢10倍以上。


    相关知识扩展:虚拟机一般提供参数-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前内存各区域的分配情况。在实际应用中,内存回收日志一般是打印到文件后通过日志工具进行分析。

    对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。

    j2me游戏loading的过程必然需要进行次Full GC。

  • 相关阅读:
    细心也是一种态度
    EDM数据访问的三种方式
    如何快速提交网站备案 ICP备案
    c# winform 关于给静态全局变量赋值的问题
    c#DIY随机数类winform 2010
    手把手教你如何用IIS搭建手机WAP网站(图文)
    admin密码对应的MD5值,16位和32位,admin解密自己留着方便.
    C#实现MD5加密,winform c#2005
    最全的c#日期函数 winform
    如何解决因网站备案号没下来而网站被迫关闭的办法
  • 原文地址:https://www.cnblogs.com/chuckTsao/p/2969236.html
Copyright © 2011-2022 走看看