zoukankan      html  css  js  c++  java
  • jvm(1)

    学到jvm一头雾水,不知道是干啥用的。后来度娘了一下,有点了解了,大概意思就是说用java编写的源代码,要经过jdk这个工具进行编辑,编译成java虚拟机可以识别的语言,才可以运行。初步了解是这么个意思。

    jvm是java程序运行的环境,有自己运行的生命周期

    想要了解jvm和内存溢出有什么关系,先了解一下什么是内存溢出

    内存溢出:就是你要求分配的java虚拟机的内存超出了系统给你的,系统不能满足,所以溢出。

    内存泄露:指你向系统申请的分配的内存进行使用,可以使用完了又没有进行归还,没有delete,结果被申请分配的那块内存自己也不能再访问,无法再被重新使用,随着服务器不断的消耗内存,会产生无法使用的内存会越来越多,系统也不能将他在分配给其他的需要程序去使用,产生内存泄露,一直下去,程序无内存使用,就会产生内存溢出。

    sun jdk遵照jvm规范,将内存划分为方法区、堆、jvm方法栈、本地方法栈和pc寄存器

    方法区:存放要加载的类和接口的信息,static变量、常量、通过class对象获取的相关数据,这块区域成为持久带,默认最小值16mb,最大值64mb,可通过-xx:permsize 及 xx:maxpermsize 来设置最大值和最小值

    堆:heap memory,存放实例和数组值,heap中的对象所占用的内存由gc进行回收,在32位系统中最大为2G,64位系统大小无限制,可通过-xms 和-xmx控制,-xms是jvm启动时申请的最小的heap内存,-xmx是jvm可申请的最大的内存。

    方法栈:每个线程都对创建pc寄存器和方法栈,方法栈为线程私有,放方法运行完毕后,该方法的站贞所占用的空间会自动释放,方法栈空间不足,可通过-xss进行设置

    新生代由伊甸园区和两个大小相同的survivor space构成,可通过-xmn制定新生代的大小,

    对象由新生代创建,在伊甸园区进行存放数据,当伊甸园区满了的时候,jvm垃圾回收器对其进行回收,不被使用的对象将对其进行销毁,仍然被使用的对象转移到s0区,s0区满后,转移到s1区。

    旧生代中存放经过多次垃圾回收后仍然被使用存活的对象,例如缓存对象,占用大小为,xmx值-xmn的值

  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/jsh-tianshi/p/3956142.html
Copyright © 2011-2022 走看看