相关疑难解决方法(0)

静态类和单例模式之间的区别?

静态类和单例模式之间存在什么真实(即实际)差异?

两者都可以在没有实例化的情况下调用,两者都只提供一个"实例",它们都不是线程安全的.还有其他区别吗?

singleton static design-patterns

1708
推荐指数
21
解决办法
48万
查看次数

Java堆术语:年轻,古老和永久的世代?

我试图理解Java堆术语中年轻,一代永久世代的概念,更具体地说是三代之间的相互作用.

我的问题是:

  • 什么是年轻一代?
  • 什么是老一代?
  • 什么是永久世代?
  • 三代人如何相互作用/相互联系?

java garbage-collection jvm heap-memory

304
推荐指数
4
解决办法
22万
查看次数

在JDK 8中消除PermGen

我已经安装了JDK 8并尝试运行Eclipse.我收到以下警告信息:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 
Run Code Online (Sandbox Code Playgroud)

忽视这个论点的原因是什么?

java jvm permgen java-8

220
推荐指数
6
解决办法
17万
查看次数

java中的静态分配 - 堆,堆栈和永久生成

我最近一直在阅读java中的内存分配方案,并且由于我从各种来源阅读,因此有很多疑问.我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论.我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的.

  1. 类(由类加载器加载)进入堆上的特殊区域:永久生成
  2. 与类名称,与类关联的对象数组,JVM使用的内部对象(如java/lang/Object)和优化信息等类相关的所有信息都会进入永久生成区域.
  3. 所有静态成员变量再次保留在"永久生成"区域中.
  4. 物体在不同的堆上:年轻一代
  5. 每个类只有一个方法的副本,无论是静态还是非静态方法.该副本放在永久生成区域.对于非静态方法,所有参数和局部变量都进入堆栈 - 只要对该方法进行具体调用,我们就会得到一个与之关联的新堆栈帧.我不确定静态方法的局部变量存储在哪里.他们是永久世代的堆吗?或者只是他们的引用存储在Permanent Generation区域,而实际的副本是在其他地方(Where?)
  6. 我也不确定方法的返回类型存储在何处.
  7. 如果对象(在年轻代中)需要使用静态成员(在永久生成中),则为它们提供对静态成员的引用&&它们被给予足够的存储空间来存储方法的返回类型等.

谢谢你经历这个!

java static memory-management permanent-generation

110
推荐指数
1
解决办法
6万
查看次数

等效静态和非静态方法的速度差异很大

在此代码中,当我在main方法中创建一个Object 然后调用该对象方法:( ff.twentyDivCount(i)运行在16010毫秒)时,它运行速度比使用此注释调用它快得多:( twentyDivCount(i)运行在59516毫秒).当然,当我在不创建对象的情况下运行它时,我将方法设为静态,因此可以在main中调用它.

public class ProblemFive {

    // Counts the number of numbers that the entry is evenly divisible by, as max is 20
    int twentyDivCount(int a) {    // Change to static int.... when using it directly
        int count = 0;
        for (int i = 1; i<21; i++) {

            if (a % i == 0) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        long startT = System.currentTimeMillis();;
        int start = …
Run Code Online (Sandbox Code Playgroud)

java methods performance static object

86
推荐指数
2
解决办法
8254
查看次数

静态变量的实际内存位置是多少?

静态变量是在程序执行的整个持续时间内分配的,因此堆栈和堆都不方便.那它在哪里?应该有一些装载的地方?

java memory garbage-collection memory-management

27
推荐指数
3
解决办法
4万
查看次数

java静态变量存储在内存中的位置?

class A{
 static int i = 10;
 static int j = 20;

 static void getname(){

   }

}
Run Code Online (Sandbox Code Playgroud)

这些变量将存储在内存中的哪个位置?

java static-variables

14
推荐指数
3
解决办法
2万
查看次数

静态嵌套类的实例变量与外部类的静态变量

我在 java 中使用静态嵌套类用于特定用例。下面显示了相同的最小示例:

public class Foo {
    static int fooInner = getInner(); // CASE 1 

    private static class StaticFoo {
        int fooInner = getInner(); // CASE 2

        public int useFooInner(){
            System.out.println(fooInner);
            //do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是案例 1 中的内存分配与案例 2 中的内存分配有何不同?或者是一样的?如果我也将 case 2 变量设为静态会怎样。内存使用会有所不同吗?

注意:请不要提及会发生阴影。虽然我已经将两个变量都放在那里,但它是一个“OR”案例,这就是“CASE”的原因。

PS:感觉内存使用量应该是一样的。由于嵌套类是静态的,因此不会为每个对象创建它,因此实例变量fooInner (案例 2)也将只创建一次。因此, getInner() 函数将只运行一次。但这只是抽象层面+直觉。更具描述性的答案将不胜感激!

java static static-classes java-8

6
推荐指数
1
解决办法
158
查看次数

在java中加载/卸载静态方法和内存区域?

我有四个关于java中的静态方法的问题:

1)在内存中加载静态方法?什么时候加载类或者第一次调用方法?

2)从内存中卸载静态方法?当类被卸载或者该方法的执行流程在调用后结束时?

3)加载JVM静态方法的内存区域?在堆栈内存区域或者JVM中有不同类型的内存用于静态方法(我也读过一些静态内存)?

4)在我们的应用程序中有这么多静态方法是否合适?

我在这个网站和其他网站上经历了很多问题,但他们没有明确说明.

java static-methods memory-management

5
推荐指数
1
解决办法
4158
查看次数

Permgen是不是堆的一部分?

我从官方的oracle网站找到了图片在此输入图像描述

但在流行的SO答案中,我发现永久生成不是堆的一部分

永久生成(非堆):包含虚拟机本身的所有反射数据的池,例如类和方法对象.对于使用类数据共享的Java VM,这一代分为只读和读写区域.

我搞砸了这些矛盾的数据.我相信在这两个地方数据有效但有保留.请为我澄清这个问题.

PS

我只谈谈Sun/Oracle jvms.

PS2

我已经阅读了jvm gcs(串行,并行,cms和g1)的解释,我没有看到关于permgen的提及,它认为永久生成不是堆部分.

java garbage-collection heap-memory

5
推荐指数
2
解决办法
7821
查看次数