Will passing outer object class object to static inner creates a memory leak












0















Will passing outer object class object to static inner creates a memory leak?



And how I can check whether it will create the memory leak?



Below is what I am looking for where I have created the inner and outer class, and the way I am planning to use and pass the object.



My main doubt is because I think at some point even though OuterClass object would no more be referenced from anywhere still it would not be GC'ed because InnerClass (which is a STATIC class) is holding a reference of the it. So, I feel this would cause a memory leak.



public class OuterClass {

private int id;
private String name;

public static class InnerClass{
OuterClass outerClass;

public InnerClass(OuterClass outerClass) {
this.outerClass = outerClass;
}

public void printOuterClassDetails(){
System.out.println(outerClass.getId() + " | " + outerClass.getName());
}
}

public OuterClass(int i, String string) {
this.id = i;
this.name = string;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void main(String args) {
OuterClass outerClass = new OuterClass(1, "A");
OuterClass.InnerClass innerClass = new InnerClass(outerClass);
innerClass.printOuterClassDetails();
}

}









share|improve this question

























  • This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

    – Andy Turner
    Jan 2 at 11:56











  • stackoverflow.com/questions/6470651/…

    – Ricola
    Jan 2 at 11:57











  • BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

    – Andy Turner
    Jan 2 at 11:57













  • @AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

    – pjj
    Jan 2 at 13:10











  • @pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

    – NickL
    Jan 2 at 15:53


















0















Will passing outer object class object to static inner creates a memory leak?



And how I can check whether it will create the memory leak?



Below is what I am looking for where I have created the inner and outer class, and the way I am planning to use and pass the object.



My main doubt is because I think at some point even though OuterClass object would no more be referenced from anywhere still it would not be GC'ed because InnerClass (which is a STATIC class) is holding a reference of the it. So, I feel this would cause a memory leak.



public class OuterClass {

private int id;
private String name;

public static class InnerClass{
OuterClass outerClass;

public InnerClass(OuterClass outerClass) {
this.outerClass = outerClass;
}

public void printOuterClassDetails(){
System.out.println(outerClass.getId() + " | " + outerClass.getName());
}
}

public OuterClass(int i, String string) {
this.id = i;
this.name = string;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void main(String args) {
OuterClass outerClass = new OuterClass(1, "A");
OuterClass.InnerClass innerClass = new InnerClass(outerClass);
innerClass.printOuterClassDetails();
}

}









share|improve this question

























  • This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

    – Andy Turner
    Jan 2 at 11:56











  • stackoverflow.com/questions/6470651/…

    – Ricola
    Jan 2 at 11:57











  • BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

    – Andy Turner
    Jan 2 at 11:57













  • @AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

    – pjj
    Jan 2 at 13:10











  • @pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

    – NickL
    Jan 2 at 15:53
















0












0








0








Will passing outer object class object to static inner creates a memory leak?



And how I can check whether it will create the memory leak?



Below is what I am looking for where I have created the inner and outer class, and the way I am planning to use and pass the object.



My main doubt is because I think at some point even though OuterClass object would no more be referenced from anywhere still it would not be GC'ed because InnerClass (which is a STATIC class) is holding a reference of the it. So, I feel this would cause a memory leak.



public class OuterClass {

private int id;
private String name;

public static class InnerClass{
OuterClass outerClass;

public InnerClass(OuterClass outerClass) {
this.outerClass = outerClass;
}

public void printOuterClassDetails(){
System.out.println(outerClass.getId() + " | " + outerClass.getName());
}
}

public OuterClass(int i, String string) {
this.id = i;
this.name = string;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void main(String args) {
OuterClass outerClass = new OuterClass(1, "A");
OuterClass.InnerClass innerClass = new InnerClass(outerClass);
innerClass.printOuterClassDetails();
}

}









share|improve this question
















Will passing outer object class object to static inner creates a memory leak?



And how I can check whether it will create the memory leak?



Below is what I am looking for where I have created the inner and outer class, and the way I am planning to use and pass the object.



My main doubt is because I think at some point even though OuterClass object would no more be referenced from anywhere still it would not be GC'ed because InnerClass (which is a STATIC class) is holding a reference of the it. So, I feel this would cause a memory leak.



public class OuterClass {

private int id;
private String name;

public static class InnerClass{
OuterClass outerClass;

public InnerClass(OuterClass outerClass) {
this.outerClass = outerClass;
}

public void printOuterClassDetails(){
System.out.println(outerClass.getId() + " | " + outerClass.getName());
}
}

public OuterClass(int i, String string) {
this.id = i;
this.name = string;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void main(String args) {
OuterClass outerClass = new OuterClass(1, "A");
OuterClass.InnerClass innerClass = new InnerClass(outerClass);
innerClass.printOuterClassDetails();
}

}






java memory-leaks






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 2 at 13:12







pjj

















asked Jan 2 at 11:53









pjjpjj

706616




706616













  • This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

    – Andy Turner
    Jan 2 at 11:56











  • stackoverflow.com/questions/6470651/…

    – Ricola
    Jan 2 at 11:57











  • BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

    – Andy Turner
    Jan 2 at 11:57













  • @AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

    – pjj
    Jan 2 at 13:10











  • @pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

    – NickL
    Jan 2 at 15:53





















  • This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

    – Andy Turner
    Jan 2 at 11:56











  • stackoverflow.com/questions/6470651/…

    – Ricola
    Jan 2 at 11:57











  • BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

    – Andy Turner
    Jan 2 at 11:57













  • @AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

    – pjj
    Jan 2 at 13:10











  • @pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

    – NickL
    Jan 2 at 15:53



















This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

– Andy Turner
Jan 2 at 11:56





This is no different at all from passing any reference into the constructor of a class. The fact it is a nested class is irrelevant.

– Andy Turner
Jan 2 at 11:56













stackoverflow.com/questions/6470651/…

– Ricola
Jan 2 at 11:57





stackoverflow.com/questions/6470651/…

– Ricola
Jan 2 at 11:57













BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

– Andy Turner
Jan 2 at 11:57







BTW: "static inner" is a contradiction: inner classes are by definition not static. This is a nested class.

– Andy Turner
Jan 2 at 11:57















@AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

– pjj
Jan 2 at 13:10





@AndyTurner But isn't this true that even though outer class object would not be referenced from anywhere else but still it would not be GC'ed because inner class (which is static) is holding a reference of it?

– pjj
Jan 2 at 13:10













@pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

– NickL
Jan 2 at 15:53







@pjj the inner class doesn't hold a reference to anything. The instance of that class, an object, holds a reference to an instance of the outer class. Not because it is an inner class, but because you passed a reference to the instance of the outer class. You are mixing two concepts: classes and objects.

– NickL
Jan 2 at 15:53














0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54005883%2fwill-passing-outer-object-class-object-to-static-inner-creates-a-memory-leak%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54005883%2fwill-passing-outer-object-class-object-to-static-inner-creates-a-memory-leak%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$