JVM内存-以及几个有关内存的关键字

JVM内存结构

(1)涉及JVM调优

JVM分配会对堆区和持久带区进行分配。
参数包括以下:

-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize //堆区大小分配
-XX:PermSize //表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
-XX:MaxPermSize //表示对非堆区分配的内存的最大上限。

(2)按照运行时数据区的划分

线程共享:堆,方法区
线程私有:栈(虚拟机栈,本地方法栈,PC)

方法区存放内容:类名称,类静态变量,final类型变量,类信息(方法,field等),比如说通过class对象的方法getName等,都是来自于方法区域
堆:
总结下,和C一样,所有new的内容都存放在堆上
栈:
栈包括局部变量,函数入参,包括基本数据类型以及堆中存储对象的引用,注意是引用,实际对象还是存储在堆中的。
一个引用占4byte,一个基本的Object类占8byte。

(3)关于JAVA参数传值
之前,在自己的一篇文章中
https://blog.csdn.net/l982817732/article/details/79284613
已经对java参数传值做过整理,这边再补充一些:
其实java里面的参数都可以看为参数传值,传递的引用叫做引用值,并且只会传引用值与基本数据类型值(todo)

(4)JVM垃圾回收
垃圾回收指的是堆上的垃圾回收
概念:新生代、中生代、老年代、持久代
持久代:存放的是静态文件,如Java类,方法等
新生代: 存储区域分为Eden,survivor1,survivor2,tenured(老年代)

几个有关内存位置关键字的概念:

(1)static 关键字用法:
在面向对象的语言中(java c++),经过static修饰后的变量、方法都是属于该类,并不会属于某一个对象。
其在内存中的位置也是在静态存储区(java的方法区)。
在java中:
1.static还可以用来修饰静态块,将多个类成员放在一起初始化,经过static修饰过得成员变量只会初始化一次(是属于类的)
2.static还可以静态导包,将包内的方式直接导入当前类中,但是并不是很常见。
在C语言中static的作用有:
1.限制变量的作用域(本文件有效)
2.局部的static变量作用域仍然是局部作用域,但是其存在空间仍然在静态存储区
同样的是,static变量只会被初始化一次

(2)final
final是java中的关键字,如上所说,final类型的变量是存储在方法区的。经过final修饰过的变量分为几下几类:
1.基本类型变量:
表示该变量的值不能被修改
2.引用类型变量:
改引用变量不能指向另外一个对象,但是该引用变量指向的对象内容是可以修改的。
3.修饰类
表示该类不能被继承
4.修饰方法
表示该方法不能被重写
另外需要和finally,以及finalize区别开,前者用于异常块处理,后者是object基类的方法操作,用于JVM的垃圾回收

(3)const
const是C/C++中的关键字,容易混淆的是,常量指针,指针常量等

 int *const p=&a; //p值不能修改
 const int *p;   //p值可以修改

参考:
https://www.cnblogs.com/dotgua/p/6354151.html
https://blog.csdn.net/damon_hoo/article/details/38903041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值