jvm分为: java
{ 受到GC管理(线程共享) c++
}{为每一个线程私有空间 网络
} jvm
设置堆最大空间256MB(按需分配), 初始空间50MB spa
java -Xmx256M -Xms50M // 代码中查看: Runtime.getRuntime().maxMemory() 操作系统
设置线程最大的栈空间,128K, 决定java嵌套调用的最大层次 线程
(说明:java每嵌套调用一个方法就会向java栈中压入一个栈帧①。调用的层次越多栈内存就消耗的越多。当栈内存已经没法支付方法的调用时抛出StackOverflowError) 代理
java -Xss128K 对象
设置方法区的初始与最大使用空间分别为5MB和64MB 内存
java -XX:PermSize=5M -XX:MaxPermSize=64M //jdk6 , jdk7 设置
(说明:分配越大的空间,就能够加载越多的类。动态代理可能会建立大量并加载大量的类。
在jdk8中的设置: java -XX:MaxMetaspaceSize64M。在jdk中若是不设置大小,虚拟机可能会耗尽全部的系统内存,由于它用的是直接内存。)
①栈帧:{
1.局部变量表:用于存在方法的参数与局部变量,仅仅是变量名,其引用指向堆中
2.操做数据栈:保存计算过程的中间结果,一个临时的存储空间
3.帧数据区: 常量池解析,方法的返回结果,与异常的处理
}