在Java中,是一个总是放在堆上的全局变量吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中,是一个总是放在堆上的全局变量吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1457字,纯文字阅读大概需要3分钟。
内容图文
![在Java中,是一个总是放在堆上的全局变量吗?](/upload/InfoBanner/zyjiaocheng/733/b25c3eece0954d17b40dd70964901e20.jpg)
另外,静态变量如何影响事物呢? (如果有的话)例如:
class MyClass{
static int[][] data;
static {
data = new int[some number][some number]; /*read data into array*/
}
static void run() {
/*now use data here*/
}
}
这是放在堆上吗?比较那个例子
class MyClass{
static void run() {
int[][] data = new int[some number][some number];
/*now use data here*/
}
}
这两个代码示例之间有多大差异?请放下任何见解.
解决方法:
Java有一个PermGen空间的概念 – 这是用于存储所有类定义,静态变量,实习字符串等的空间.
here is link
This Java heap memory is structured again into regions, called generations. The longer an object lives, the higher the chance it will be promoted to an older generation. Young generations(such as Eden on Sun JVM) are more garbage collected than older generations(survivor and tenured on Sun JVM). However, there is also some separate heap space called permanent generation. Since it is a separate region, it is not considered part of the Java Heap space. Objects in this space are relatively permanent. Class definitions are stored here, as are static instances.
这里也可以找到PermGen空间的完整描述,但请注意,这在Java 8:here is link中有所改变
静态变量存储在那里,动态分配的东西存储在常规堆中.
(注意,即使对于静态数组,放置在数组中的东西也是动态生成的).
你的第二个例子对于这种情况更好,除非你真的需要记住调用之间该数组的内容.您一直在使用内存来存储您在方法内部时只需要的数组.另外,通过使用静态数据,您的方法不可重入.这意味着如果两个线程同时调用该方法,那么它们将相互干扰并产生不良结果.
内容总结
以上是互联网集市为您收集整理的在Java中,是一个总是放在堆上的全局变量吗?全部内容,希望文章能够帮你解决在Java中,是一个总是放在堆上的全局变量吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。