Will passing outer object class object to static inner creates a memory leak
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
add a comment |
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
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
add a comment |
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
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
java memory-leaks
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
add a comment |
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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